2013-06-26 5 views
0

Я столкнулся с этой ошибкой, и из-за этой ошибки вся система, похоже, опускается. После проверки журналов и всего, я обнаружил, что одной из таблиц назначения может быть проблема.Ошибка kdtigetrow-2 во время интеграции

Это ошибка:

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 Database 11g Release 11.2.0.2.0 

Возможно ли, что эта ошибка возникает во время разговора типа (Char => даты или полукокса => номер)?

Как я могу исправить эту внутреннюю ошибку? Нужно ли мне откатывать базу данных до предыдущей резервной копии?

Заранее спасибо.

+0

Внутренняя ошибка означает, что оператор не удалось из-за ошибки, вам не нужно, чтобы восстановить база данных. Единственная ошибка, которую я вижу, похоже, связана с конвейерными функциями таблицы, которые вы не используете. Преобразования типов не должны быть проблемой - я могу запустить это (в 11.2.0.3) без проблем, но я придумываю данные, очевидно; и я предположил, что у вас есть тот же PK на 'vacations', как вы показали, что на' потраченные_vacations'? –

ответ

3

ORA-00600 - это общий код Oracle для сигнализации о неожиданном внутреннем поведении (т. Е. Ошибки). Стандартный совет - связаться с Oracle Support, так как по характеру этих вещей они, как правило, очень специфичны для версии базы данных, платформы и целого ряда других переменных. Существует четкая возможность того, что вам понадобится патч для исправления этой проблемы или, возможно, просто обновление до последней версии.

Конечно, если у вас нет контракта на поддержку, этот совет не очень полезен. К сожалению, нам трудно быть более полезными. Должна быть дополнительная информация в журнале предупреждений, а также файл трассировки. Вероятно, вам придется попросить администратора базы данных помочь вам в этом.

В противном случае вы можете попробовать выполнить поиск в Интернете. Первый параметр указывает конкретное событие, то есть [kdtigetrow-2]. Я нашел t his article on a blog, но сценарий писателя, похоже, сильно отличается от вашего.

0

Это звучит как повреждение индекса. Отключите ограничение, отбросьте индекс, заново создайте индекс и снова включите ограничение.

2

Мы обновили БД Oracle для 11.2.0.3 с последним патчем 21. Теперь все хорошо работает :-)