天天看點

ORA-00600[6711]錯誤一例

一套Linux上的10.2.0.4系統,日志中頻繁出現ORA-00600[6711]内部錯誤:

<a href="http://blog.51cto.com/maclean/1277546#">?</a>

<code>Wed Sep  1 21:24:30 2010</code>

<code>Errors </code><code>in</code> <code>file /s01/10gdb/admin/YOUYUS/bdump/youyus_smon_5622.trc:</code>

<code>ORA-00600: internal error code, arguments: [6711], [4256248], [1], [4256242], [0], [], [], []</code>

<code>Wed Sep  1 21:24:31 2010</code>

<code>Non-fatal internal error happenned while SMON was doing logging scn-&gt;</code><code>time</code> <code>mapping.</code>

MOS上有一個關于6711内部錯誤十分簡單的Note,該文檔聲稱出現6711錯誤極有可能是部分類型為簇(cluster)的資料字典表存在潛在的訛誤,這個Note甚至沒有告訴我們該錯誤argument參數的意義。 不過其實我們可以猜出來,因為是和corruption相關的錯誤,那麼實際上可能關聯的幾個因素無非是obj#,file#,block#;4256248和4256242 兩個數字像極了Data Block Address,把他們當做dba來看待,也就指向了1号資料檔案的61938塊和61944資料塊,我們來看看這些塊屬于哪個對象:

<code>SQL&gt; </code><code>set</code> <code>linesize 200;</code>

<code>SQL&gt; </code><code>select</code> <code>segment_name, segment_type</code>

<code>  </code><code>2    </code><code>from</code> <code>dba_extents</code>

<code>  </code><code>3   </code><code>where</code> <code>relative_fno = 1</code>

<code>  </code><code>4     </code><code>and</code> <code>(61938 </code><code>between</code> <code>block_id </code><code>and</code> <code>block_id + blocks </code><code>or</code>

<code>  </code><code>5         61944 </code><code>between</code> <code>block_id </code><code>and</code> <code>block_id + blocks);</code>

<code>SEGMENT_NAME                                                                      SEGMENT_TYPE</code>

<code>--------------------------------------------------------------------------------- ------------------</code>

<code>SMON_SCN_TO_TIME                                                                  CLUSTER</code>

不出意料是一個cluster,SMON_SCN_TO_TIME是SMON_SCN_TIME表的基簇,SMON_SCN_TIME表用以記錄資料庫中scn對應的時間戳。我們直接檢視用以建立資料字典的sql.bsq檔案,可以進一步了解他們的結構:

<code>cat $ORACLE_HOME/rdbms/admin/sql.bsq|grep -A 24 </code><code>"create cluster smon_scn_to_time"</code>

<code>create</code> <code>cluster smon_scn_to_time (</code>

<code>  </code><code>thread number                         /* thread, compatibility */</code>

<code>)</code>

<code>/</code>

<code>create</code> <code>index</code> <code>smon_scn_to_time_idx </code><code>on</code> <code>cluster smon_scn_to_time</code>

<code>create</code> <code>table</code> <code>smon_scn_time (</code>

<code>  </code><code>thread number,                         /* thread, compatibility */</code>

<code>  </code><code>time_mp number,                        /* </code><code>time</code> <code>this recent scn represents */</code>

<code>  </code><code>time_dp </code><code>date</code><code>,                          /* </code><code>time</code> <code>as</code> <code>date</code><code>, compatibility */</code>

<code>  </code><code>scn_wrp number,                        /* scn.wrp, compatibility */</code>

<code>  </code><code>scn_bas number,                        /* scn.bas, compatibility */</code>

<code>  </code><code>num_mappings number,</code>

<code>  </code><code>tim_scn_map raw(1200),</code>

<code>  </code><code>scn number </code><code>default</code> <code>0,                  /* scn */</code>

<code>  </code><code>orig_thread number </code><code>default</code> <code>0           /* </code><code>for</code> <code>downgrade */</code>

<code>) cluster smon_scn_to_time (thread)</code>

<code>create</code> <code>unique</code> <code>index</code> <code>smon_scn_time_tim_idx </code><code>on</code> <code>smon_scn_time(time_mp)</code>

<code>create</code> <code>unique</code> <code>index</code> <code>smon_scn_time_scn_idx </code><code>on</code> <code>smon_scn_time(scn)</code>

從以上腳本可以看到這個簇上存在多個索引,我們需要進一步validate驗證所有這些對象:

<code>SQL&gt; analyze </code><code>table</code> <code>SMON_SCN_TIME validate structure;</code>

<code>Table</code> <code>analyzed.</code>

<code>SQL&gt;analyze </code><code>table</code> <code>SMON_SCN_TIME validate structure </code><code>cascade</code><code>;</code>

<code>SQL&gt; analyze cluster SMON_SCN_TO_TIME validate structure;</code>

<code>Cluster analyzed.</code>

<code>SQL&gt; analyze cluster SMON_SCN_TO_TIME validate structure </code><code>cascade</code><code>;</code>

<code>analyze cluster SMON_SCN_TO_TIME validate structure </code><code>cascade</code>

<code>*</code>

<code>ERROR </code><code>at</code> <code>line 1:</code>

<code>ORA-01499: </code><code>table</code><code>/</code><code>index</code> <code>cross</code> <code>reference failure - see trace file</code>

到這裡問題已經很清晰了,問題出在SMON_SCN_TO_TIME的索引smon_scn_to_time_idx身上,極有可能是該索引上出現了邏輯訛誤。所幸有問題的僅僅是索引,找出問題所在後要解決就顯得容易得多了:

<code>SQL&gt; </code><code>alter</code> <code>index</code> <code>smon_scn_to_time_idx rebuild ;</code>

<code>Index</code> <code>altered.</code>

<code>/* 在索引出現訛誤的情況下僅僅rebuild往往是無效的,在我們rebuild的同時告警日志中再次出現了ORA-00600[6711]錯誤 !!! */</code>

<code>/* 我們需要的徹底把有問題的索引</code><code>drop</code><code>掉,并再次建立!!! */</code>

<code>SQL&gt; </code><code>drop</code> <code>index</code> <code>smon_scn_to_time_idx ;</code>

<code>Index</code> <code>dropped.</code>

<code>SQL&gt; </code><code>create</code> <code>index</code> <code>smon_scn_to_time_idx </code><code>on</code> <code>cluster smon_scn_to_time;</code>

<code>Index</code> <code>created.</code>

<code>/* 至此問題解決,告警日志中不再出現錯誤! * /</code>

<code>/* That's great! * /</code>

本文轉自maclean_007 51CTO部落格,原文連結:http://blog.51cto.com/maclean/1277546