2010-08-15 101 views
2

我正在嘗試爲表空間(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 

回答

0

試試這個:

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

1

看起來你的錯誤發生在第一次ADDFILE調用上。

試着讓你的目錄引用大寫:目錄=>「DPUMP_DIR」

1

有許多的原因,這可能會失敗:

  1. 要寫入的文件(courses.dmp)確實已存在。 Oracle 將不會覆蓋該文件。 (是的,錯誤信息很蹩腳)
  2. 操作系統目錄/mydata/data確實不是存在。
  3. /mydata/data存在,但Oracle沒有訪問該目錄
  4. 以上都不是必要 的權利,但運行該腳本的Oracle用戶沒有 上dpump_dir
授予 read, write

如果這些要點沒有幫助,你可能會先打開(add_file)的* .log文件,,然後 * .dmp文件。希望Oracle能夠在* .log文件中寫入一些有意義的東西。