#oracle
#Oracle
Вопрос:
При восстановлении таблицы из резервной копии oracle 11g включение более 2 записей в команду ВКЛЮЧЕНИЯ возвращает синтаксическую ошибку.
Команда, которая работает:
impdp SVC_DEMO/********* SCHEMAS=test REMAP_SCHEMA=test:SVC_DEMO REMAP_TABLESPACE=DATA:SYSTEM DIRECTORY=dmpdir DUMPFILE=devv2db_05102016.dmp TABLE_EXISTS_ACTION=replace INCLUDE = TABLE:"IN('TBLPARTNER')" LOGFILE=impschema1.log
Starting "SVC_DEMO"."SYS_IMPORT_SCHEMA_02": SVC_DEMO/********
SCHEMAS=test REMAP_SCHEMA=test:SVC_DEMO
REMAP_TABLESPACE=DATA:SYSTEM DIRECTORY=dmpdir DUMPFILE=devv2db_05102016.dmp
LOGFILE=impschema1.log
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "SVC_DEMO"."TBLPARTNER" 21.46 KB 7 rows
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SVC_DEMO"."SYS_IMPORT_SCHEMA_02" successfully completed at 15:01:38
Но, когда я добавляю вторую таблицу в команду включения:
impdp SVC_DEMO/********* SCHEMAS=test REMAP_SCHEMA=test:SVC_DEMO REMAP_TABLESPACE=DATA:SYSTEM DIRECTORY=dmpdir DUMPFILE=devv2db_05102016.dmp TABLE_EXISTS_ACTION=replace INCLUDE = TABLE:"IN('TBLPARTNER', 'TBLACCOUNT')" LOGFILE=impschema1.log
Я получаю следующее сообщение:
impdp SVC_DEMO/****** SCHEMAS=test REMAP_SCHEMA=test:SVC_DEMO
REMAP_TABLESPACE=DATA:SYSTEM DIRECTORY=dmpdir
DUMPFILE=devv2db_05102016.dmp TABLE_EXISTS_ACTION=replace INCLUDE =
TABLE:"IN('TBLPARTNER', 'TBLACCOUNT')" LOGFILE=impschema1.log
LRM-00116: syntax error at ')' following 'TBLACCOUNT'
Я искал ошибки в impdp, но не могу их найти.
Я делаю что-то не так?
Комментарии:
1. 1. — отформатируйте свой код (отредактируйте, выберите код, CTRL-K, отрегулируйте отступы); 2. Это MySQL, SQL Server или Oracle? (пока вы редактируете свой пост, прокрутите вниз до самого низа, щелкните маленький крестик на тегах, которые к вам не относятся.) Спасибо!
Ответ №1:
Поскольку вы запускаете это в командной строке, в зависимости от вашей ОС, могут потребоваться экранирование специальных символов. (Также проще использовать файл параметров, где вам не нужно экранировать символы)
include=TABLE:"IN ('TABLE1', 'TABLE2')"
Используя файл параметров, вы просто размещаете один параметр в строке и ссылаетесь на него с помощью
impdp PARFILE=name.txt
Комментарии:
1. Первоначально я следовал вашей первой рекомендации, и это не сработало. Затем я последовал вашей второй рекомендации, используйте параметрический файл, и это действительно работает. Возможно, в версии impdp для командной строки есть ошибка. Спасибо, и я буду использовать только параметрические файлы.
2. Рад, что это сработало. Может быть, вам нужно только экранировать кавычки («) или только экранировать апостроф (‘ ) с помощью командной строки.