有这样的一种需要恢复数据库场景:
当前数据库有一份全备,归档,联机重做日志都没有损坏或丢失,但是控制文件意外的损坏了,而且更糟糕的是,居然没有备份的控制文件(当然, 这种情形很少见),这种情形下,只有重建控制文件,但是重建控制文件也是一件很棘手的事情,如果数据库有上百个数据文件,要写在控制文件里,不是件容易的是,这就要求数据库管理员对数据库结构相当熟悉。这也是说明了控制文件的重要性了。我这里的场景是使用alter database backup controlfile to trace得到重建控制文件的脚本,纯粹是为了今天要说的主题来的。在生产环境,可能比这个要复杂的多。好了,控制文件重建成功,数据库也打开了。但不幸的是,数据库管理员并没有及时进行一次全备份,这个时候,一个数据文件损坏或丢失了。使用原来的备份集无法restore数据文件,因为重建的控制文件并没有记录原来备份集的备份元数据。我们怎么办?[@more@]
好,下面进入今天的主题:
使用catalog注册备份集的备份信息到控制文件中,之后,就可以restore数据库了。
1.生产库上原有的备份集存在,而且是可用的。
total 793052
-rw-r----- 1 oracle oinstall 802693120 Dec 5 22:11 01ns4nbj_1_1.bak
2.重建控制文件
[oracle@primary dbwdn]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.5.0 - Production on Sat Dec 8 11:17:02 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DBWDN" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 1168
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/dbwdn/redo01.log' SIZE 50M,
GROUP 2 '/u01/app/oracle/oradata/dbwdn/redo02.log' SIZE 50M,
GROUP 3 '/u01/app/oracle/oradata/dbwdn/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/dbwdn/system01.dbf',
'/u01/app/oracle/oradata/dbwdn/undotbs01.dbf',
'/u01/app/oracle/oradata/dbwdn/sysaux01.dbf',
'/u01/app/oracle/oradata/dbwdn/users01.dbf',
'/u01/app/oracle/oradata/dbwdn/test01.dbf',
'/u01/app/oracle/oradata/dbwdn/ggs01.dbf',
'/u01/app/oracle/oradata/dbwdn/perfstat.dbf',
'/u01/app/oracle/oradata/dbwdn/shkz_data_01.dbf'
CHARACTER SET WE8ISO8859P1
;ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1273276 bytes
Variable Size 130024004 bytes
Database Buffers 150994944 bytes
Redo Buffers 2920448 bytes
SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22
Control file created.
SQL>
3.数据库并没有重新进行rman全备份,丢失数据文件
rm test01.dbf
4.使用原来的备份集无法restore数据文件
RMAN> restore datafile 5;
Starting restore at 08-DEC-2012 11:20:15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=155 devtype=DISK
RMAN-00571: ================