暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORA-08103: object no longer exists的处理

原创 jieguo 2023-09-27
906

由于存储断电可能导致如下的问题:
查询表报错如下:

12:17:10 SQL> create table JYC.TEST20230927
parallel (degree 16) nologging 
as
SELECT * FROM JYC.TEST  WHERE HID IN (select id from JYC.TEST01);12:17:13   2  12:17:13   3  12:17:13   4  
create table JYC.TEST20230927
*
ERROR at line 1:
ORA-12801: error signaled in parallel query server P004, instance racdb1:jyc1 (1)
ORA-08103: object no longer exists


Elapsed: 00:00:31.62

一般处理办法:如果有备份,则考虑rman repair block;
可以尝试ALTER SESSION SET EVENTS ‘10231 trace name context forever,level 10’ ;不行则继续如下
dbms_repair.repair

drop table REPAIR_TABLE;

begin
dbms_repair.admin_tables (
table_name => 'REPAIR_TABLE',
table_type => dbms_repair.repair_table,
action => dbms_repair.create_action,
tablespace => 'USERS');
end;
/

select count(*) from JYC.TEST;

set serveroutput on
declare
num_corrupt int;
begin
num_corrupt := 0;
DBMS_REPAIR.CHECK_OBJECT (
schema_name => 'JYC',
object_name => 'TEST',
repair_table_name =>'REPAIR_TABLE',
corrupt_count =>num_corrupt);
dbms_output.put_line('number corrupt:' || to_char(num_corrupt));
end;
/

select object_name,block_id,corrupt_type,marked_corrupt,repair_description from REPAIR_TABLE;
确认marked_corrupt是否为true,如果为false,则需执行如下fix_corrupt_blocks
declare
cc number;
begin
dbms_repair.fix_corrupt_blocks(schema_name => 'JYC',
object_name => 'TEST',
fix_count => cc);
dbms_output.put_line('Number of blocks fixed:' || to_char(cc));
end;
/
但fix的时候有可能报错如下:
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kcbzib_lobds_1], [81647], [111832], [126557125], [7], [], [], [], [], [], [], []
ORA-06512: at "SYS.DBMS_REPAIR", line 353
ORA-06512: at line 4

select dbms_utility.data_block_address_file(126557125) "file", dbms_utility.data_block_address_block(126557125) "block"  from dual;

如果上面报错,则此时执行下面是skip操作无意义:
begin
dbms_repair.skip_corrupt_blocks (
schema_name => 'JYC',
object_name => 'TEST',
object_type => dbms_repair.table_object,
flags => dbms_repair.skip_flag);
end;
/
如果可以skip,则可正常select * from jyc.test;
否则需考虑带where条件,比如id>xxx去获取需要的数据。

相关参考:
https://blog.csdn.net/loveLAxin/article/details/122836149
https://www.modb.pro/db/190627
https://www.ucloud.cn/yun/129681.html

最后修改时间:2023-09-27 14:00:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论