首页 > Linux操作系统 > Linux操作系统 > 数据库数据坏块的处理一例
一个统计数据库,
开发人员反应,程序运行过程中,遇到如下错误:
ORA-00600:[kafspa:columnBuffer1], [1859], [3], [], [], [], [], []
做数据库全库逻辑备份时,到某个表报如下错误:
EXP-00056: ORACLE error 3113 encountered
出现异常的表有几个,处理过程发现:
1.所有表用 create table aaa as select * from ,不报错.
2.异常数据: select * 出来的时候,则出错. 错误有:ORA-00600,ora-03113
3.异常数据中的一部分不能delete, 错误有:
ORA-08102: index key not found, obj# 6566, dba 113953069 (2)
ORA-00600: internal error code, arguments: [17182], [0x110315F70], [], [], [],
这些只能truncate了.
有些数据是number类型,但其lengthb却是40.
最后是通过一个存储过程,并结合手工处理掉所有的异常数据.
drop table jl_rowid;
create table jl_rowid (pk varchar2(20), err varchar2(100));
create or replace procedure jl
is
cursor jl_cursor
is select rowidtochar(rowid) from tablename where rownum < 100000;
ls_rowid varchar2(20);
ln_aaa number;
ls_sqlerrtext varchar2(100);
begin
open jl_cursor;
loop
fetch jl_cursor into ls_rowid;
if jl_cursor%notfound then
exit;
else
begin
insert into tablename_01 nologgin
select * from tablename where rowid = chartorowid(ls_rowid);
delete from tablename where rowid = chartorowid(ls_rowid);
commit;
exception when others then
rollback;
ls_sqlerrtext := substrb(sqlerrm,1,100);
insert into jl_rowid values(ls_rowid,ls_sqlerrtext);
commit;
end;
end if;
end loop;
close jl_cursor;
end;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/936/viewspace-60718/ ,如需转载,请注明出处,否则将追究法律责任。