oracle命令3 冷备份
用户管理的备份:
备份脚本要自己写;
备份哪些文件要自己选;
恢复时要复制那些文件自己判断;
恢复需要的日志,自己找;
备份,需要备份保存关键SCN信息的文件;
一次完成的备份包括:控制文件,数据文件,日志文件。
冷备份:
一致性关闭数据库后,对文件进行备份,通过操作系统命令直接拷贝 控制文件,数据文件,日志文件。 容易实现,操作简单,但是会影响正常使用。
热备份:
在数据库运行时,对文件进行备份,操作起来将冷备份复杂,不完全影响正常使用;
冷备份:
恢复时,会用永久丢失数据。 备份是关闭数据库,还原是也要关闭数据库。
手动创建备份目录:
# mkdir /u02
# chown -R oracle:onistall /u02
# cd /u02
# mkdir clobak
# mkdir hotbak
SQL> conn hr/hr
SQL> select * from tab; #查看有哪些表
SQL> drop table e purage; #删除e表
SQL> create table before_backup as select * from employees;
SQL> select * from tab; # 验证检查下
查看要备份的表的位置:
SQL> conn / as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> select name from v$datafile; # 查看数据文件在哪
NAME
-------------------------------------------------------------------------------
/data/oracle/oradata/orcl/system01.dbf
/data/oracle/oradata/orcl/sysaux01.dbf
/data/oracle/oradata/orcl/undotbs01.dbf
/data/oracle/oradata/orcl/users01.dbf
/data/oracle/oradata/orcl/example01.dbf
SQL>
SQL> select name from v$controlfile; # 查看控制文件在哪
NAME
--------------------------------------------------------
/data/oracle/oradata/orcl/control01.ctl
/data/oracle/flash_recovery_area/orcl/control02.ctl
SQL>
SQL> select member from v$logfile; # 查看日志文件在哪
MEMBER
---------------------------------------------------------
/data/oracle/oradata/orcl/redo03.log
/data/oracle/oradata/orcl/redo02.log
/data/oracle/oradata/orcl/redo01.log
SQL>
SQL> shutdown immediate # 一致性关闭数据库,会自动执行检查点
# cp 控制文件,数据文件,日志文件。
会有多个控制文件,不过文件都是一样的;
严谨些,就都复制;不严谨些,就只复制一个就行。
SQL> startup; #直接打开数据库
SQL> hr/hr
SQL> create table after_backup as select * from employees;
SQL> select * from tab;
模拟故障:
# rm -rf *.log
由于缓存原因,有时不会直接报错,因此直接重启数据库;
SQL> shutdown abort
SQL> startup;
提示报错;
只将备份的日志文件拷贝回来,open数据库还是会报错;如,备份日志文件中redo3只记录到6号,备份后,由于其他操作,日志文件已经记录到了 sequece 15,备份恢复回来的日志,从报错中可以看出,日志记录为6,7,8。 而数据块需要的是13,14,15 。 但是13,14,15已经删除,找不回来,所以只能还原到6,7,8 。(冷备份还原也需要先关掉数据库)
所以需要:
# cp 控制文件,数据文件,日志文件。 # 要把所有的控制文件,数据文件,日志文件都要拷贝回来,覆盖原来的文件。
SQL> startup;
SQL> hr/hr
SQL> select * from tab;
发现只有 beforte_backup 的表;
查看日志文件: sequence:6,7,8;
查看检查点: 883667, 发现数据库已经倒回到之前的状态;
冷备份,丢失极少数据:
开启归档,保存日志;
启用归档,三步骤:
1、一致性情况,并启动到mount;
2、修改为归档模式;保存日志的位置优先使用快速恢复区,这个是默认自动选择的。
3、启动数据库。
SQL> archive log list; # 查看归档
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 3
Current log sequence 5
SQL>
SQL> show parameter recover # 查看快速恢复区位置
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string /data/oracle/flash_recovery_ar
ea
db_recovery_file_dest_size big integer 3882M
recovery_parallelism integer 0
SQL>
开启归档:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 764121088 bytes
Fixed Size 2217264 bytes
Variable Size 478153424 bytes
Database Buffers 281018368 bytes
Redo Buffers 2732032 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 3
Next log sequence to archive 5
Current log sequence 5
SQL>
SQL> select name from v$datafile
union all
select name from v$controlfile;
union all
select member from v$logfile;
NAME
---------------------------------------------
/data/oracle/oradata/orcl/system01.dbf
/data/oracle/oradata/orcl/sysaux01.dbf
/data/oracle/oradata/orcl/undotbs01.dbf
/data/oracle/oradata/orcl/users01.dbf
/data/oracle/oradata/orcl/example01.dbf
/data/oracle/oradata/orcl/control01.ctl
/data/oracle/flash_recovery_area/orcl/control02.ctl
7 rows selected.
备注: union all 合并两个或多个 SELECT 语句的结果集
可以用SQL语句直接生成拷贝命令:
SQL> select '!cp -v ' ||name|| '/u02/colbak' from v$datafile
union all
select '!cp -v ' ||name|| '/u02/colbak' from v$controlfile
union all
select '!cp -v ' ||member|| '/u02/colbak' from v$logfile;
'!CP-V'||NAME||'/U02/COLBAK'
--------------------------------------------------------------------------------
!cp -v /data/oracle/oradata/orcl/system01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/sysaux01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/undotbs01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/users01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/example01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/control01.ctl/u02/colbak
!cp -v /data/oracle/flash_recovery_area/orcl/control02.ctl/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo03.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo02.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo01.log/u02/colbak
10 rows selected.
SQL>
写个冷备份脚本:
# su - oracle
$ vi colbak.sh
$ cat colbak.sh
sqlplus / as sysdba << eof
shutdown immediate
!cp -v /data/oracle/oradata/orcl/system01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/sysaux01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/undotbs01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/users01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/example01.dbf/u02/colbak
!cp -v /data/oracle/oradata/orcl/control01.ctl/u02/colbak
!cp -v /data/oracle/flash_recovery_area/orcl/control02.ctl/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo03.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo02.log/u02/colbak
!cp -v /data/oracle/oradata/orcl/redo01.log/u02/colbak
startup
exit
eof
$ chmod u+x colbak.sh
$./colbak.sh
可以看日志; alert_orcl.log
备注:
在shell命令中,格式为
命令 << EOF
内容段
EOF
将“内容段”整个作为命令的输入。其实,不一定要用EOF,只要是“内容段”中没有出现的字符串,都可以用来替代EOF,只是一个起始和结束的标志罢了。
这样连接scott时就不会提示密码问题了。
SQL> conn scott/oracle
ERROR:
ORA-28000: the account is locked
SQL> conn / as sysdba
Connected.
SQL> alter user scott account unlock;
User altered.
SQL> alter user scott identified by oracle; # 修改scott密码为oracle
User altered.
SQL> conn scott /oracle
Connected.
SQL> show user
USER is "SCOTT"
SQL> @check #执行sql后缀的文件
$ vi check.sql
$ cat check.sql
!echo "控制文件scn:"
select checkpoint_change# from v$datafile;
echo "数据文件scn:"
select checkpoint_change# from v$datafile_header;
!echo "日志文件scn:"
select group#,SEQUENCE#,FIRST_CHANGE# FIRST_TIME,NEXT_CHANGE# NEXT_TIME from v$log;
$conn / as sysdba
SQL> @check
再发起备份:
$./colbak.sh
SQL> create table after_backup as select * from employees;
模拟故障,删除前,做下日志切换,确保日志切换覆盖:
SQL> alter system switch logfile;
$ cd /u01/app/oracle/oradata/orcl #具体路径,根据查找的实际情况看
$ rm -rf *.log
SQL> shutdown abort
SQL> startup
出现报错;
仅复制丢失的redo,恢复还是会报错;
冷备的特点,停机一起备,停机一起恢复;
SQL> shutdown abort
只复制数据文件,不复制redo,不复制控制文件。
SQL> @check
检查点SCN:887386
数据文件SCN: 886766
说明数据文件老,因为数据文件是从备份拷贝过来的。
控制文件是新的,记录着数据库丢失日志文件时,数据库的检查点状态。
使用日志文件进行恢复:
SQL> recover database;
提示需要归档日志,自己找到了目录
输入: auto
数据库就能自己找,去恢复。进行一系列的恢复后,报错
redo01 记录的19号日志,被删除。 (online log 1 thread 1:"/u01/app/oracle/oradata/orcl/redo01.log")
但是,19号以前的日志,都存在。
命令数据库,对数据进行恢复时,恢复到18号日志即可。19号日志舍去,不再进行恢复。
SQL> recover database until cancel;
提示恢复1号日志;
输入:cancel
SQL> alter database open; 会报错;
SQL> alter database open resetlogs; #已resetlog打开数据库,当前SCN为0,保证SCN的连续性。
oracle命令3 冷备份的更多相关文章
- Oracle命令:授权-收回权限-角色
Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限 ...
- Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明
Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...
- 给oracle命令的参数赋值
''' <summary> ''' 给oracle命令的参数赋值 ''' </summary> ''' <param name="cmd& ...
- Oracle命令类别
Oracle命令类别: 数据操纵语言:DML: select; insert; delete; update; merge. 数据定义语言:DDL: create; alter; drop; trun ...
- Linux下登录Oracle命令行时删除键^H解决方法
Linux下登录Oracle命令行时删除键^H解决方法 在linux服务器下登录oracle的控制台,如果输入错误,想用删除键删除时却不能删除,输出的是^H的字符. 方法 用如下的命令可以使删除键生效 ...
- oracle命令大全
内容包括三大项: 1.oracle基本操作语句 2.SQLServer基本操作语句 3.各种数据库连接方法 ******************************************* ...
- oracle数据库的冷备份
前言 冷备份是Oracle最简单的一种备份,所谓的冷备份指的就是在关闭数据库实例的情况下进行数据库备份操作的实现:然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件.能简单快速地备份.能简 ...
- oracle命令
oracle创建表空间: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如[D:\oracle\oradata\Oracle9i\]也就是你要 ...
- oracle命令识记
连接数据库 sqlplus /nolog; conn / as sysdba; set ORACLE_SID=实例名; 查看表结构命令 select table_name from user_tabl ...
- oracle 命令创建用户 、授权、数据库导入、导出
最近在使用oracle,经常要导入导出数据,命令很简单,却经常忘记,所以记下来.. drop user yfplss cascade;--登录system用户删除已存在的用户名,该用户下的所有东西都被 ...
随机推荐
- mysql截取函数,拼接函数,大写函数例子
题目:这题目是牛客网sql题,因为牵扯到3个函数,都是自己没怎么用过的,所以记录一下. 答案:是别人的解题思路 可以看出在mysql中提供的函数可以供我们使用来操作字段,非常的方便
- VSCode中打开NodeJS项目自动切换对应版本的配置
这几年搞了不少静态站点,有的是Hexo的,有的是VuePress的.由于不同的主题对于NodeJS的版本要求不同,所以本机上不少NodeJS的版本. 关于如何管理多个NodeJS版本,很早之前就写过用 ...
- Web网页音视频通话之Webrtc相关操作(一)
目录 打开摄像头/关闭摄像头 静音/解除静音 打开视频/关闭视频 截图且下载 打开摄像头/关闭摄像头 效果图 HTML <!DOCTYPE html> <html lang=&quo ...
- JMeter脚本报错:Cannot find engine named: 'javascript'的解决方法
本文将介绍如何解决在JMeter版本5.4.1下执行脚本时出现的错误信息"javax.script.ScriptException: Cannot find engine named: 'j ...
- 【Kubernetes】yaml文件编写 -- 持续更新
K8S通过yaml格式的声明式API与资源对象交互 API版本由apiVersion字段指定,API对象类型由kind字段指定 除此之外,每个API对象有三大类属性: metadata:元数据 spe ...
- TCP 初识(一)
什么是TCP? TCP是面向连接的,可靠的,基于字节流的传输层通信协议. 面向连接:一定是一对一才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的. 可靠的:无论网 ...
- ArrayList按指定大小分割集合
ArrayList按指定大小分割集合 项目中使用SpringDataJpa的使用,用到了批量操作,发现框架本身有限制,长度不能超过1000,所以就百度了一下,网上都说是分段处理,也有说用OR的,但数据 ...
- MAUI Blazor 显示本地图片的新思路
前言 好久没写文章了,水一篇 关于MAUI Blazor 显示本地图片这个问题,有大佬发过了. 就是 token 大佬的那篇 Blazor Hybrid (Blazor混合开发)更好的读取本地图片 主 ...
- 关于开设go语言专题的说明
这个博客账号已经停更了约5年,期间我经历了比较多的事情,开始几个github开源项目,例如go-etl已经有两年.现在已经我在这方面有了许多积累,足够开设相关的专题.不用担心博主会断更,因为相关的内容 ...
- Redis从入门到放弃(6):持久化
1.引言 Redis作为一种高性能的内存数据存储系统,常被用作缓存.会话存储.消息队列等多种应用场景.然而,由于其数据存储在内存中,一旦发生意外或服务器重启,数据就会丢失.为了保障数据的持久性和安全性 ...