Oracle数据泵导出脚本失败

问题描述:

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

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 

试试这个:

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

“我仍然得到同样的错误信息 虽然”

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

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

+0

嗨,谢谢你的回应。尽管我仍然收到相同的错误消息 – relyt 2010-08-15 23:16:51

看起来你的错误发生在第一次ADDFILE调用上。

试着让你的目录引用大写:目录=>“DPUMP_DIR”

有许多的原因,这可能会失败:

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

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