备份数据库,报错ORA-31693、ORA-02354、ORA-01555、ORA-22924

一、问题说明
在备份数据库时发现reader不能正常备份,备份进行一段时间后报错并回滚,然后继续备份剩下的表,报错信息如下:

. . exporting table                         READER
EXP-00056: ORACLE error 1555 encountered
ORA-01555: snapshot too old: rollback segment number  with name "" too small
ORA-22924: snapshot too old


二、解决办法
①全备份数据库。(如果可以肯定要备份数据库咯,但是不是备份不了吗,所以把有问题的列,即rdphoto先不要,重新复制一个reader表,算是备份了reader表了就)
②创建参照表---
create table corrupted_data (corrupted_rowid rowid); 
③查询reader.rdphto的坏块,这里估计是rdphoto这个字段的事,不过也肯定是这孙子的事了---
declare
error_1578 exception;
error_1555 exception;
error_22922 exception;
pragma exception_init(error_1578,-1578);
pragma exception_init(error_1555,-1555);
pragma exception_init(error_22922,-22922);
n number;
begin
for cursor_lob in (select rowid r, rdphoto from interlib.reader) loop
begin
n:=dbms_lob.instr(cursor_lob.rdphoto,hextoraw('889911')) ;
exception
when error_1578 then
insert into corrupted_data values (cursor_lob.r);
commit;
when error_1555 then
insert into corrupted_data values (cursor_lob.r);
commit;
when error_22922 then
insert into corrupted_data values (cursor_lob.r);
commit;
end;
end loop;
end;
/
④看看有多少,然后进一步处理---
select * from corrupted_data;
⑤更新有问题的数据,使rdphoto为空。
update reader set rdphoto = empty_blob() where rowid in (select corrupted_rowid from corrupted_data);
commit;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vllen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值