问题描述
create table corrupted_lob_data (corrupted_rowid rowid, err_num number);
declare
error_1578 exception;
error_1555 exception;
error_22922 exception;
error_22924 exception;
pragma exception_init(error_1578,-1578);
pragma exception_init(error_1555,-1555);
pragma exception_init(error_22922,-22922);
pragma exception_init(error_22924,-22924);
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_1578 then
insert into corrupted_lob_data values (cursor_lob.r,1578);
commit;
when error_1555 then
insert into corrupted_lob_data values (cursor_lob.r,1555);
commit;
when error_22922 then
insert into corrupted_lob_data values (cursor_lob.r,22922);
commit;
when error_22924 then
insert into corrupted_lob_data values (cursor_lob.r,22924);
commit;
end;
end loop;
end;
/
3、查看是否有数据损坏:
select * from corrupted_lob_data;
select * from 有LOB段损坏的表名 where rowid in (select corrupted_rowid from corrupted_lob_data);
--如果更新的表的字段类型为CLOB,则用以下脚本修复: update 表名 set LOB字段名=empty_clob() where rowid in (select corrupted_rowid from corrupted_lob_data); --如果更新的表的字段类型为BLOB,则用以下脚本修复: update 表名 set LOB字段名=empty_blob() where rowid in (select corrupted_rowid from corrupted_lob_data); commit;
expdp \" / as sysdba \" directory=DATA_PUMP_DIR dumpfile=table_sys_xform_template_history.dump logfile=table_sys_xform_template_history_dump.log tables=xxxxxxx.SYS_XFORM_TEMPLATE_HISTORY CONTENT=DATA_ONLY QUERY=\"WHERE rowid NOT IN \(\'AAAtdvAAFAAOR1ZAAE\'\) \"

