impdp не принимает две таблицы в команде ВКЛЮЧЕНИЯ

#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. Рад, что это сработало. Может быть, вам нужно только экранировать кавычки («) или только экранировать апостроф (‘ ) с помощью командной строки.