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)
/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客户环境中表空间为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
墨值悬赏

