恢复之利用RESETLOGS之前的备份进行恢复(二)
上一篇 / 下一篇 2006-03-10 00:00:00 / 个人分类:ORACLE
一般情况下,是无法利用RESETLOGS操作之前的备份进行数据库的恢复的。但是在特定条件下利用RESETLOGS之前的备份进行恢复是可行的。
本文讨论如何利用RESETLOGS操作前的数据库备份进行数据库的恢复。
ns[y)ntM}0
利用RESETLOGS操作之前的数据库备份的前提是:数据库的备份处于一致性状态,且在以RESETLOGS方式打开数据库之前没有进一步的恢复操作或数据文件的修改。而且,恢复时必须存在RESETLOGS操作之后的控制文件。
先看下面这个简单的例子:假设服务器调整硬件,在调整之前,对数据库的数据文件进行冷备份。
SQL> CONN /@TEST AS SYSDBAITPUB个人空间$XHH*E1q TO|p
已连接。
#zl
Ys6h@:cc'X0SQL> SHUTDOWN IMMEDIATEITPUB个人空间'zH{B-?%B"c
数据库已经关闭。ITPUB个人空间#W4Y;C6x1T e^!Fh
已经卸载数据库。ITPUB个人空间5}L)_P p@0j5DR'M
ORACLE 例程已经关闭。ITPUB个人空间bq W-f G6B
SQL> HOST COPY F:ORACLEORADATATEST*.DBF F:ORACLEBACKUPTEST20060310
SQL> HOST COPY F:ORACLEORADATATEST*.CTL F:ORACLEBACKUPTEST20060310
由于硬件故障导致数据库的所有联机日志丢失,数据库需要使用RESETLOGS方式打开。下面模仿丢失所有文件,利用刚才备份的数据以RESETLOGS方式打开数据库。
SQL> HOST DEL F:ORACLEORADATATEST*
SQL> HOST COPY F:ORACLEBACKUPTEST20060310* F:ORACLEORADATATEST
SQL> STARTUP MOUNTITPUB个人空间-B? h9Otp}4d|M
ORACLE 例程已经启动。
Total System Global Area 76619308 bytesITPUB个人空间VN+~Z7rn0fT
Fixed Size 454188 bytes
o+T/U8M\&ele0Variable Size 50331648 bytes
Q4xGD S*`)Ra0Database Buffers 25165824 bytes
\$pn:S!x"}3I0Redo Buffers 667648 bytes
tYq:u W}n;u"d0数据库装载完毕。
Z\DJW0U0SQL> RECOVER DATABASE UNTIL CANCEL
(kYBl_.F)K0完成介质恢复。ITPUB个人空间 ko$U
@%gC
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。
由于数据库是正常关闭,因此RECOVER DATABASE UNTIL CANCEL不会进行任何实际的恢复操作,因此,这个备份可以在RESETLOGS操作后用来恢复。
SQL> SELECT COUNT(*) FROM YANGTK.TEST_BACKUP;
COUNT(*)ITPUB个人空间aM2_\,j C
----------ITPUB个人空间S]+F,p!vu`)V*G
6290
SQL> DELETE YANGTK.TEST_BACKUP WHERE ROWNUM < 6000;
已删除5999行。
SQL> COMMIT;
提交完成。
SQL> SHUTDOWN IMMEDIATEITPUB个人空间jmW/yC;Y
数据库已经关闭。ITPUB个人空间6w[@"OuA@:iRf
已经卸载数据库。ITPUB个人空间7\K9Zyv/m I*sP%h
ORACLE 例程已经关闭。
{3k(NO(Cu]R?
Y
i0SQL> HOST COPY F:ORACLEBACKUPTEST20060310*.DBF F:ORACLEORADATATEST
SQL> STARTUP MOUNTITPUB个人空间7Ah
h#i!EO
ORACLE 例程已经启动。
Total System Global Area 76619308 bytes
&?!r#H[(ty[0Fixed Size 454188 bytes
7Z%g(RU{o @+f0Variable Size 50331648 bytesITPUB个人空间&v0_is(['Cn
Database Buffers 25165824 bytesITPUB个人空间!IB7o/t(A
uQf6V
Redo Buffers 667648 bytes