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;
/