Oracle恢复实例之一:数据文件、控制文件、联机日志丢失

假设保存数据库文件的硬盘出现了故障,导致当前数据库所有的控制文件、数据文件、联机日志文件都丢失或损坏了,而只剩下备份集和该备份集之后的所有归档日志文件,在这种情况下,由于联机日志文件已经丢失,只能使用不完全恢复,恢复的情况由归档日志文件的完整度决定。现在我们开始来模拟这个实验:
1)首先,备份数据库,待会儿就利用这个备份集来做恢复。
RMAN> backup database format'H:\INTEL_DB_DUMPS\O04DMS0\rman\O04DMS0_%U';

Starting backup at 20-NOV-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=I:\INTEL_DATA\O04DMS0\SYSTEM01.O04DMS0
input datafile fno=00002 name=I:\INTEL_DATA\O04DMS0\UNDOTBS01.O04DMS0
input datafile fno=00006 name=I:\INTEL_DATA\O04DMS0\SYSAUX01.O04DMS0
input datafile fno=00003 name=I:\INTEL_DATA\O04DMS0\USERS01.O04DMS0
input datafile fno=00004 name=I:\INTEL_DATA\O04DMS0\SECURITY_D.O04DMS0
input datafile fno=00005 name=K:\INTEL_INDEX\O04DMS0\SECURITY_I.O04DMS0
channel ORA_DISK_1: starting piece 1 at 20-NOV-11
channel ORA_DISK_1: finished piece 1 at 20-NOV-11
piece handle=H:\INTEL_DB_DUMPS\O04DMS0\RMAN\O04DMS0_05MS3KIH_1_1 tag=TAG20111120T033648 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:37
Finished backup at 20-NOV-11

Starting Control File and SPFILE Autobackup at 20-NOV-11
piece handle=H:\INTEL_DB_DUMPS\O04DMS0\RMAN_F\C-3120696418-20111120-00 comment=NONE
Finished Control File and SPFILE Autobackup at 20-NOV-11

注意这次备份产生2个文件,第一个包含所有的数据文件,第二个包含控制文件和参数文件。

2)准备测试数据,我们向测试表中插入两条数据,第一条的redo已经被归档,而第二条的redo还在联机日志中。
创建测试表:
SQL> create table test (id number);
插入第一条数据:
SQL> insert into test values(1);
SQL> commit;
切换日志使得包含第一天的redo被归档:
SQL>alter system switch logfile;
插入第二条数据,该条数据所对应的redo未被归档:
SQL> insert into test values(2);
SQL> commit;

3)模拟灾难:删除所有的数据文件、控制文件、联机日志文件,且数据库
异常关闭数据库:
SQL> shutdown abort;
删除所有的数据文件,联机日志和控制文件。

4)从备份集中恢复控制文件:
首先启动数据库至nomount状态(可以启动到nomount状态时因为参数文件还在):
RMAN> startup nomount
接着从备份集中恢复控制文件:
RMAN> restore controlfile from 'H:\INTEL_DB_DUMPS\O04DMS0\RMAN_F\C-3120696418-20111120-00';

Starting restore at 20-NOV-11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=157 devtype=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:17
output filename=I:\INTEL_DATA\O04DMS0\CONTROL01.O04DMS0
output filename=J:\INTEL_LOG\O04DMS0\CONTROL02.O04DMS0
output filename=K:\INTEL_INDEX\O04DMS0\CONTROL03.O04DMS0
Finished restore at 20-NOV-11

5)所有的控制文件都已经恢复成功,现在开始恢复数据文件:
RMAN> sql 'alter database mount';
RMAN> restore database;

Starting restore at 20-NOV-11
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to I:\INTEL_DATA\O04DMS0\SYSTEM01.O04DMS0
restoring datafile 00002 to I:\INTEL_DATA\O04DMS0\UNDOTBS01.O04DMS0
restoring datafile 00003 to I:\INTEL_DATA\O04DMS0\USERS01.O04DMS0
restoring datafile 00004 to I:\INTEL_DATA\O04DMS0\SECURITY_D.O04DMS0
restoring datafile 00005 to K:\INTEL_INDEX\O04DMS0\SECURITY_I.O04DMS0
restoring datafile 00006 to I:\INTEL_DATA\O04DMS0\SYSAUX01.O04DMS0
channel ORA_DISK_1: reading from backup piece H:\INTEL_DB_DUMPS\O04DMS0\RMAN\O04DMS0_05MS3KIH_1_1
channel ORA_DISK_1: restored backup piece 1
piece handle=H:\INTEL_DB_DUMPS\O04DMS0\RMAN\O04DMS0_05MS3KIH_1_1 tag=TAG20111120T033648
channel ORA_DISK_1: restore complete, elapsed time: 00:00:56
Finished restore at 20-NOV-11

数据文件恢复成功。

6)注册备份集之后产生的归档日志。
由于控制文件时从备份集中恢复过来的,因此控制文件中记录的归档日志是不完整的:
SQL> select name from v$archived_log;
NAME
------------------------------------------------------------------------------
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1043_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1044_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1045_686537442.ARCH
H:\INTEL_ARCH\O04DMS0\O04DMS0_1_ 1046_686537442.ARCH
从上面输出可以看出控制文件记录的最新的归档日志为1046,而在硬盘上还有一个O04DMS0_1_ 1047_686537442.ARCH,这个归档日志是在备份之后产生的,因此未被记录在控制文件中,下面我们用rman提供的catalog命令注册归档日志到控制文件中:
RMAN> catalog archivelog 'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_ 1047_686537442.ARCH';

cataloged archive log
archive log filename=H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH recid=1006 stamp=767678151

7)执行不完全恢复
当所有的归档日志都已经注册到控制文件中后,就可以开始执行不完全恢复:
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 30650218 generated at 11/20/2011 03:36:51 needed for thread 1
ORA-00289: suggestion : H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH
ORA-00280: change 30650218 for thread 1 is in sequence #1047


Specify log: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 30650338 generated at 11/20/2011 03:39:26 needed for thread 1
ORA-00289: suggestion : H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1048_686537442.ARCH
ORA-00280: change 30650338 for thread 1 is in sequence #1048
ORA-00278: log file 'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1047_686537442.ARCH' no
longer needed for this recovery


ORA-00308: cannot open archived log
'H:\INTEL_ARCH\O04DMS0\O04DMS0_1_1048_686537442.ARCH'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) The system cannot find the file specified.

选择AUTO之后,Oracle会自动应用所有的归档日志,知道无法找到为止,出现的ORA-错误都是可以忽略的。
最后以resetlogs方式打开数据库:
SQL> alter database open resetlogs;
SQL> select * from test;

        ID
----------
         1
查询测试表,发现只有第一条记录,第二天丢失,这和我们之前预测的一样。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26277071/viewspace-711640/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26277071/viewspace-711640/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值