数据库数据坏块的处理一例

上一篇 / 下一篇  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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-08  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 4794
  • 日志数: 444
  • 建立时间: 2007-12-29
  • 更新时间: 2008-07-04

RSS订阅

Open Toolbar