做网站需要投标吗,免费微场景制作网站,市场营销推广,手机版网站建设软件ORA-01555 ORA-22924 快照过旧问题处理
问题描述
使用数据泵导出数据#xff0c;或在业务功能查询某个表时#xff0c;可能出现 ORA-01555 ORA-22924 快照过旧的错误#xff1a;
ORA-01555: snapshot too old: rollback segment number with name too small…ORA-01555 ORA-22924 快照过旧问题处理
问题描述
使用数据泵导出数据或在业务功能查询某个表时可能出现 ORA-01555 ORA-22924 快照过旧的错误
ORA-01555: snapshot too old: rollback segment number with name too small
ORA-22924: snapshot too old解决办法
1.创建表存放查询出有问题的rowid
create table corrupted_lob_data (corrupted_rowid rowid, err_num number);2.收集有问题字段中存在问题值的rowid
在plsql工具里执行以下sql并替换以下3个变量
lob_column 表的字段名一般扫描blob、clob字段 table_owner 表的所有者 table_with_lob 表名
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;4.通过查询出的rowid查看存在问题的记录
select * from 有LOB段损坏的表名 where rowid in (select corrupted_rowid from corrupted_lob_data);5.对问题数据进行删除或置空 注清理前需要与业务部门确认影响二进制数据一般是很难被修复的。
--如果更新的表的字段类型为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;