数据库数据坏块的处理一例
上一篇 /
下一篇 2007-03-09 00:00:00
/ 个人分类:oracle
一个统计数据库,
开发人员反应,程序运行过程中,遇到如下错误:
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;
/
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: