昨天遇到一个问题一个OGG的复制进程在复制序列(Sequence)时Hang住不动,进程状态一直是Running状态但是不往前进行复制,导致进程延迟6个多小时
<code>GGSCI (ctm-3) 2> info all</code>
<code>Program Status Group Lag at Chkpt Time Since Chkpt</code>
<code>MANAGER RUNNING </code>
<code>REPLICAT RUNNING USIM 00:13:39 06:50:22</code>
操作复制进程时,stats和stop显示操作超时,只能kill进程,重启复制进程问题依就。问题从下午一直持续到晚上7点多,实在没有办法把所有数据都全部初始化了,还是不行,好在数据量不大。最后把goldengate用户赋予dba权限问题就解决了,但是GOLDENGATE用户的权限分配问题依然还是一个问题。下面记录了问题的处理过程,有兴趣的朋友可以看看。
使用view report usim查看日志,日志停在一个复制Sequence的语句上
<code>Wildcard MAP resolved (entry USIM.*):</code>
<code> </code><code>map </code><code>"USIM"</code><code>.</code><code>"SEQ_PROCESSSTEP"</code><code>, target USIM.</code><code>"SEQ_PROCESSSTEP"</code><code>;</code>
<code>Resolving target sequence USIM.SEQ_PROCESSSTEP.</code>
查看ggserr.log也没有报错信息。
于是查看数据库里的会话
<code>SYS@ctm> </code><code>select</code> <code>sid,serial#,LOGON_TIME,MODULE,sql_id,prev_sql_id,event,blocking_session </code><code>from</code> <code>v$session </code><code>where</code> <code>MODULE </code><code>like</code> <code>'%USIM%'</code><code>;</code>
<code> </code><code>SID SERIAL# LOGON_TIME MODULE SQL_ID PREV_SQL_ID EVENT BLOCKING_SESSION</code>
<code>---------- ---------- ------------ ------------------------------ ------------- ------------- ------------------------------ ----------------</code>
<code> </code><code>764 8229 20-JAN-17 OGG-USIM-OPEN_DATA_SOURCE awjuqsu6bk5d4 b6zg67dtg1q14 row cache lock</code>
<code> </code>
<code>SYS@ctm> </code><code>select</code> <code>sql_text </code><code>from</code> <code>v$sql </code><code>where</code> <code>sql_id=</code><code>'awjuqsu6bk5d4'</code><code>;</code>
<code>SQL_TEXT</code>
<code>--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</code>
<code>SELECT</code> <code>"SEQ_PROCESSSTEP"</code><code>.NEXTVAL </code><code>FROM</code> <code>DUAL</code>
<code>SYS@ctm> </code><code>select</code> <code>sql_text </code><code>from</code> <code>v$sql </code><code>where</code> <code>sql_id=</code><code>'b6zg67dtg1q14'</code><code>;</code>
<code>SELECT</code> <code>HIGHWATER </code><code>FROM</code> <code>SYS.SEQ$ </code><code>WHERE</code> <code>OBJ#=:B1</code>
看到当前ogg的复制进程在执行SELECT "SEQ_PROCESSSTEP".NEXTVAL FROM DUAL的语句,进程是在等待row cache lock。上面贴出来的是晚上查询时的情况,其实下午在查这条sql时是不同的一个序列名字,但是动作一样都是select nextval from dual,但是等待事件有library cache: mutex X、cursor: pin S wait on X、latch free、latch: shared pool。
于是又无奈的去查官方文档,在Oracle GoldenGate Oracle Installation and Setup Guide中查到下面的几句话:
<a href="http://s1.51cto.com/wyfs02/M02/8D/04/wKioL1iCt47ypi0uAAIPJkaGxEs888.png-wh_500x0-wm_3-wmp_4-s_199155290.png" target="_blank"></a>
看到红框中的那句后恍然想到,由于系统交维,要求不允许用户有DBA角色,GOLDENGATE也不可以,于是查看GOLDENGATE用户的角色
<code>SYS@ctm> </code><code>select</code> <code>granted_role </code><code>from</code> <code>dba_role_privs </code><code>where</code> <code>grantee=</code><code>'GOLDENGATE'</code><code>;</code>
<code>GRANTED_ROLE</code>
<code>------------------------------</code>
<code>RESOURCE</code>
<code>CONNECT</code>
<code>SELECT_CATALOG_ROLE</code>
果然没有DBA角色,那问题是不是出在这里呢,于是尝试给GOLDENGATE用户DBA角色
grant dba to goldengate;
kill掉hang住的会话,重启复制进程usim,终于问题解决了。复制进程开始往下复制了,而且序列复制的很快
<code>GGSCI (ctrm-r3) 20> stats usim hourly</code>
<code>Sending STATS request </code><code>to</code> <code>REPLICAT USIM ...</code>
<code>Start </code><code>of</code> <code>Statistics</code> <code>at</code> <code>2017-01-20 21:47:22.</code>
<code>DDL replication </code><code>statistics</code><code>:</code>
<code>*** Total </code><code>statistics</code> <code>since replicat started ***</code>
<code> </code><code>Operations 0.00</code>
<code> </code><code>Mapped operations 0.00</code>
<code> </code><code>Unmapped operations 0.00</code>
<code> </code><code>Other operations 0.00</code>
<code> </code><code>Excluded operations 0.00</code>
<code> </code><code>Errors 0.00</code>
<code> </code><code>Retried errors 0.00</code>
<code> </code><code>Discarded errors 0.00</code>
<code> </code><code>Ignored errors 0.00</code>
<code>Replicating </code><code>from</code> <code>USIM.SEQ_PROCESSSTEP </code><code>to</code> <code>USIM.SEQ_PROCESSSTEP:</code>
<code>*** Hourly </code><code>statistics</code> <code>since 2017-01-20 21:46:06 ***</code>
<code> </code><code>Total updates 16.00</code>
<code> </code><code>Total discards 0.00</code>
<code> </code><code>Total operations 16.00</code>
<code>End</code> <code>of</code> <code>Statistics</code><code>.</code>
最后再回想,难道就真的是因为DBA角色的关系么?于是把GOLDENGATE用户的DBA角色收回:revoke dba from goldengate;
再次观察复制进程情况,竟然正常在复制,没有受到影响。而且从昨晚10点多回收dba角色,到今天发博客,复制进程也没有hang住,还在正常复制。这就回到了上面疑问,真的是因为DBA角色导致的么?现在还不清楚。如果哪位大神知道问题的原因可以在博客中回复,感激不尽。
本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1893514,如需转载请自行联系原作者