ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库数据坏块的处理一例

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

原创 Linux操作系统 作者:jlandzpa 时间:2019-07-19 20:33:04 0 删除 编辑

一个统计数据库,
开发人员反应,程序运行过程中,遇到如下错误:
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博客 ” ,链接:http://blog.itpub.net/936/viewspace-60718/,如需转载,请注明出处,否则将追究法律责任。

下一篇: ora-30019
请登录后发表评论 登录
全部评论

注册时间:2001-10-12

  • 博文量
    268
  • 访问量
    172239