SQL> alter system dump logfile '+DG1/sales1/onlinelog/group_4.288.807574415' ;
System altered.
SQL> select value from v$diag_info where name='Default Trace File';
VALUE
------------------------------------------------------------------------------------------------------------------------------------------------------
/oracle/app/oracle/diag/rdbms/sales/sales/trace/sales_ora_8261.trc
SQL>
一:手动备份控制文件
SQL> alter database backup controlfile to trace;
Database altered.
SQL> select value from v$diag_info where name='Default Trace File';
VALUE
--------------------------------------------------------------------------------
/oracle/app/oracle/diag/rdbms/sales/sales/trace/sales_ora_29694.trc
SQL>
[root@julia01 ~]# sed -n "/NORESETLOGS/,/REUSE AUTOEXTEND ON/P" /oracle/app/oracle/diag/rdbms/sales/sales/trace/sales_ora_29694.trc |grep -v '^--'
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "SALES" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 2336
LOGFILE
GROUP 1 (
'+DATA/sales/onlinelog/group_1.257.800160081',
'+DG1/sales/onlinelog/group_1.257.800160081'
) SIZE 50M BLOCKSIZE 512,
GROUP 2 (
'+DATA/sales/onlinelog/group_2.258.800160083',
'+DG1/sales/onlinelog/group_2.258.800160083'
) SIZE 50M BLOCKSIZE 512,
GROUP 3 (
'+DATA/sales/onlinelog/group_3.259.800160083',
'+DG1/sales/onlinelog/group_3.259.800160083'
) SIZE 50M BLOCKSIZE 512,
GROUP 4 (
'+DATA/sales/onlinelog/group_4.266.807574005',
'+DG1/sales/onlinelog/group_4.288.807574415'
) SIZE 50M BLOCKSIZE 512
DATAFILE
'+DATA/sales/datafile/system.260.800160083',
'+DATA/sales/datafile/sysaux.261.800160091',
'+DATA/sales/datafile/undotbs1.262.800160097',
'+DATA/sales/datafile/users.264.800160109',
'+DATA/sales/datafile/test.273.810707045',
'+DATA/sales/datafile/rman_catalog.314.811237545'
CHARACTER SET WE8MSWIN1252
;
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('RETENTION POLICY','TO REDUNDANCY 1');
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('BACKUP OPTIMIZATION','OFF');
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1');
RECOVER DATABASE
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '+DATA/sales/changetracking/ctf.272.810336541' REUSE;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/sales/tempfile/temp.263.800160099'
SIZE 2883M REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
[root@julia01 ~]#
二 . 控制文件的恢复是需要在线重做日志的帮助的。
恢复包括先从备份还原,然后用重做日志恢复
为了恢复控制文件,数据库应该处在nomount状态,可以使用shutdown abort命令关闭实例,接着虽然可以用startup nomount,但是最好还是用startup命令启动实例,使其自然卡在nomount状态,这样做可能会在警告日志和追踪日志中产生更多有价值的信息。
1.利用在线镜像恢复
查看警告日志,把好的控制文件copy到损坏的控制文件的位置,注意copy之前要把各个控制文件备份一下。
然后alter database mount;alter database open;
不许要recover操作,因为在线镜像备份,拥有所有的当前信息,所以无须利用重做日志介质恢复。
三.利用自动备份恢复
startup nomount,进入unmount状态后,利用rman
rman>restore database from autobackup
控制文件本身就是rman的资料库,自动备份在何处是保存在控制文件中的,现在控制文件损坏了,rman资料库同样也损坏了,从哪里知道自动备份的位置呢。
答案是参数文件,参数db_recovery_file_dest指定了快速恢复区的位置,而控制文件自动备份是放在快速恢复区的。
还原结束后,打开控制文件,也就是命令数据库进入mount状态
rman>mount database
rman>recover database ;
recover database 命令上下文,3种recover database命令
(1)sql>recover database;
该命令对所有的数据文件进行恢复,前提控制文件不是还原或者重建得来的
(2)sql>recover database using backup controlfile ;改命令对所有的数据文件和控制文件进行恢复。
(3)rman>recover database ;改命令对所有的控制文件和数据文件进行恢复。并且可以使用增量备份。---只适用于单实例。
例子最后用resetlogs打开数据库,使用resetlogs的原因是recover命令只能修复控制文件中数据库物理结构信息,而无法修复控制文件中的当前重做日志的序列号等信息,recover命令执行完毕后,控制文件中当前在线的日志序列号还是陈旧的(是当初备份时的),oracle采用重设日志,将日志序列号重新从1开始,此处虽然使用了resetlog,但是因为recover database 命令的成功执行已经提交的事物不会丢失。
rman>alter database open resetlogs;
四.手动备份恢复
手动备份可以是备份集,也可以是操作系统命令copy。恢复过程与三(自动备份恢复)类似,只是需要搜索备份集的位置,
rman>restore controlfile from '<备份集路径>' 或者用操作系统把镜像备份copy到原来的位置,管理员必须自行确定控制文件备份集的位置。
然后,mount ,recover database ,resetlogs打开。
指定备份路径的原因是,由于当初是手动备份,而不是自动备份,备份文件显然没有保存在快速恢复区的autobackup目录下,备份本身也不是自动备份,rman显然找不到你手动备份放在哪里,什么名字等信息。
后续。。。。
参考:临危不惧 Oracle 11g数据库恢复技术