逻辑dg同步异常处理

    早上应用那边反应前几天同步到备库的数据在备库查不到,怀疑dg不同步了。于是查看备库的告警日志,结果没有发现报错信息。

检查逻辑dg事件:

SELECT EVENT_TIME, STATUS, EVENT FROM DBA_LOGSTDBY_EVENTS ORDER BY EVENT_TIMESTAMP, COMMIT_SCN;

    发现备库从24号开始一直出现同一个报错,这个报错涉及到三个索引,如下图。


 


继续查看告警日志,查看24号当天的信息,发现告警日志有以下报错:
        

      于是在备库查看这个表上边的索引:

select * from dba_ind_columns where TABLE_NAME='T_INTERFACE_LOGS'

 

一共找到三个索引,三个索引分别在CONTRACTID,CREATETIME,BATCHID三个字段上边。

联系项目组那边,项目组之前做过一些操作,因为主库的T_INTERFACE_LOGS表太大,对T_INTERFACE_LOGS表rename之后,从新建立了T_INTERFACE_LOGS表,然后在这个表上边添加索引。

 到此,原因已经找到,项目组在主库的表添加了三个索引,而这三个索引备库相同的表的相同字段已经存在,所以同步到这个操作的时候,出现报错。

解决方法是我把备库的那三个索引干掉了,让其自己同步。然后报错没有出现,开始同步之后我就后悔了,因为备库那张表真的很大(项目组提供信息说是有几千万条数据),在服务器性能如此差劲的情况系,这三个索引愣是同步了一天。

然而问题不是这么简单,接下来一天时间,备库不停的注册进归档,但是应用的速度却很慢(7个小时应用了一个归档),而已经应用的归档全部是current状态,大概有一百多个,还有一百多个归档没有应用。

查询备库当前进程信息:

select LOGSTDBY_ID,type,status process_status from v$logstdby_process;

查询结果显示只有一个进程在同步一个表,其他进程全部为等待状态。

 

查询备库会话信息:

select xid,START_TIME from v$transaction order by START_TIME;

会话信息显示这个会话从早上开始一直到下午都没有提交。

 

根据xid查询sid

select sid,status,last_call_et from v$session where taddr in (select addr from v$transaction where xid='00D50012000071B7');

    SID          SQL_ID

            ----------            -------------

1621      

找不到相关的SQL

select prev_sql_id from v$session where sid=1621;

 

PREV_SQL_ID

-------------

7dvhfkrdn8bx6

该SQL目前是在更新一张表(咨询了项目组,也是一个大表)

 

查询死锁情况

select SESSION_ID,ORACLE_USERNAME,OS_USER_NAME from v$locked_object;

死锁确实存在,并且和当前没有提交的两个会话相吻合,由于这个时候不能杀掉死锁(会造成已经注册的归档重新注册),在我等待了一天一夜之后,几张大表同步完成之后,死锁释放,同步速度提高,应用完的归档也正常删除,问题解决。

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

转载于:http://blog.itpub.net/30135314/viewspace-1849540/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值