我面临这个错误,由于这个错误,整个系统似乎都在崩溃。在检查了日志和所有内容后,我发现一个目标表可能是问题所在。
这就是错误:
MERGE INTO vacations vac
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [kdtigetrow-2], [25], [40], [39],
[], [], [], [], [], [], [], []
这是源表:
create table TEMP_VACATIONS
(
idd VARCHAR2(10),
start_date VARCHAR2(10),
end_date VARCHAR2(10),
day_count VARCHAR2(10),
vac_type VARCHAR2(10),
arrival_date DATE
)
这是目的地表:
create table VACATIONS
(
user_id NUMBER(10) not null,
start_date DATE not null,
end_date DATE not null,
days_count NUMBER(3) not null,
vacation_type INTEGER,
arrival_date VARCHAR2(20),
idd NUMBER(10)
)
alter table SPENT_VACATIONS
add constraint SPENT_VACATIONS$PK primary key (USER_ID, START_DATE)
using index
tablespace ARCV25
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 320K
next 1M
minextents 1
maxextents unlimited
);
这是脚本:
MERGE INTO vacations vac
USING temp_vacations tmpvac
ON (vac.user_id = TO_NUMBER(tmpvac.idd) AND vac.start_date = TO_DATE(tmpvac.start_date, 'dd.mm.yyyy') AND vac.end_date = TO_DATE(tmpvac.end_date, 'dd.mm.yyyy'))
WHEN NOT MATCHED THEN
INSERT (vac.user_id, vac.start_date, vac.end_date, vac.days_count, vac.vacation_type, vac.arrival_date)
VALUES (TO_NUMBER(tmpvac.idd), TO_DATE(tmpvac.start_date, 'dd.mm.yyyy'), TO_DATE(tmpvac.end_date, 'dd.mm.yyyy'), tmpvac.day_count, tmpvac.vac_type, TO_CHAR(tmpvac.arrival_date, 'dd.mm.yyyy'))
LOG ERRORS INTO stara.migration_err('File: STARA_EHR.SPOLO.TXT => merge operation => annual_vacations') REJECT LIMIT UNLIMITED;
COMMIT;
oracle版本为:
Oracle Database 11g Release 11.2.0.2.0
此错误是否可能发生在类型对话(char=>日期或char=>数字)期间?
我该如何修复该内部错误?是否需要将数据库回滚到以前的备份?
提前谢谢。
ORA-00600是Oracle的通用代码,用于发出意外内部行为(即错误)的信号。标准建议是联系Oracle支持部门,因为根据这些事情的性质,它们往往非常特定于数据库版本、平台和大量其他变量。很有可能你需要一个补丁来解决这个问题,或者只是升级到最新版本。
当然,如果你没有支持合同,那么这个建议并不是很有用。不幸的是,我们很难提供更多帮助。警报日志中应该有进一步的信息,并且可能还有跟踪文件。你可能需要请一位DBA来帮助你
否则,你可以尝试在互联网上搜索。第一个参数指示特定事件,即[kdtigetrow-2]
。我确实在博客上找到了这篇文章,但作者的情景似乎与你的截然不同。
我们已经使用最新的补丁21将Oracle数据库升级到11.2.0.3。现在一切都很好:-)
这听起来像是索引损坏。禁用约束,删除索引,重新创建索引,然后再次启用约束。