方法二:用cancel模式恢复数据库
前面的出错提示,步骤都一样,唯独恢复的方法不一样SQL>; startup
ORACLE instance started.
Total System Global Area 353862792 bytes
Fixed Size 730248 bytes
Variable Size 285212672 bytes
Database Buffers 67108864 bytes
Redo Buffers 811008 bytes Database mounted.
ORA- 00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'看看丢失了哪些redo
SQL> host ls /T3/ORACLE/oradarta/ORA9/redo* /T3/ORACLE/oradarta/ORA9/redo*: No such file or directory看来redo都丢了直接recover
SQL>; recover database until cancel;Media recovery complete.这个时候redo还没有生成
SQL> host ls /T3/ORACLE/oradata/ORA9/redo* /T3/ORACLE/oradata/ORA9/redo*: No such file or directory启动数据库
SQL> alter database open ;alter database open * ERROR at line 1:ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL>; alter database open resetlogs;
Database altered.(注意,这里必须用resetlogs,否则会错误的SQL> alter database open noresetlogs;
alter database open noresetlogs * ERROR at line 1:
ORA- 00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: '/T3/ORACLE/oradata/ORA9/redo01.log'
SQL>Resetlogs其实就是根据控制文件让系统自动重新生成redo,如果noresetlog的话,就不会重新生成redo,缺少了文件,db自然无法启动)
SQL>; host ls /T3/ORACLE/oradata/ORA9/redo* /T3/ORACLE/oradata/ORA9/redo01.log /T3/ORACLE/oradata/ORA9/redo02.log /T3/ORACLE/oradata/ORA9/redo03.log SQL>;检验SQL>; select * from test.test;
TEL
----------
1 2 3 4 SQL>;数据一点儿都没有丢失
结论:如果数据库是正常关闭的,用recover database until cancel可以轻松恢复或者说重新建立所有的redo,不再区分是否是当前日志,而且由于正常关闭,不会丢失任何数据,唯一可能丢失的情况就是如果日志还没有归档这种恢复方法 由于要resetlogs,所以在恢复完成后,日志清零,以前的备份不再起作用,所以建议立即备份SQL>; archive log list;Database log mode Archive Mode Automatic archival Enabled Archive destination /T3/ORACLE/arch Oldest online log sequence 0 Next log sequence to archive 1 Current log sequence 1 SQL>;
[@more@]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18921899/viewspace-1017274/
,如需转载,请注明出处,否则将追究法律责任。