sqlldr повреждает мой первичный ключ после первого коммита
Sqlldr повреждает мой индекс первичного ключа после первого коммита в моем файле ctl. После первого, независимо от того, какое значение строки я установил в контрольном файле, я получаю:
ORA-39776: fatal Direct Path API error loading table PE_OWNER.CLINICAL_CODE
ORA-01502: index 'PE_OWNER.CODE_PK' or partition of such index is in unusable state
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
Я использую базу данных Oracle и клиент 11.1.0.6.0.
Я знаю, что проблема не в дублирующих строках, потому что, если я установлю директиву строк на большое значение, индекс не будет поврежден после того, как sqlldr сделает одну фиксацию для всего файла. Это дает мне обходной путь, но это все еще немного настораживает...
Спасибо за любое руководство, которое может дать любой.
2 ответа
Я полагаю, что проблема заключалась в том, что у Oracle не было времени для перестройки индексов в рассматриваемой таблице, поэтому я увеличил размер пакетной фиксации до числа, большего, чем количество импортируемых записей.
Это решило проблему.
Я не использую SQL*Loader в рабочих таблицах, но из того, что я прочитал, вам нужно использовать обычную загрузку.
из документации по SQL*Loader
Когда использовать обычную загрузку пути
Если скорость загрузки наиболее важна для вас, вы должны использовать прямую загрузку пути, потому что она быстрее, чем обычная загрузка пути. Тем не менее, определенные ограничения на прямые нагрузки на пути могут потребовать от вас использования обычной нагрузки на пути. Вы должны использовать обычную загрузку пути в следующих ситуациях:
* When accessing an indexed table concurrently with the load, or when applying inserts or updates to a nonindexed table concurrently with the load
Чтобы использовать прямую загрузку пути (за исключением параллельной загрузки), SQL*Loader должен иметь эксклюзивный доступ на запись в таблицу и эксклюзивный доступ на чтение / запись к любым индексам.