Oracle Data Pump导出脚本失败

时间:2010-08-15 17:42:12

标签: oracle export datapump

我正在尝试为表空间(COURSE)上的元数据执行数据泵导出。我是在正确的轨道上吗?我的数据泵目录创建为:

CREATE DIRECTORY dpump_dir AS '/mydata/data';

请记住,我是初学者。这可能是也可能不是解决这个问题的最好方法,但我想尝试让它发挥作用。非常感谢。

declare
      dp_handle       number;
  begin
      dp_handle := dbms_datapump.open(
      operation   => 'EXPORT',
      job_mode    => 'TABLESPACE');

    dbms_datapump.add_file(
      handle    =>  dp_handle,
      filename  => 'courses.dmp',
      directory => 'dpump_dir');

    dbms_datapump.add_file(
      handle    => dp_handle,
      filename  => 'courses.log',
      directory => 'dpump_dir',
      filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);

    dbms_datapump.metadata_filter(      
      handle => dp_handle,
      name   => 'TABLESPACE_EXPR',
      value  => '''COURSE''');

    dbms_datapump.start_job(dp_handle);

    dbms_datapump.detach(dp_handle);
  end;
  /    

ERROR at line 1:
ORA-39001: invalid argument value
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.DBMS_DATAPUMP", line 2926
ORA-06512: at "SYS.DBMS_DATAPUMP", line 3162
ORA-06512: at line 8

3 个答案:

答案 0 :(得分:2)

为什么会失败有很多原因:

  1. 您要编写的文件(courses.dmp已经存在。神谕 不会覆盖该文件。 (是的,错误信息非常蹩脚)
  2. 操作系统目录/mydata/data 存在。
  3. /mydata/data 确实存在,但Oracle没有必要 访问目录的权利
  4. 以上都不是,但运行脚本的Oracle用户不是 已在read, write
  5. 上授予dpump_dir

    如果这些要点没有帮助,您可以先打开(add_file)* .log文件,然后 * .dmp文件。希望Oracle能够在* .log文件中写一些有意义的东西。

答案 1 :(得分:1)

在第一次ADDFILE调用中出现错误。

尝试将目录引用设为大写:directory => 'DPUMP_DIR'

答案 2 :(得分:0)

试试这个:

dbms_datapump.metadata_filter(      
      handle => dp_handle,
      name   => 'TABLESPACE_EXPR',
      value  => '=''COURSE''');

  

“我仍然收到相同的错误消息   虽然“

嗯....远程调试其他人的代码是SO最不有趣的方面之一。无论如何,让我们再猜一遍。

您是否有一个名为/mydata/data的操作系统目录,Oracle具有读写权限? CREATE DIRECTORY语句只创建一个指针,它不会创建底层的OS目录。