oracle未归档current redo损坏的恢复
如下例子:
----Session 1
SQL> conn zw/zw
Connected.
SQL> select count(1) from t;
COUNT(1)
----------
14041
SQL> delete from t where rownum < 1001;
1000 rows deleted.
SQL> commit;
Commit complete.
---Session 2
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- --------
1 1 13 52428800 512 1 NO INACTIVE 1692121 29-DEC-15 1692124 29-DEC-15
2 1 14 20971520 512 1 NO INACTIVE 1692124 29-DEC-15 1692127 29-DEC-15
3 1 15 52428800 512 1 NO CURRENT 1692127 29-DEC-15 2.8147E+14
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------
1 ONLINE /u01/app/oracle/oradata/orcl/redo01.log NO
2 ONLINE /u01/app/oracle/oradata/orcl/redo02.log NO
3 ONLINE /u01/app/oracle/oradata/orcl/redo03.log NO
---Session 3
[root@zw_test_26_75 ~]# dd if=/dev/null of=/u01/app/oracle/oradata/orcl/redo03.log bs=512 count=10
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000112526 s, 0.0 kB/s
SQL> shutdown immediate
ORA-03113: end-of-file on communication channel
Process ID: 20455
Session ID: 145 Serial number: 3
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcl/redo03.log'
ORA-27048: skgfifi: file header information is invalid
Additional information: 12
SQL> recover database until cancel;
ORA-00279: change 1692127 generated at 12/29/2015 16:56:53 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/11.2.0.4/db_1/dbs/arch1_15_899742732.dbf
ORA-00280: change 1692127 for thread 1 is in sequence #15
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log
'/u01/app/oracle/product/11.2.0.4/db_1/dbs/arch1_15_899742732.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-00308: cannot open archived log
'/u01/app/oracle/product/11.2.0.4/db_1/dbs/arch1_15_899742732.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
添加隐含参数
[oracle@zw_test_26_75 tmp]$ vi pfile.ora
*._allow_resetlogs_corruption=true
*._allow_error_simulation=true
~
SQL> startup mount pfile='/tmp/pfile.ora';
ORACLE instance started.
Total System Global Area 952020992 bytes
Fixed Size 2258960 bytes
Variable Size 314574832 bytes
Database Buffers 629145600 bytes
Redo Buffers 6041600 bytes
Database mounted.
SQL>
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [2662], [0], [1692134], [0],
[1692312], [4194432], [], [], [], [], [], []
Process ID: 20866
Session ID: 145 Serial number: 3
SQL> recover database until cancel;
ORA-00283: recovery session canceled due to errors
ORA-16433: The database must be opened in read/write mode.
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
打开失败
++++ 使用10015 event手工推进scn
SQL> startup mount pfile='/tmp/pfile.ora';
ORACLE instance started.
Total System Global Area 952020992 bytes
Fixed Size 2258960 bytes
Variable Size 314574832 bytes
Database Buffers 629145600 bytes
Redo Buffers 6041600 bytes
Database mounted.
SQL>
SQL> alter session set events '10015 trace name adjust_scn level 1';
Session altered.
SQL> alter database open;
Database altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- --------------
1 1 1 52428800 512 1 NO INACTIVE 1692128 29-DEC-15 1712135 29-DEC-15
2 1 2 20971520 512 1 NO CURRENT 1712135 29-DEC-15 2.8147E+14
3 1 0 52428800 512 1 YES UNUSED 0 0
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
System altered.
SQL>
System altered.
SQL>
----Session 1
SQL> conn zw/zw
Connected.
SQL> select count(1) from t;
COUNT(1)
----------
14041
SQL> delete from t where rownum < 1001;
1000 rows deleted.
SQL> commit;
Commit complete.
SQL> select count(1) from t;
COUNT(1)
----------
13041
恢复后的
-----session 2
SQL> select count(1) from t;
COUNT(1)
----------
13041