web-dev-qa-db-ja.com

DBMS_DATAPUMPエラー:APIとジョブの現在の定義の間に不整合があるため、現在のAPIを実行できません

DBMS_DATAPUMPを使用して、Amazon RDS Oracleインスタンスでimpdpを実行しようとしています。

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.

これはsourceDBのバージョンです。

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

EDIT:expdpコマンドとversion=COMPATIBLEオプションの両方に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
sgargel

多くの試みの後、私はこの方法を見つけました:

  1. version=11.2パラメータを設定してexpdpを実行しています。
  2. DMPをDBMS_FILE_TRANSFER.PUT_FILEでRDSインスタンスにコピーします
  3. 11.2マシンからversion=11.2パラメータを設定してimpdpを実行します。

これは〜をひき起こす:

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を上げる:PROCESS_ORDER = -1および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;

手順3を繰り返すことにより、impdpは問題なく動作するようになりました。

1
sgargel

ソースと宛先でバージョンが異なります。

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

ああ、悪いニュース:expdpにもこれが必要です。

1
Gerard H. Pille