EXPDP 快照太舊實時監控
在數據泵導出期間引發“快照太舊”的可能錯誤在整個網際網路上都有很好的記錄,例如:
- undo_retention 參數太短
- 重做日誌組太小或太少
- undo表空間太小
有沒有辦法在作業執行時監控這些失敗案例?
我正在尋找的解決方案是一個會報告的查詢:
- 快照的撤消表空間使用的總百分比,直到它需要自動擴展或最大化
- 在覆蓋自身之前,重做日誌使用的總百分比
- 快照達到撤消保留之前的剩餘時間
任何做這些事情的一部分的查詢都將受到歡迎。查找此類資訊是否需要 oracle 分析包?有可能查詢這樣的事情嗎?
您需要完全了解撤消是如何解決此錯誤的。我推薦這篇博文:
http://blog.oracle48.nl/wordpress/oracle-database-undo-space-explained/
您可以使用此查詢來查看 Undo 表空間的目前配置文件:
SELECT DISTINCT STATUS,TABLESPACE_NAME, SUM(BYTES), COUNT(*) FROM DBA_UNDO_EXTENTS GROUP BY STATUS, TABLESPACE_NAME;
ACTIVE
範圍包含未送出或目前回滾的事務。UNEXPIRED
extents 包含需要保留在 Undo 表空間中以滿足 undo_retention 參數的事務EXPIRED
範圍是仍在 Undo 表空間中的事務,比 undo_retention 參數更早。數據庫將刪除最舊的過期範圍,為新的活動範圍騰出空間。如果沒有過期的extent,它將嘗試分配一個新的extent。如果這意味著擴展數據文件,它會這樣做。
如果數據文件無法擴展,數據庫將刪除一些未過期的擴展區以騰出空間,違反了 undo_retention 值。因此,undo_retention 參數不是保證,而是數據庫將盡力遵守的準則。
現在,這裡有兩種常見的故障模式:
- 如果查詢嘗試從已刪除的範圍中讀取,它將失敗並顯示
ORA-01555 Snapshot Too Old
- 如果整個撤消表空間充滿活動撤消,事務將失敗
ORA-30036 unable to extend segment in Undo tablespace
快照的撤消表空間使用的總百分比,直到它需要自動擴展或最大化
如果 DBA_UNDO_EXTENTS 中活動和未過期字節的總和接近相關撤消表空間的大小,則您有可能遇到 ORA-01555。
如果活動字節的總和接近相關撤消表空間的大小,您可能會遇到 ORA-30036 錯誤。
在覆蓋自身之前,重做日誌使用的總百分比
我不知道您可以在重做日誌配置中更改任何會影響 Snapshot Too Old 錯誤的內容。你從哪裡得到這些資訊的?
快照達到撤消保留之前的剩餘時間
準確地做到這一點即使不是不可能也是非常困難的,因為它依賴於數據庫中的所有其他事務。如果你從 undo_retention 參數中減去查詢執行時間,你會有一個好主意,但這只是假設 undo 表空間足夠大,可以滿足 undo_retention 值。一旦越過那條線,所有賭注都將取消。