问题描述:
ORACLE 逻辑同步卡住了,日志应用的进程还在。
日志应用进程显示“ORA-16121: 正在通过提交 SCN 0x0a7d.6adf4c69 应用事务处理”
处理过程:
(1)查看DG 日志应用进程
select t.sid,t.* from V$LOGSTDBY_PROCESS t ;
ORA-16121: 正在通过提交 SCN 0x0a7d.6adf4c69 应用事务处理
(2)查看DG日志应用进程的SESSION,看看在执行什么语句,在等待什么
select t.SQL_ID,t.PREV_SQL_ID,t.EVENT,t.* from v$session t where t.sid in ( 1144 );
EVENT:row cache lock
(3) 查看执行的SQL
select * from v$sqlarea t where t.sql_id in ('4m7m0t6fjcs5x');
可以查到,当前日志应用进程在执行更新序列SQL:
update seq$ set increment$=:2,minvalue=:3, maxvalue=:4,cycle#=:5,order$=:6,cache=:7,highwater=:8,audit$=:9,flags=:10 where obj#=:1
(4)上一步无法确定是哪个序列,需要进一步查上一步绑定变量(:1)的值
SELECT SQL_ID,NAME, POSITION, value_string, ANYDATA.accesstimestamp(value_anydata),A.*
From gV$sql_Bind_Capture A Where sql_id='4m7m0t6fjcs5x' and name=':1';
(5) 第四步可以得到(:1)的绑定变量的值,即为“value_string”列的值,根据查到的值,查询dba_objects
select * from dba_objects t where t.object_id in ('1890586');
备注:怎么知道(:1)=seq$.obj#= dba_objects .object_id ,可以看看 dba_sequences的定义。;
(6)对比主库、从库的当前序列值,发现 主库的start with 的值是220000329100,而备库是1055697702 。
DG卡住的原因就清晰了。 是因为从库要同步主库的SEQ,要从1055697702 加到220000329100。差了N个数量级,这样同步肯定会卡死了。
处理办法:在从库删除序列,重建成跟主库一样。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10995764/viewspace-2131466/
,如需转载,请注明出处,否则将追究法律责任。