1.首先要有一个包含spfile备份的rman备份:
run
{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup databaseformat 'f:\backup\%U.dbf';
backup current controlfile format 'f:\backup\%U.ctl' ;
backup archivelog all format 'f:\backup\%U.log'delete input ;
release channel c1;
release channel c2;
}
得到:
RMAN> list backup;
备份集列表
===================
BS关键字类型LV大小设备类型经过时间完成时间
------- ---- -- ---------- ----------- ------------ ----------
48Full1MDISK00:00:0210-2月-09
BP关键字: 55状态: AVAILABLE标记:TAG20090210T113440
段名:F:\BACKUP\2BK70P6G_1_1.CTL
控制文件包括: Ckp SCN: 9008404539762Ckp时间:10-2月-09
BS关键字类型LV大小设备类型经过时间完成时间
------- ---- -- ---------- ----------- ------------ ----------
49Full120MDISK00:01:0010-2月-09
BP关键字: 56状态: AVAILABLE标记:TAG20090210T113544
段名:F:\BACKUP\2DK70P8G_1_1.DBF
备份集49中的数据文件列表
文件LV类型Ckp SCNCkp时间名称
---- -- ---- ---------- ---------- ----
2Full 9008404539854 10-2月-09 D:\ORACLE\ORADATA\WASD\UNDOTBS01.DBF
3Full 9008404539854 10-2月-09 D:\ORACLE\ORADATA\WASD\RMAN01.DBF
4Full 9008404539854 10-2月-09 D:\ORACLE\ORADATA\WASD\STATSPACK_01.DBF
6Full 9008404539854 10-2月-09 D:\ORACLE\ORADATA\WASD\INDX01.DBF
BS关键字类型LV大小设备类型经过时间完成时间
------- ---- -- ---------- ----------- ------------ ----------
50Full352MDISK00:02:0210-2月-09
BP关键字: 57状态: AVAILABLE标记:TAG20090210T113544
段名:F:\BACKUP\2CK70P8G_1_1.DBF
包含的SPFILE:修改时间: 10-2月-09
备份集50中的数据文件列表
文件LV类型Ckp SCNCkp时间名称
---- -- ---- ---------- ---------- ----
1Full 9008404539859 10-2月-09 D:\ORACLE\ORADATA\WASD\SYSTEM01.DBF
5Full 9008404539859 10-2月-09 D:\ORACLE\ORADATA\WASD\STATSPACK_02.DBF
8Full 9008404539859 10-2月-09 D:\ORACLE\ORADATA\WASD\TOOLS01.DBF
9Full 9008404539859 10-2月-09 D:\ORACLE\ORADATA\WASD\USERS01.DBF
BS关键字类型LV大小设备类型经过时间完成时间
------- ---- -- ---------- ----------- ------------ ----------
51Full1MDISK00:00:0210-2月-09
BP关键字: 58状态: AVAILABLE标记:TAG20090210T113751
段名:F:\BACKUP\2EK70PCF_1_1.CTL
控制文件包括: Ckp SCN: 9008404539963Ckp时间:10-2月-09
BS关键字大小设备类型占用时间完成时间
------- ---------- ----------- ------------ ----------
5212MDISK00:00:0410-2月-09
BP关键字: 59状态: AVAILABLE标记:TAG20090210T113756
段名:F:\BACKUP\2FK70PCK_1_1.LOG
备份集52中的已存档日志列表
Thrd Seq低SCN短时间下一个SCN下一次
---- ------- ---------- ---------- ---------- ---------
1769008404445122 08-2月-09 9008404466404 08-2月-09
1779008404466404 08-2月-09 9008404525427 09-2月-09
BS关键字大小设备类型占用时间完成时间
------- ---------- ----------- ------------ ----------
534MDISK00:00:0510-2月-09
BP关键字: 60状态: AVAILABLE标记:TAG20090210T113756
段名:F:\BACKUP\2GK70PCK_1_1.LOG
备份集53中的已存档日志列表
Thrd Seq低SCN短时间下一个SCN下一次
---- ------- ---------- ---------- ---------- ---------
1789008404525427 09-2月-09 9008404538974 10-2月-09
1799008404538974 10-2月-09 9008404539065 10-2月-09
1809008404539065 10-2月-09 9008404539194 10-2月-09
BS关键字大小设备类型占用时间完成时间
------- ---------- ----------- ------------ ----------
54307KDISK00:00:0210-2月-09
BP关键字: 61状态: AVAILABLE标记:TAG20090210T113756
段名:F:\BACKUP\2HK70PCQ_1_1.LOG
备份集54中的已存档日志列表
Thrd Seq低SCN短时间下一个SCN下一次
---- ------- ---------- ---------- ---------- ---------
1819008404539194 10-2月-09 9008404539971 10-2月-09
2.删除spfile文件
WASD (DBID=3036526324)
SQL>shutdown immediate;
SQL> host;
Microsoft Windows XP [版本5.1.2600]
(C)版权所有1985-2001 Microsoft Corp.
C:\Documents and Settings\wasd>
C:\Documents and Settings\wasd>delD:\oracle\ora92\database\SPFILEWASD.ORA;
这个时间已经是rman备份做过半天以后了。
此时的已经打不开了:
SQL> startup;
ORA-01078: failure in processing system parameters
LRM-00109: N^7(4r?*2NJ}ND
SQL>
3. RMAN进行恢复;
C:\Documents and Settings\wasd>rman target/
RMAN> set dbid=3036526324
正在执行命令: SET DBID
RMAN> startup nomount;
启动失败: ORA-01078: failure in processing system parameters
LRM-00109: N^7(4r?*2NJ}ND
正在尝试在没有参数文件的情况下启动例程...
RMAN>RESTORE SPFILE FROM AUTOBACKUP;
发现无法从自动备份里面找到合适的spfile;
此时怎么办呢??可以尝试从以前rman备份中恢复spfile,接着上面继续;
RMAN> restore spfile from 'F:\backup\2CK70P8G_1_1.DBF';
启动restore于10-2月-09
使用通道ORA_DISK_1
通道ORA_DISK_1:已找到的自动备份: F:\backup\2CK70P8G_1_1.DBF
通道ORA_DISK_1:从自动备份复原SPFILE已完成
完成restore于10-2月-09
RMAN> shutdown immediate;
Oracle例程已关闭
RMAN>
RMAN>
RMAN> startup;
已连接到目标数据库(未启动)
Oracle例程已启动
数据库已加载
数据库已打开
总结:
这个是我在做RMAN练习的时候,有个例子说是可以在非catalog模式恢复被误删的spfile,但是没注意其前提:有自动的控制文件备份!
于是发生了上面一幕,在当时的情况下,rman无法连接到目标数据库,目标数据库只能启动到nomount,rman里面连list backup都不能使用,更无法restore database了,呵呵。
做rman一定要有完整的备份,另外呢,dbid也要经常记录。