控制文件恢复

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数据库恢复技术




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值