天天看点

OGG目标端复制Sequence时Hang住的问题

昨天遇到一个问题一个OGG的复制进程在复制序列(Sequence)时Hang住不动,进程状态一直是Running状态但是不往前进行复制,导致进程延迟6个多小时

<code>GGSCI (ctm-3) 2&gt; 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&gt; </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&gt; </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&gt; </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&gt; </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&gt; 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,如需转载请自行联系原作者

继续阅读