9i完全备份不包含最新控制文件导致
(1)进行全库的备份
RMAN> run{
2> allocate channel C1 device type disk;
3> backup full database format 'E:%U.dbf' include current controlfile;
4> sql 'alter system archive log current';
5> release channel C1;
6> }
?
正在使用目标数据库控制文件替代恢复目录
分配的通道: C1
通道 C1: sid=16 devtype=DISK
?
启动 backup 于 05-4月 -07
通道 C1: 正在启动 full 数据文件备份集
通道 C1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
备份集中包括当前控制文件
输入数据文件 fno=00001 name=D:ORACLEPRODUCT9.2.0ORADATATEST9ISYSTEM01.DBF
输入数据文件 fno=00002 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IUNDOTBS01.DBF
输入数据文件 fno=00005 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IEXAMPLE01.DBF
输入数据文件 fno=00010 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IXDB01.DBF
输入数据文件 fno=00006 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IINDX01.DBF
输入数据文件 fno=00009 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IUSERS01.DBF
输入数据文件 fno=00003 name=D:ORACLEPRODUCT9.2.0ORADATATEST9ICWMLITE01.DBF
输入数据文件 fno=00004 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IDRSYS01.DBF
输入数据文件 fno=00007 name=D:ORACLEPRODUCT9.2.0ORADATATEST9IODM01.DBF
输入数据文件 fno=00008 name=D:ORACLEPRODUCT9.2.0ORADATATEST9ITOOLS01.DBF
通道 C1: 正在启动段 1 于 05-4月 -07
通道 C1: 已完成段 1 于 05-4月 -07
段 handle=E:1IEDNTH_1_1.DBF comment=NONE
通道 C1: 备份集已完成, 经过时间:00:01:27
完成 backup 于 05-4月 -07
?
sql 语句: alter system archive log current
?
释放的通道: C1
这里我们可以看到9i和10g在include current controlfile执行方面的不同,10g中控制文件和数据文件放在不同的备份集中,而9i中是放在同一个备份集中的,从而增加了恢复的难度。
(2)模拟删除掉所有的数据文件和控制文件
(3)从控制文件的备份中恢复控制文件
RMAN> restore controlfile from 'E:1IEDNTH_1_1.DBF';
?
启动 restore 于 05-4月 -07
?
正在使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在恢复控制文件
通道 ORA_DISK_1: 恢复完成
正在复制控制文件
输出文件名=D:ORACLEPRODUCT9.2.0ORADATATEST9ICONTROL01.CTL
输出文件名=D:ORACLEPRODUCT9.2.0ORADATATEST9ICONTROL02.CTL
输出文件名=D:ORACLEPRODUCT9.2.0ORADATATEST9ICONTROL03.CTL
完成 restore 于 05-4月 -07
(4)mount,restore,recover以及resetlogs
RMAN> alter database mount;
?
数据库已加载
RMAN> restore database;
?
启动 restore 于 05-4月 -07
?
使用通道 ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 04/05/2007 15:26:21
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 10 found to restore
RMAN-06023: no backup or copy of datafile 9 found to restore
RMAN-06023: no backup or copy of datafile 8 found to restore
RMAN-06023: no backup or copy of datafile 7 found to restore
RMAN-06023: no backup or copy of datafile 6 found to restore
RMAN-06023: no backup or copy of datafile 5 found to restore
RMAN-06023: no backup or copy of datafile 4 found to restore
RMAN-06023: no backup or copy of datafile 3 found to restore
RMAN-06023: no backup or copy of datafile 2 found to restore
RMAN-06023: no backup or copy of datafile 1 found to restore
现在我们看到9i和10g在这一点上的最大的不同,在9i中备份的控制文件是不包含本次备份的信息的。而10g是包含的因此可以轻松恢复。9i中需要用到dbms_backup_restore包。
sys@TEST9I> column name format a55
sys@TEST9I> select file#,name from v$datafile;
?
???? FILE# NAME
---------- -------------------------------------------------------
???????? 1 D:ORACLEPRODUCT9.2.0ORADATATEST9ISYSTEM01.DBF
???????? 2 D:ORACLEPRODUCT9.2.0ORADATATEST9IUNDOTBS01.DBF
???????? 3 D:ORACLEPRODUCT9.2.0ORADATATEST9ICWMLITE01.DBF
???????? 4 D:ORACLEPRODUCT9.2.0ORADATATEST9IDRSYS01.DBF
???????? 5 D:ORACLEPRODUCT9.2.0ORADATATEST9IEXAMPLE01.DBF
???????? 6 D:ORACLEPRODUCT9.2.0ORADATATEST9IINDX01.DBF
???????? 7 D:ORACLEPRODUCT9.2.0ORADATATEST9IODM01.DBF
???????? 8 D:ORACLEPRODUCT9.2.0ORADATATEST9ITOOLS01.DBF
???????? 9 D:ORACLEPRODUCT9.2.0ORADATATEST9IUSERS01.DBF
??????? 10 D:ORACLEPRODUCT9.2.0ORADATATEST9IXDB01.DBF
?
sys@TEST9I> DECLARE
? 2? devtype varchar2(256);
? 3? done boolean;
4? BEGIN
--分配channel
5? devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'C1');
--开始恢复datafile
6? sys.dbms_backup_restore.restoreSetDatafile;
--指明datafile的file#和name(在v$datafile中可以查到)
? 7? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9ISYSTEM01.DBF');
? 8 ?sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IUNDOTBS01.DBF');
? 9 ?sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9ICWMLITE01.DBF');
?10? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IDRSYS01.DBF');
?11? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>05,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IEXAMPLE01.DBF');
?12? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>06,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IINDX01.DBF');
?13? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>07,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IODM01.DBF');
?14? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>08,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9ITOOLS01.DBF');
?15? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>09,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IUSERS01.DBF');
?16? sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>10,toname=>'D:ORACLEPRODUCT9.2.0ORADATA
TEST9IXDB01.DBF');
--指明从那个备份集恢复
?17 ?sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'E:1IEDNTH_1_1.DBF', params=>nu
ll);
--释放channel
?18? sys.dbms_backup_restore.deviceDeallocate;
?19? END;
?20? /
?
PL/SQL 过程已成功完成。
?
--手动指明需要的归档
--红色的是输入的部分
sys@TEST9I> Recover database using backup controlfile until cancel;
ORA-00279: 更改 194912 (在 04/05/2007 15:05:21 生成) 对于线程 1 是必需的
?
指定日志: {=suggested | filename | AUTO | CANCEL}
D:oracleproduct9.2.0oradatatest9iarchive1_1.DBF
ORA-00279: 更改 195153 (在 04/05/2007 15:06:48 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEPRODUCT9.2.0ORADATATEST9IARCHIVE1_2.DBF
ORA-00280: 更改 195153 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'D:oracleproduct9.2.0oradatatest9iarchive1_1.DBF'
?
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
?
sys@TEST9I> alter database open resetlogs;
?
数据库已更改。