天天看點

ORA-01599錯誤的解決方法

工作中遇到的資料庫故障處理一例:

作業系統:Sun Solaris 8

雙機軟體: Sun Cluster 3.0

資料庫:Oracle 8.1.7.3

故障現象:

資料庫無法啟動或者cluster系統無法切換。檢視資料庫日志檔案$ORACLE_BASE/admin/ORCL/bdump/alert_ORCL.log有類似于ORA-01599: failed to acquire rollback segment (49), cache space is full (currently has (48) entries) Error 1599 happened during db open, shutting down database類似的錯誤資訊。

故障分析:

Orale存在一個初始化參數max_rollback_segments它代表了同時能夠online的復原段的個數。它的預設值是

max(30,TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)。當初始化參數中指定(通過rollback_segments參數)或者預設online的復原段個數超過max_rollback_segments這個參數後資料庫就無法啟動。這個錯誤往往是由于使用者在增加了復原段之後隻是修改了rollback_segments參數但沒有修改max_rollback_segments參數導緻的。或者使用者增加了public復原段,同時在初始化參數中注釋掉了max_rollback_segments參數也會導緻這個問題。

故障處理:

可以将oracle初始化參數中的max_rollback_segments修改為大于目前所有的復原段的總數後再重起資料庫即可。如果不知道目前到底有多少復原段,可以先将這個值設定為100再重起資料庫試試。如果還報告同樣的錯誤就再提高此值直到成功為止。當資料庫啟動起來以後可以通過select count(*) from dba_rollback_segs來獲得确切的復原段個數後再去修改初始化參數。

日常維護:

在增加復原段的時候請注意max_rollback_segments和rollback_segments這幾個參數之間的互相作用,最好同時在兩個節點上都參看一下。