天天看點

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,如需轉載請自行聯系原作者

繼續閱讀