ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [zt]Logical standby同步故障的处理过程

[zt]Logical standby同步故障的处理过程

原创 Linux操作系统 作者:tolywang 时间:2009-07-24 17:07:02 0 删除 编辑

故障描述:
早上到公司,应用人员说逻辑standby库和生产库数据不一致,短信报错从昨天上午10点开始


分析过程:
1。先看两边的alert.log,生产库一切正常,没有发现通信不畅以致不能归档到远程归档路径的问题
standby端的alert.log发现以下信息:

LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: -- Create sequence
create sequence seq_reject_user_list
minvalue 1
maxvalue 99999999999999999999999
start with 1
increment by 1
Tue Mar 29 10:56:07 2005
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: -- Modify the last number
alter sequence SEQ_REJECT_USER_LIST increment by 741 nocache
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: alter sequence SEQ_REJECT_USER_LIST increment by 1 nocache
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: alter sequence SEQ_REJECT_USER_LIST increment by 1 cache 20
Tue Mar 29 10:57:57 2005
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
Tue Mar 29 10:58:02 2005
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
...
...
...
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
Tue Mar 29 10:58:24 2005
Errors in file /u01/app/oracle/admin/sms/bdump/sms_p009_12133.trc:
ORA-07445: exception encountered: core dump [knasnfd()+126] [SIGSEGV] [Address not mapped to object] [0x0] [] []

经过询问,应用人员说昨天确实对该表进行过操作,批量往表里导数据,违反了唯一性约束条件。

2。然后查看生产库和逻辑standby端的sequence,发现没有问题,说明所有的归档日志都已经被逻辑standby端收到。

3。接着在生产端做了一个测试,建了一张表,插入了一行数据,进行一次日志切换,到逻辑standby端查看视图,dba_logstdby_log,发现已经收到最新的归档日志,但是并没有找到我刚才新建的表。

4。初步确定日志传送和接收没有问题,再进一步看看日志apply的状态,查看视图dba_logstdby_progress

SQL> alter session set nls_date_format='DD-MM-YY HH24:MI:SS';

Session altered.

SQL> select * from dba_logstdby_progress;

APPLIED_SCN APPLIED_TIME        READ_SCN READ_TIME         NEWEST_SCN NEWEST_TIME
----------- ----------------- ---------- ----------------- ---------- -----------------
3910598216 29-03-05 10:07:07 3910576561 29-03-05 07:54:19 3911585635 30-03-05 09:58:16

从结果我们可以看出,APPLIED_SCN和NEWEST_SCN不一致!!!,说明从昨天上午10:07:07开始,逻辑standby库就停止了把日志的转化成SQL然后apply。

进一步确认,查询视图v$logstdby_status
SQL> select * from v$logstdby_stats;
no rows selected.

SQL apply操作已经意外停止

问题找到!!!!


查找原因:

1。查了一下Oracle Data Guard Concepts and Administration中的page 412,What to Do IF SQL Apply Operation to a Logical Standby Database Stop,发现如果遇到了逻辑standby不支持的SQL语句和package,那么SQL apply操作将会中止。

查看视图dba_logstdby_events的最后一条记录(一般情况下,最后的一条记录应该能反映出导致SQL apply停止的原因)
SQL> select * from dba_logstdby_events where rownum=1 order by event_time desc;

EVENT_TIME        CURRENT_SCN COMMIT_SCN     XIDUSN     XIDSLT     XIDSQN
----------------- ----------- ---------- ---------- ---------- ----------
EVENT                                                                            STATUS_CODE
-------------------------------------------------------------------------------- -----------
STATUS
------------------------------------------------------------------------------------------------------------------------------------------------------
29-03-05 10:58:23  3910598215 3910598216          4         28     262321
SMS_USER.REJECT_USER_LIST (Oper=INSERT)                                                    1
ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated

和alert.log里的错误吻合,OK,已经找到导致SQL apply操作停止的原因了


处理办法:

1。重启SQL apply进程:
SQL>alter database start logical standby apply;

2。查看视图v$logstdby,看各个进程的工作是否正常

3。又过了一会,执行语句
SQL>select * from dba_logstdby_events where rownum=1 order by event_time desc;
查看apply的情况,发现过了好久SCN都没有增加,难道进程又死掉了?
查看os进程ora_lsp0_sms已经不在了,LSP进程又死掉,是不是由于日志里记录了大量的上述错误操作信息,当LSP执行错误操作到一定数目之后就挂掉?(原因还需要进一步弄清楚)
只好再次手动重启LSP进程
SQL>alter database start logical standby apply;

OK,同步正常,查询视图dba_logstdby_progress,APPLIED_SCN和APPLIED_TIME逐渐增加

3个小时后,同步完毕!!



后记:

看了看Oracle Data Guard Concepts and Administration想查找SQL apply失败的原因,也没有太详细解释,于是到metalink上搜了一把
看到logical standby由于遇到unique constraint的错误导致SQL apply中止,是Oracle 9204版本的一个BUG(bug# 3427176 ),我使用的是9205版本的,这个bug在9205版本中并没有被修正,具体参照这个BULLETIN:
http://metalink.oracle.com/metal ... T&p_id=271511.1

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-610657/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13202643