oracle数据泵导出csv文件,数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理...
使用數(shù)據(jù)泵導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)時,發(fā)現(xiàn)如下錯誤提示:
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錯誤,還以為是經(jīng)典錯誤,嘗試調(diào)整undo_retention參數(shù)
SYS@cams>alter?system?set?undo_retention=30000?scope=both;
修改后再次導(dǎo)出,問題依舊存在,顯然問題和
undo_retention沒關(guān)系,再把參數(shù)改回去。
3.猜測是表空間有問題,這里嘗試對
CAMS_CORE下的索引和LOB
進(jìn)行表空間遷移。
(1)新建新的表空間
(2)拼接表空間遷移語句,前面已有文章寫到了表空間遷移方案
(3)執(zhí)行表空間遷移語句
alter?table?CAMS_CORE.BP_EXCEPTION_LOG?move?lob(EX_STACK)?store?as?(tablespace?cams_core_lob);
執(zhí)行到該語句的時候提示錯誤:
ORA-01555:?快照過舊:?回退段號??(名稱為?"")?過小
ORA-22924:?快照太舊
這里,問題應(yīng)該比較明顯了,有部分
LOB數(shù)據(jù)有問題。
4.尋找問題解決方案(MOS)
使用關(guān)鍵字
“expdp ORA-01555 ORA-22924 ?LOB”進(jìn)行查找:
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.
查看存在問題的數(shù)據(jù)記錄:
select?*?from?CAMS_CORE.BP_EXCEPTION_LOG
where?rowid?in?(?select?*?from?CAMS_CORE.corrupted_lob_data?);
確實存在
3條數(shù)據(jù),
CLOB
字段數(shù)據(jù)大小為
,顯然有問題。
MOS上給出的導(dǎo)出方案是將問題數(shù)據(jù)exclude掉,這里為了徹底解決問題,將3條數(shù)據(jù)導(dǎo)出為csv文件,然后刪除。然后再次導(dǎo)出數(shù)據(jù)庫數(shù)據(jù),不再提示報錯。
6.結(jié)合應(yīng)用分析問題的由來。
根據(jù)有問題的數(shù)據(jù),讓開發(fā)人員去檢查應(yīng)用日志。檢查時發(fā)現(xiàn)對應(yīng)時間點的應(yīng)用日志有殘缺,不能繼續(xù)往下分析。同時,根據(jù)問題發(fā)生的時間點,了解到當(dāng)時工程師在給服務(wù)器做遷移,結(jié)果服務(wù)器強(qiáng)制重啟(應(yīng)用和數(shù)據(jù)庫一起),導(dǎo)致了部分?jǐn)?shù)據(jù)損壞。
總結(jié)
以上是生活随笔為你收集整理的oracle数据泵导出csv文件,数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红帽考试环境之RHCSA
- 下一篇: 红帽认证是什么?红帽认证含金量高吗?