Oracle

DBMS_DATAPUMP 錯誤:由於 API 與目前作業定義不一致,無法執行目前 API

  • June 25, 2018

我正在嘗試impdp使用DBMS_DATAPUMP.

我正在按照Amazon RDS 指南將數據導入 Amazon RDS 上的 Oracle)中描述的步驟進行操作。

我已經成功地將 dmp 複製到了 RDS 實例。

這是我與使用者impdp一起執行的工作:awssys

-- IMPORT DATAPUMP
DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => '20180618_my_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''MYSCHEMA'')');
DBMS_DATAPUMP.START_JOB(hdnl);
END;
/      

我無法理解顯示的錯誤的含義:

ORA-39002: operazione non valida
ORA-06512: a "SYS.DBMS_DATAPUMP", line 6224
ORA-06512: a line 7
39002. 00000 -  "invalid operation"
*Cause:    The current API cannot be executed because of inconsistencies
          between the API and the current definition of the job.
          Subsequent messages supplied by DBMS_DATAPUMP.GET_STATUS
          will further describe the error.
*Action:   Modify the API call to be consistent with the current job or
          redefine the job in a manner that will support the specified API.

這是數據庫的版本:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
"CORE   11.2.0.1.0  Production"
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

這是 Amazon RDS 實例的版本:

Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
"CORE   12.1.0.2.0  Production"
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

**編輯:**我已經添加version=COMPATIBLEexpdp命令和DBMS_DATAPUMP選項,但錯誤仍然存在。

expdp system@source_db version=COMPATIBLE dumpfile=20180618_my.dmp logfile=20180618_my.log directory=DATA_PUMP_DIR CONSISTENT=Y  SCHEMAS=MYSCHEMA,MYSCHEMA2,MYSCHEMA3,MYSCHEMA4

經過多次嘗試,我發現了這種方式:

  1. expdp 使用version=11.2參數集執行。
  2. 使用 dmp 複製DBMS_FILE_TRANSFER.PUT_FILE到 RDS 實例
  3. 使用11.2 機器impdp 上的參數集執行。version=11.2

這導致:

Connected to: Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
ORA-39002: invalid operation
ORA-39068: invalid master table data in row with PROCESS_ORDER=-1
ORA-01403: no data found

以下 ORACLE 支持**IMPDP 引發 ORA-39068: Invalid Master Table Data In Row With PROCESS_ORDER=-1 And ORA-1403 (Doc ID 1556555.1)**我成功刪除了DUAL多餘的。

SELECT owner, object_name, object_type, status
FROM dba_objects
WHERE object_name = 'DUAL'
AND OBJECT_TYPE = 'TABLE';

OWNER      OBJECT_NAME OBJECT_TYPE STATUS
---------- ----------- ----------- -------------
SYS        DUAL        TABLE       VALID
AWSSYS     DUAL        TABLE       VALID

DROP TABLE AWSSYS.DUAL;

通過重複步驟 3impdp現在可以正常工作。

您的版本在源和目標之間有所不同。

hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null, version=>'COMPATIBLE');

哦,壞消息:expdp 也需要這個。

引用自:https://dba.stackexchange.com/questions/209911