【问题标题】:Oracle Datapump APIOracle 数据泵 API
【发布时间】:2018-06-19 15:07:47
【问题描述】:

我正在重写一个导入和导出 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' 创建语句已成功执行。

我做错了什么?提前致谢!

【问题讨论】:

  • 除了创建 DATAPUMP_DIR,您是否将该目录上的 READ & WRITE 权限授予运行您编写的代码的用户?
  • 是的@Littlefoot
  • SCHEMA_EXPnot a valid metadata filter,它是 SCHEMA_EXPR。我怀疑sc900 也是无效的,应该是大写的,即q'{IN ('SC900')}'
  • @Ben 谢谢,我已经更新了这一行,但是,正如我所写,问题出在上一个 - "DBMS_DATAPUMP.ADD_FILE(h2,'test1.dmp','datapump_dir ')"
  • 除了更改代码之外,您是否重新运行过代码?你得到了完全相同的错误吗?

标签: oracle datapump impdp expdp


【解决方案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;
/

【讨论】:

  • 是的。 ADD_FILE 需要 4 个参数。通常是目录和类型。类型可以指定日志或转储文件。我猜 null 是默认目录,而缺少的类型默认是转储。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2012-12-12
  • 2010-10-06
  • 2023-03-05
相关资源
最近更新 更多