資料泵expdp匯出遇到ORA-01555和ORA-22924問題的分析和處理
使用資料泵匯出資料庫資料時,發現如下錯誤提示:
ORA-31693: Table data object "CAMS_CORE"."BP_EXCEPTION_LOG" 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 with name "" too small ORA-22924: snapshot too old
1.檢視錶空間使用率
SELECT UPPER(F.TABLESPACE_NAME) AS "表空間名", D.TOT_GROOTTE_MB AS "表空間大小(M)", D.TOT_GROOTTE_MB-F.TOTAL_BYTES AS "已使用空間(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比", F.TOTAL_BYTES AS "空閒空間(M)", F.MAX_BYTES AS "最大塊(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 1;
2.看到ORA-01555錯誤,還以為是經典錯誤,嘗試調整undo_retention引數
SYS@cams>alter system set undo_retention=30000 scope=both;
修改後再次匯出,問題依舊存在,顯然問題和
undo_retention沒關係,再把引數改回去。
3.猜測是表空間有問題,這裡嘗試對 CAMS_CORE下的索引和LOB 進行表空間遷移。
(1)新建新的表空間
(2)拼接表空間遷移語句,前面已有文章寫到了表空間遷移方案
(3)執行表空間遷移語句
alter table CAMS_CORE.BP_EXCEPTION_LOG move lob(EX_STACK) store as (tablespace cams_core_lob);
執行到該語句的時候提示錯誤:
ORA-01555: 快照過舊: 回退段號 (名稱為 "") 過小 ORA-22924: 快照太舊
這裡,問題應該比較明顯了,有部分 LOB資料有問題。
4.尋找問題解決方案(MOS)
使用關鍵字 “expdp ORA-01555 ORA-22924 LOB”進行查詢:
Export Fails With Errors ORA-2354 ORA-1555 ORA-22924 And How To Confirm LOB Segment Corruption Using Export Utility (文件 ID 833635.1)
5.參考MOS給出的解決方案,動手處理問題
set concat off create table corrupted_lob_data (corrupted_rowid rowid); set concat off declare error_1555 exception; pragma exception_init(error_1555,-1555); num number; begin for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop begin num := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ; exception when error_1555 then insert into corrupted_lob_data values (cursor_lob.r); commit; end; end loop; end; / Enter value for table_owner: EX_STACK Enter value for table_owner: CAMS_CORE Enter value for table_with_lob: BP_EXCEPTION_LOG old 6: for cursor_lob in (select rowid r, &&lob_column from &table_owner.&table_with_lob) loop new 6: for cursor_lob in (select rowid r, EX_STACK from CAMS_CORE.BP_EXCEPTION_LOG) loop old 8: num := dbms_lob.instr (cursor_lob.&&lob_column, hextoraw ('889911')) ; new 8: num := dbms_lob.instr (cursor_lob.EX_STACK, hextoraw ('889911')) ; PL/SQL procedure successfully completed.
檢視存在問題的資料記錄:
select * from CAMS_CORE.BP_EXCEPTION_LOG where rowid in ( select * from CAMS_CORE.corrupted_lob_data );
確實存在
3條資料,
CLOB
欄位資料大小為
,顯然有問題。
MOS上給出的匯出方案是將問題資料exclude掉,這裡為了徹底解決問題,將3條資料匯出為csv檔案,然後刪除。然後再次匯出資料庫資料,不再提示報錯。
6.結合應用分析問題的由來。
根據有問題的資料,讓開發人員去檢查應用日誌。檢查時發現對應時間點的應用日誌有殘缺,不能繼續往下分析。同時,根據問題發生的時間點,瞭解到當時工程師在給伺服器做遷移,結果伺服器強制重啟(應用和資料庫一起),導致了部分資料損壞。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31394774/viewspace-2214736/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 針對資料泵匯出 (expdp) 和匯入 (impdp)工具效能降低問題的檢查表
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- 資料泵匯出資料包錯處理
- Oracle expdp資料泵遠端匯出Oracle
- Oracle資料泵的匯入和匯出Oracle
- 資料庫泵(expdp/impdp)匯入匯出流程資料庫
- 使用資料泵工具expdp工具匯出資料
- 資料泵取匯出和匯入(一)
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- EXPDP 和 IMPDP 資料泵的使用_1
- EXPDP 和 IMPDP 資料泵的使用_2
- 資料泵 EXPDP 匯出工具的使用
- 【資料泵】EXPDP匯出表結構(真實案例)
- 使用資料泵遷移遇到的問題
- 資料泵的匯入匯出
- oracle監控資料泵匯入和匯出的sql語句OracleSQL
- 資料泵匯出匯入
- Oracle10g 資料泵匯出命令 expdp 使用總結Oracle
- 資料庫無響應問題的緊急處理和分析資料庫
- shell,ant指令碼實現自動資料泵(exp.expdp)匯出匯入資料指令碼
- 10g資料泵和匯入匯出效能對比(三)
- 10g資料泵和匯入匯出效能對比(二)
- 10g資料泵和匯入匯出效能對比(一)
- 10g資料泵和匯入匯出效能對比(四)
- 10g資料泵和匯入匯出效能對比(六)
- 10g資料泵和匯入匯出效能對比(五)
- 【EXPDP/IMPDP】使用 EXPDP/IMPDP工具“模糊”匯出和匯入
- 資料泵匯出匯入表
- 工作中遇到的一些問題和處理
- oracle10g expdp資料泵的bug,按schema匯出,匯入impdp時無jobOracle
- expdp匯出表的部分資料
- Oracle資料泵-schema匯入匯出Oracle
- 使用Exp和Expdp匯出資料的效能對比與優化優化
- expdp遠端匯出資料
- expdp匯出報ORA-39181處理方法
- 資料泵匯出匯入資料標準文件
- 【原創】比較資料泵和exp/imp對相同資料匯出/匯入的效能差異
- 資料匯出問題