ORA-600(2662)错误的重现和解决(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。

前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。

由于是在别人的机器上操作,而且很多操作都是摸索进行,因此没有将操作记录下来。现在打算重现一下问题并简单记录解决过程。

上篇已经描述了问题的产生步骤,下面描述解决这个问题的方法。

ORA-600(2662)错误的重现和解决(一):http://yangtingkun.itpub.net/post/468/464682

 

 

产生问题的根源在于启动STANDBY数据库的时候,覆盖了PRIMARY数据库的在线LOGFILE

尝试恢复数据库:

SQL> CONN /@YTK AS SYSDBA
已连接到空闲例程。
SQL> STARTUP MOUNT
ORACLE
例程已经启动。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             167772388 bytes
Database Buffers           75497472 bytes
Redo Buffers                7098368 bytes
数据库装载完毕。
SQL> RECOVER DATABASE UNTIL CANCEL;
ORA-00279:
更改 5706539056 ( 12/11/2007 15:49:26 生成) 对于线程 1 是必需的
ORA-00289:
建议: E:\ORACLE\ORADATA\YTK\ARCHIVELOG\ARC01333_0577472831.001
ORA-00280:
更改 5706539056 (用于线程 1) 在序列 #1333


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547:
警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194:
文件 1 需要更多的恢复来保持一致性
ORA-01110:
数据文件 1:
'E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF'


ORA-01112:
未启动介质恢复

看来数据库已经无法通过正常方式启动了。这时候最好的办法是通过数据库的备份来进行恢复,通过不完全恢复来恢复数据库。

但是同事当时没有数据库的备份,那么就只能通过非常规的方式打开了。

由于丢失在线日志,所以只能通过添加隐含参数的方式:

SQL> ALTER SYSTEM SET "_allow_resetlogs_corruption" = TRUE SCOPE = SPFILE;

系统已更改。

SQL> SHUTDOWN IMMEDIATE
ORA-01109:
数据库未打开


已经卸载数据库。
ORACLE
例程已经关闭。
SQL> STARTUP MOUNT
ORACLE
例程已经启动。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             171966692 bytes
Database Buffers           71303168 bytes
Redo Buffers                7098368 bytes
数据库装载完毕。
SQL> RECOVER DATABASE UNTIL CANCEL
ORA-00279:
更改 5706539056 ( 12/11/2007 15:49:26 生成) 对于线程 1 是必需的
ORA-00289:
建议: E:\ORACLE\ORADATA\YTK\ARCHIVELOG\ARC01333_0577472831.001
ORA-00280:
更改 5706539056 (用于线程 1) 在序列 #1333


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547:
警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194:
文件 1 需要更多的恢复来保持一致性
ORA-01110:
数据文件 1:
'E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF'


ORA-01112:
未启动介质恢复


SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
1 行出现错误:
ORA-01092: ORACLE
实例终止。强制断开连接

检查alert文件:

ALTER DATABASE   MOUNT
Tue Dec 11 17:16:19 2007
Setting recovery target incarnation to 1
Tue Dec 11 17:16:19 2007
Successful mount of redo thread 1, with mount id 160883103
Tue Dec 11 17:16:19 2007
Database mounted in Exclusive Mode
Completed: ALTER DATABASE   MOUNT
Tue Dec 11 17:16:46 2007
ALTER DATABASE RECOVER  DATABASE UNTIL CANCEL 
Tue Dec 11 17:16:46 2007
Media Recovery Start
 parallel recovery started with 2 processes
ORA-279 signalled during: ALTER DATABASE RECOVER  DATABASE UNTIL CANCEL  ...
Tue Dec 11 17:16:49 2007
ALTER DATABASE RECOVER    CANCEL 
ORA-1547 signalled during: ALTER DATABASE RECOVER    CANCEL  ...
Tue Dec 11 17:16:51 2007
ALTER DATABASE RECOVER CANCEL
ORA-1112 signalled during: ALTER DATABASE RECOVER CANCEL ...
Tue Dec 11 17:17:00 2007
ALTER DATABASE OPEN RESETLOGS
Tue Dec 11 17:17:01 2007
RESETLOGS is being done without consistancy checks. This may result
in a corrupted database. The database should be recreated.
Tue Dec 11 17:17:01 2007
Errors in file e:\oracle\admin\ytk\udump\ytk_ora_2412.trc:
ORA-00265:
要求实例恢复, 无法设置 ARCHIVELOG 模式

Archive all online redo logfiles failed:265
RESETLOGS after incomplete recovery UNTIL CHANGE 5706539056
Resetting resetlogs activation ID 97264511 (0x5cc237f)
Online log E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO01.LOG: Thread 1 Group 1 was previously cleared
Online log E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG: Thread 1 Group 2 was previously cleared
Online log E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO03.LOG: Thread 1 Group 3 was previously cleared
Tue Dec 11 17:17:01 2007
Setting recovery target incarnation to 2
Tue Dec 11 17:17:02 2007
Assigning activation ID 160883103 (0x996e19f)
LGWR: STARTING ARCH PROCESSES
ARC0 started with pid=18, OS id=2904
Tue Dec 11 17:17:02 2007
ARC0: Archival started
ARC1: Archival started
ARC1 started with pid=19, OS id=2584
Tue Dec 11 17:17:03 2007
LGWR: STARTING ARCH PROCESSES COMPLETE
LNS1 started with pid=20, OS id=3328
Tue Dec 11 17:17:06 2007
Thread 1 advanced to log sequence 2
Thread 1 opened at log sequence 2
  Current log# 2 seq# 2 mem# 0: E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG
Successful open of redo thread 1
Tue Dec 11 17:17:06 2007
ARC1: Becoming the 'no FAL' ARCH
ARC1: Becoming the 'no SRL' ARCH
Tue Dec 11 17:17:06 2007
ARC0: Becoming the heartbeat ARCH
Tue Dec 11 17:17:06 2007
ARC1: LGWR is scheduled to archive destination LOG_ARCHIVE_DEST_2 after log switch
ARC1: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (270)
ARC1: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Tue Dec 11 17:17:07 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_2584.trc:
ORA-00270:
创建归档日志  时出错

ARC1: Error 270 Closing archive log file 'ytks'
Tue Dec 11 17:17:07 2007
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
Tue Dec 11 17:17:07 2007
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Tue Dec 11 17:17:07 2007
SMON: enabling cache recovery
Tue Dec 11 17:17:08 2007
Errors in file e:\oracle\admin\ytk\udump\ytk_ora_2412.trc:
ORA-00600:
内部错误代码, 参数: [2662], [1], [1411571767], [1], [1411576360], [4194309], [], []

Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\udump\ytk_ora_2412.trc:
ORA-00600:
内部错误代码, 参数: [2662], [1], [1411571767], [1], [1411576360], [4194309], [], []

Tue Dec 11 17:17:11 2007
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lns1_3328.trc:
ORA-00600:
内部错误代码, 参数: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_p001_1936.trc:
ORA-00600:
内部错误代码, 参数: [15784], [600], [], [], [], [], [], []
ORA-00600:
内部错误代码, 参数: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_p000_576.trc:
ORA-00600:
内部错误代码, 参数: [15784], [600], [], [], [], [], [], []
ORA-00600:
内部错误代码, 参数: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:11 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_pmon_3424.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_psp0_1720.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_mman_3256.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3528.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_ckpt_2696.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:12 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_dbw0_2148.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:14 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_reco_1928.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Tue Dec 11 17:17:14 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_smon_1940.trc:
ORA-00600: ??????, ??: [], [], [], [], [], [], [], []

Instance terminated by USER, pid = 2412
ORA-1092 signalled during: ALTER DATABASE OPEN RESETLOGS...

现在出现了前文提到的ORA-600[2662]错误。

查询metalinkOracle给出了两种解决方法,如果6002662错误中第三个参数和第五个参数差别很小,那么就可以通过多次打开关闭数据库实例的方式来增加SCN的值。

不过这种方式每次启动只SCN只增加1,重启三次系统:

ORA-00600: 内部错误代码, 参数: [2662], [1], [1411571770], [1], [1411576360], [4194309], [], []

而目前的SCN和期望的SCN还相差4000多,显然通过重启的方法不现实。

Oracle给出的第二种方式是通过设置EVENTS来提高OracleCURRENT SCN,这个方法的前提就是设置_allow_resetlogs_corruption隐含参数为true

SQL> CONN /@YTK AS SYSDBA
已连接到空闲例程。
SQL> STARTUP MOUNT
ORACLE
例程已经启动。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             209715428 bytes
Database Buffers           33554432 bytes
Redo Buffers                7098368 bytes
数据库装载完毕。
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';

会话已更改。

SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
1 行出现错误:
ORA-00314:
日志 2 (用于线程 1) 要求的序号 2 0 不匹配
ORA-00312:
联机日志 2 线程 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'

数据库并没有打开,而是报错ORA-314。这个错误倒是很容易理解,由于目前的日志被STANDBY数据库的重置归档所覆盖,造成了这个期望的日志和当前的不满足。

下面将三个连接日志改名,使PRIMARY数据库找不到联机日志:

E:\>CD E:\ORACLE\ORADATA\YTK\ONLINELOG

E:\oracle\oradata\YTK\ONLINELOG>MOVE REDO01.LOG REDO01.LOG.BAK

E:\oracle\oradata\YTK\ONLINELOG>MOVE REDO02.LOG REDO02.LOG.BAK

E:\oracle\oradata\YTK\ONLINELOG>MOVE REDO03.LOG REDO03.LOG.BAK

再次尝试打开:

SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
1 行出现错误:
ORA-00313:
无法打开日志组 2 (用于线程 1) 的成员
ORA-00312:
联机日志 2 线程 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'
ORA-27041:
无法打开文件
OSD-04002:
无法打开文件
O/S-Error: (OS 2)
系统找不到指定的文件。

报错找不到文件,通过RESETLOGS方式创建新的日志:

SQL> RECOVER DATABASE UNTIL CANCEL
ORA-00279:
更改 5706539077 ( 12/12/2007 14:17:14 生成) 对于线程 1 是必需的
ORA-00289:
建议: E:\ORACLE\ORADATA\YTK\ARCHIVELOG\ARC00002_0641139429.001
ORA-00280:
更改 5706539077 (用于线程 1) 在序列 #2


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547:
警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194:
文件 1 需要更多的恢复来保持一致性
ORA-01110:
数据文件 1:
'E:\ORACLE\ORADATA\YTK\DATAFILE\O1_MF_SYSTEM_1TDY2CXS_.DBF'


ORA-01112:
未启动介质恢复


SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
1 行出现错误:
ORA-01092: ORACLE
实例终止。强制断开连接

再次尝试设置EVENTS

SQL> CONN /@YTK AS SYSDBA
已连接到空闲例程。
SQL> STARTUP MOUNT
ORACLE
例程已经启动。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             218104036 bytes
Database Buffers           25165824 bytes
Redo Buffers                7098368 bytes
数据库装载完毕。
SQL> ALTER SESSION SET EVENTS '10015 TRACE NAME ADJUST_SCN LEVEL 1';

会话已更改。

SQL> ALTER DATABASE OPEN;
ERROR:
ORA-03113:
通信通道的文件结束

错误和刚才已经有区别了,看来有打开的希望,检查alert文件发现:

ORA-00316: ?? 2 (???? 1) ?????? 0 ??????
ORA-00312: ???? 2 ?? 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'

Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lgwr_3712.trc:
ORA-00316: ?? 2 (???? 1) ?????? 0 ??????
ORA-00312: ???? 2 ?? 1: 'E:\ORACLE\ORADATA\YTK\ONLINELOG\REDO02.LOG'

Wed Dec 12 14:45:55 2007
LGWR: terminating instance due to error 316
Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_lns1_3508.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_536.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_536.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:55 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc1_536.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:55 2007
Master background archival failure: 316
Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc0_3656.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc0_3656.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_arc0_3656.trc:
ORA-00316:
日志  (用于线程 ) 头部中的类型  不是日志文件

Wed Dec 12 14:45:56 2007
Master background archival failure: 316
Wed Dec 12 14:45:56 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_dbw0_3716.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_pmon_3608.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_psp0_1816.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_mman_2304.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_reco_3408.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_ckpt_2296.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:58 2007
Errors in file e:\oracle\admin\ytk\bdump\ytk_smon_3416.trc:
ORA-00316: ??  (???? ) ??????  ??????

Wed Dec 12 14:45:59 2007
Instance terminated by LGWR, pid = 3712

报了一堆的ORA-316ORA-312错误。为了避免现在仍然启动的STANDBY数据库干扰,关闭STANDBY数据库,再次尝试以RESETLOGS方式打开数据库:

SQL> CONN /@YTKS AS SYSDBA
已连接。
SQL> SHUTDOWN IMMEDIATE
ORA-01109:
数据库未打开


已经卸载数据库。
ORACLE
例程已经关闭。
SQL> CONN /@YTK AS SYSDBA
已连接到空闲例程。
SQL> STARTUP MOUNT
ORACLE
例程已经启动。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             222298340 bytes
Database Buffers           20971520 bytes
Redo Buffers                7098368 bytes
数据库装载完毕。
SQL> RECOVER DATABASE UNTIL CANCEL
完成介质恢复。
SQL> ALTER DATABASE OPEN RESETLOGS;

数据库已更改。

数据库终于打开。下面要做的就是去掉隐含参数,再次重启,验证是否可以启动。

SQL> ALTER SYSTEM RESET "_allow_resetlogs_corruption" SCOPE = SPFILE SID = '*';

系统已更改。

SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL> STARTUP
ORACLE
例程已经启动。

Total System Global Area  251658240 bytes
Fixed Size                  1290012 bytes
Variable Size             218104036 bytes
Database Buffers           25165824 bytes
Redo Buffers                7098368 bytes
数据库装载完毕。
数据库已经打开。

数据库已经正常打开,但是由于使用_allow_resetlogs_corruption方式打开,会造成数据的丢失,且数据库的状态不一致。因此,这种情况下Oracle建议通过EXP方式导出数据库。重建新数据库后,再导入。

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
缓存 Oracle 关系型数据库
重现ORA-01555错误
非常经典的一个一致性快照过旧的错误,Oracle面试必读。
|
Oracle 关系型数据库 数据库
|
SQL 监控 Oracle
ORA-600(2662)错误的重现和解决(一)
前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。
1301 0
|
关系型数据库 数据库
一个低级的ORA-01017错误
事件缘由: 使用sys账户创建了一个数据清理的存储过程,再创建一个Oracle job定时运行这个存储过程,用于做表数据的清理。
1155 0