關於_rollback_segment_count

abin1703發表於2018-03-02
某客戶新增節點在做dml操作的時候報錯,執行不了dml操作,後來經過排查是客戶設定了_rollback_segment_count 引數。
最佳實踐提高Oracle效能設定了_rollback_segment_count 為12000,提前建立好12000個undo段,不用在事務過程中動態的建立undo段,這樣可以提高業務事務的效能。透過我們的排查發現Oracle對undo segment的個數是有限制的32760,首先oracle在1和2號節點上建立了2.4W個undo段(每個例項12000個),隨後,新增了3號節點和4號節點,也就是說3號節點和4節點是在後面新增進來的,由於1號和2號已經佔用了2.4W個undo段,在新增3號節點佔用了最後的剩餘的8000多個undo段,最終在新增4號節點後已經沒有可用的undo段了,資料庫的undo segment的數量達到了oracle的數量上限32760。


++++++++++++++++++++++++++++++++++++++++++++++++=
##新新增的節點ora-01552錯誤問題分析原因
oracle對於undo段的數量是有限制的,每個DB最多可以建立32760個undo段。


由於該環境在壓測除錯期間設定了引數_rollback_segment_count 為12000,該值代表例項啟動後,提前建立好12000個undo段,不用在事務過程中動態的建立undo段,這樣可以提高壓測期間事務的效能。標準實施環境不用設定該引數。


回到我們的環境中,由於引數_rollback_segment_count的設定,首先oracle在1和2號節點上建立了2.4W個undo段(每個例項12000個)。


隨後,新增了3號節點和4號節點,也就是說3號節點和4節點是在後面新增進來的,由於1號和2號已經佔用了2.4W個undo段,在新增3號節點佔用了最後的剩餘的8000多個undo段,最終在新增4號節點後已經沒有可用的undo段了,資料庫的undo segment的數量達到了oracle的數量上限32760。


## 如何解決
* 重置引數rollback_segment_count
* 刪除一些offline狀態的undo 段,使資料庫的undo段數量低於閥值32760
* 新建一個undo表空間,切換到新的undo表空間
*減少_rollback_segment_count數值

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2151446/,如需轉載,請註明出處,否則將追究法律責任。