暂无图片
分享
卢春龙
2019-02-19
oracle rac

The statement failed with status 8103: ORA-08103: object no longer exists for input row 1236. (CC_OraStatement::rejectRecord, file CC_OraStatement.cpp, line 1,842)

收藏
分享
10条回答
默认
最新
卢春龙
上传附件:swbi2_ora_18508.trc
暂无图片 评论
暂无图片 有用 0
章芋文

/home/u01/11.2.0/oracle/diag/rdbms/swbi/swbi2/incident/incdir_320856/swbi2_ora_18508_i320856.trc

这个trace文件内容也是一样的吗?如果不一样请上传下

暂无图片 评论
暂无图片 有用 0
卢春龙
暂无图片 评论
暂无图片 有用 0
章芋文

从trace文件中可以看到报错信息和SQL如下:

ORA-00600: internal error code, arguments: [qerltcUserIterGet_1], [188], [188], [], [], [], [], [], [], [], [], []
ORA-08103: object no longer exists
----- Current SQL Statement for this session (sql_id=06gbh445ma6hk) -----
INSERT INTO A_CW_ZB_DOT_SALE_M(SHOP_CODE,DATA_M,STA_TYPE_CODE,IDX_NUM,IDX_NUM2,IDX_NUM3,IDX_NUM4,IDX_NUM5,IDX_NUM6,IDX_NUM7,LS_TYPE) VALUES(:SHOP_CODE,:DATA_M,:STA_TYPE_CODE,:IDX_NUM,:IDX_NUM2,:IDX_NUM3,:IDX_NUM4,:IDX_NUM5,:IDX_NUM6,:IDX_NUM7,:LS_TYPE)

主要的call stack如下:

qerltcUserIterGet < qerltcRowProcessingErrorHandler < qerltcAddUserIterationtoHash < qerltcInsertValues < qerltcFetch < qerltcInsertValues < insexe

执行insert时fetch数据行时报错,ORA-08103和ORA-00600[qerltcUserIterGet_1]

该报错主要原因是表在做truncate、move、交换拆分分区、重建索引等操作时,其他会话同时对表进行了DML操作,导致部分数据行就标记为损坏,只能重建表和索引解决。

先尝试create table as select,如果报错可能就需要跳过报ORA-08103的行

暂无图片 评论
暂无图片 有用 0
卢春龙
暂无图片 评论
暂无图片 有用 0
章芋文

官方跳过ORA-1578 ORA-8103 ORA-1410的步骤和脚本,供参考:

REM Create a new table based on the table that is producing errors with no rows:

create table <new table name> 
as
select * 
from   <original table name>
where  1=2;

REM Create the table to keep track of ROWIDs pointing to affected rows:

create table bad_rows (row_id rowid, oracle_error_code number);

set serveroutput on

DECLARE
  TYPE RowIDTab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;

  CURSOR c1 IS select /*+ index_ffs(tab1 <index name>) parallel(tab1) */ rowid
  from <original table name> tab1
  where <indexed column> is NOT NULL
  order by rowid;

  r RowIDTab;
  rows NATURAL := 20000;
  bad_rows number := 0 ;
  errors number;
  error_code number;
  myrowid rowid;
BEGIN
  OPEN c1;
  LOOP
   FETCH c1 BULK COLLECT INTO r LIMIT rows;
   EXIT WHEN r.count=0;
   BEGIN
    FORALL i IN r.FIRST..r.LAST SAVE EXCEPTIONS
     insert into <new table name>
     select /*+ ROWID(A) */ <list of columns from table (ie col1, col2,..)>
     from <original table name> A where rowid = r(i);
   EXCEPTION
   when OTHERS then
    BEGIN
     errors := SQL%BULK_EXCEPTIONS.COUNT;
     FOR err1 IN 1..errors LOOP
      error_code := SQL%BULK_EXCEPTIONS(err1).ERROR_CODE;
      if error_code in (1410, 8103, 1578) then
       myrowid := r(SQL%BULK_EXCEPTIONS(err1).ERROR_INDEX);
       bad_rows := bad_rows + 1;
       insert into bad_rows values(myrowid, error_code);
      else
       raise;
      end if;
     END LOOP;
    END;
   END;
   commit;
  END LOOP;
  commit;
  CLOSE c1;
  dbms_output.put_line('Total Bad Rows: '||bad_rows);
END;
/
暂无图片 评论
暂无图片 有用 0
卢春龙
暂无图片 评论
暂无图片 有用 0
卢春龙

现在扩容表空间也有问题

暂无图片 评论
暂无图片 有用 0
章芋文

客户环境中表空间为bigfile,设置了maxsize,得知在resize为900G后,错误消失,也不需要重建表。

skdstdst ksedst1 ksedst dbkedDefDump ksedmp ksfdmp dbgexPhaseII 
dbgexProcessError dbgeExecuteForErrordbgePostErrorKGE dbkePostKGE_kgsf 
kgeadse kgerinv_internal kgerinv kgeasnmierr qerltcUserIterGet 
qerltcAddUserIterationtoHash qerltcRowProcessingErrorHandler 
qerltcInsertValues qerltcFetch insexe
opiexe opipls opiodr rpidrus skgmstack 
rpiswu2 rpidrv psddr0 psdnal pevm_EXECC pfrinstr_EXECC pfrrun_no_tool pfrrun 
plsql_run pricar pricbr prient2 prient kkxrpc kporpc opiodr ttcpip opitsk 
opiino opiodr opidrv sou2o opimai_real ssthrdmain main __libc_start_main 
_start

MOS中ORA-600[qerltcUserIterGet_1]已知BUG如下:

--发生在insert和重建索引同时操作时

Bug 5144934 - Wrong oereof value returned when error occurs in a batch - can cause ORA-600 (Doc ID 5144934.8)

--异常断开

Bug 9150510  OERI executing LOG ERRORS INTO portion of a SQL statement after an ORA-3113

Bug 14469565  ORA-600[qerltcUserIterGet_1] signaled with ORA-3135

Bug 19949485  ORA-28 followed by an ORA-600 [kcbnew_2] or similar

trace中process dump有大量的log file sync等待事件,如果只是通过resize表空间问题就不在出现,猜测存在未知bigfile的bug,也就是在批量写入bigfile时,而bigfile已经达到MAXSIZE,此时会出现ORA-600[qerltcUserIterGet_1]和报错ORA-0810。


暂无图片 评论
暂无图片 有用 0
卢春龙
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏