Oracle

ORA-01555: 執行 expdp 命令期間的快照太舊錯誤

  • September 6, 2017

在生產數據庫(Oracle 11g - linux)中執行 expdp 命令後:

expdp abc/123 DIRECTORY=data_pump DUMPFILE=SA10_%u.dmp LOGFILE=SA10.log 
TABLES="abc"."/1FE/019" PARALLEL=4 CONTENT=DATA_ONLY COMPRESSION=ALL 
EXCLUDE=statistics STATUS=60

完成導出需要超過 13 小時,並且完成時出現以下錯誤消息:

ORA-31693: Table data object "abc"."/1FE/019" failed to load/unload and is 
being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-01555: snapshot too old: rollback segment number 56 with name 
"_SYSSMU56_1611713889$" too small 

任何人請建議我該如何解決這個錯誤?

PS 我不允許更改保留政策!

如果你不能改變你的“保留政策”(又名 UNDO_RETENTION),你應該尋找其他方法來提高你的 expdp 性能。

您可以嘗試以下一項(或多項):

  1. 嘗試提高您的並行參數;
  2. 使用更快的磁碟到 expdp 目標;
  3. 如果您的 CPU 很少且速度較慢,請不要使用 COMPRESS。

ORA-01555: 快照太舊錯誤

原因:

很簡單,如果要歸檔的表(在 Oracle 中)很大並且對錶的 SELECT 查詢需要時間來提取數據,則 Oracle DB 會出現此問題。當任何 SELECT 查詢在 Oracle 中執行時,Oracle 將嘗試保持讀取一致性機制。

解決方案:

  1. 恢復作業並確保在作業執行時沒有會話更新要歸檔的表。
  2. 增加UNDO表空間。
  3. UNDO_RETENTION參數設置為高值,以便 UNDO 中的數據在被覆蓋之前保留很長時間。

對於您的 ref HereHereEncountering “Snapshot too old” 執行 expdp 命令期間的錯誤

引用自:https://dba.stackexchange.com/questions/185172