Мой звонок в Oracle exp терпит неудачу:
EXP-00006: internal inconsistency error
EXP-00000: Export terminated unsuccessfully
Я выполняю команду
C:\oracle\product\11.1.0\db_1\BIN\exp user/pass@instance file=dump.dmp log=log.log compress=y owner=user
Таблица, в которой произошел сбой, содержит
Первичный ключ также является внешним ключом для другой таблицы.
Во всех результатах поиска указано, что мне следует связаться с Oracle, но нет ли другого решения этой проблемы? Может быть, перестройка стола?
запустить: проанализировать таблицу, проверить каскад структуры;
Посмотрите, не выдает ли он ошибку, что что-то не так. Если это поврежденный индекс, удалите и создайте заново, если это что-то еще, попытайтесь восстановить таблицу, если вы можете / знаете, как. Получите поддержку Oracle, чтобы помочь, если вам нужно.
Если у вас есть поддержка Oracle, сообщите им. Это может быть внутренняя проблема с самим экспортом, и они запросят дополнительную информацию, скажут вам, что попробовать, и так далее, пока вы не решите проблему. Вы, вероятно, также получите патч / исправление, если оно есть.
Я бы предложил вместо этого выполнить экспорт с помощью datapump, поскольку экспорт давно не рекомендуется. Вам нужно определить каталог, в который oracle должен помещать экспортированные данные, а затем запустить datapump. Это проще, быстрее, надежнее и гибче, чем импорт / экспорт.
Пример:
SQL> CREATE OR REPLACE DIRECTORY expdump AS '/export/home/oracle/expdump';
SQL> GRANT READ, WRITE ON DIRECTORY expdump TO user_who_will_export;
Затем запустите:
$ expdp user/pass schemas=schema1,schema2 directory=expdump dumpfile=myexport.dmp logfile=myexport.log
Дополнение: похоже, у вас проблемы с согласованностью БД. Выполните логическую и физическую проверку с помощью RMAN, чтобы выявить любые другие проблемы:
RMAN> connect target /
RMAN> run {
# set disk to be default device type
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
# number of concurrent sessions to spawn (if you can affor parallelism)
CONFIGURE DEVICE TYPE DISK PARALLELISM 10 BACKUP TYPE TO BACKUPSET;
# check datafiles for corruption 10 datafiles in each session (if you can afford paralellism)
BACKUP VALIDATE CHECK LOGICAL DATABASE FILESPERSET=10;
}
Код общий, этот фрагмент заимствован из http://oraclespin.wordpress.com/2008/06/11/how-to-check-physical-and-logical-data-corruption-using-rman/
Я исправил эту проблему, определив, в какой таблице возникла проблема. Затем я скопировал эту таблицу в новую:
create table X as Select * from Y
после этого я отбросил старую таблицу и переименовал новую. Я создал ограничения, и все было хорошо.