由Todd Bao《oracle 11g 数据库恢复技术》整理:
实践平台:win 11.2.0.3 64bit
控制文件包含已下信息:
dbname,dbid,数据库创建时间戳,字符集,datafile,tempfile,redo log,archivelog,tablespace,rman 资料库,checkpoint,损坏的数据块注册表,还原点,重设日志SCN,脏数据库块的数量等。
写操作对所有控制文件,而读操作只读第一个控制文件。
分类:
备份文件按时间跨度分类:
(1)在线镜像备份:一般有三个镜像。
(2)结构备份:具有数据库的物理结构,只是SCN,日志序列发生变化。
(3)历史备份:备份后数据库结构发生了变化,此备份便为历史备份。
备份:
自动备份:
显式自动备份:
rman配置参数 configure controlfile autobackup on;
发生条件:1.rman任何备份操作,导致控制文件内RMAN资料库被更新(configure命令发生变化除外)2.数据库物理结构发生变化后。
隐式自动备份:
当备份system数据文件时,即使configure controlfile autobackup off状态,也会自动备份。
手动备份:
1.备份集备份:
RMAN>backup as backupset current controlfile;
2.镜像复制备份:
RMAN>backup as copy current controlfile ;
SQL> alter database backup controlfile to ‘d:\backup\controlfile1.bak’;
3.重建脚本:
SQL> alter database backup controlfile to trace;
查看跟踪文件:
select value from v$diag_info where name=’Default Trace File’;
提取noresetlogs后的进行重建。
恢复:
1.利用镜像进行恢复。最简单快捷。前提是其他控制文件未发生损坏。
2.利用自动备份恢复:
RMAN>startup nomount;
RMAN>restore controlfile from autobackup;
RMAN>mount database;
RMAN>recover database;
RMAN>alter dabase open resetlogs;
Recover database的上下文,分为三类:
(1)SQL>recover database ;该命令只是对所有的数据文件进行恢复,并且只能使用保存在文件系统上的归档和在线日志,前提是控制文件不能是还原或是重建得来的。
(2)SQL>recover database using backup contorlfile; 该命令是对所有数据文件和控制文件进行恢复,并且只能使用保存在文件系统上的归档日志和在线日志。
(3)RMAN>recover database;对所有数据文件和控制文件进行恢复,并且可以使用增量备份,备份中的和文件系统中的归档日志,以及文件系统上的在线日志。
3.利用手动备份进行恢复:
RMAN>startup nomount;
RMAN>restore controlfile from ‘D:\backup\ORCL\BACKUPSET\2013_11_17\O1_MF_NCNNF_TAG20131117T173020_98K35J7V_.BKP’;
RMAN>mount database;
RMAN>recover database;
RMAN>alter dabase open resetlogs;
4.利用历史备份进行恢复
(1)自动修复不一致
在备份后控制文件后,添加了表空间test,如果没有控制文件的自动备份,即configure controlfile autobackup off,步骤:
RMAN>startup nomount;
RMAN>restore controlfile from ‘d:\backup\controlfile. bak’;
RMAN>mount database;
查看是否有test数据文件:
select name from v$datafile;
RMAN>restore database;
select name from v$datafile;
查看数据文件已有test数据文件
RMAN> alter database open resetlogs;
(2)手动修复不一致
备份了控制文件,之后把test表空间删除,数据库物理结构发生变化,还原controlfile之后,控制文件会认为test是存在的,但实际上是没有的。
步骤:
RMAN>STARTUP NOMIUNT;
RMAN>RESTORE CONTROLFILE FROM ‘D:\BACKUP\CONTROLFILE.BAK’;
RMAN>MOUNT DATABASE;
查看视图test 是存在的
select name from v$datafile;
RMAN>RECOVER DATABASE;
此时会报错:数据文件需要恢复:
将其脱机:alter database datafile 9 offline;
在SQL执行控制文件的恢复:
SQL>recover database using backup controlfile;
输入auto
此时会应用archivelog,之后再次执行Recover database using backup controlfile;尝试着输入redo log文件,进行在线日志的恢复,完毕
SQL>alter databaseopen resetlogs;
SQL>select name from v$datafile;
发现test数据文件消失。
或者是在mount database 后执行命令:recover database skip tablespace 'TEST';亦可恢复。
还有一种情况,备份后archive log 丢失。还原控制文件之后recover database后,报错找不到日志文件,尝试打开数据库报错,ora-01194,1110,system数据文件需要一致性恢复。此时需要手工创建控制文件,运行noresetlogs一段,自行进入mount状态,recover database跳过归档日志,SQL>recover database using backup controlfile; 应用在线日志alter database open resetlogs; 完毕。