API Oracle Datapump

Я переписываю приложение, которое импортирует и экспортирует базу данных Oracle. Я использовал imp.exe и exp.exe, выполняемые как процессы из кода. Теперь я пытаюсь использовать вместо них impdp и expdp. Я изучил некоторые примеры на https://docs.oracle.com/, однако следующий код завершается ошибкой в ​​DBMS_DATAPUMP.ADD_FILE.

DECLARE
  h2 NUMBER;
BEGIN    
  h2 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL, 'MYJOB', 'LATEST');
  DBMS_DATAPUMP.ADD_FILE(h2,'test1.dmp','datapump_dir');
  DBMS_DATAPUMP.METADATA_FILTER(h2,'SCHEMA_EXP','IN (''sc900'')');
  DBMS_DATAPUMP.START_JOB(h2);
  dbms_datapump.detach(h2);
END; 

Вывод ошибки

 ORA-39001: invalid argument value
 ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
 ORA-06512: at "SYS.DBMS_DATAPUMP", line 3507
 ORA-06512: at "SYS.DBMS_DATAPUMP", line 3756

Я подключен, поскольку оператор создания 'sys' и 'datapump_dir' был успешно выполнен.

Что я делаю неправильно? Заранее спасибо!

1 ответ

Решение

Если кому-то будет интересно, я нашел причину проблемы. По какой-то причине это не сработало, даже если я указал каталог по умолчанию. Однако, когда я передаю null этому параметру, он работает. Следующий код работает, единственным недостатком является то, что я могу сохранить только в директорию по умолчанию

DECLARE
  h2 NUMBER;
BEGIN
  h2 := DBMS_DATAPUMP.OPEN('EXPORT', 'SCHEMA');
  DBMS_DATAPUMP.ADD_FILE(h2, 'example0.dmp', null);
  DBMS_DATAPUMP.METADATA_FILTER(h2,'SCHEMA_EXPR', q'{IN ('SC900')}');
  DBMS_DATAPUMP.START_JOB(h2);
  DBMS_DATAPUMP.DETACH(h2);
END;
/
Другие вопросы по тегам