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
多くの試みの後、私はこの方法を見つけました:
version=11.2
パラメータを設定してexpdp
を実行しています。DBMS_FILE_TRANSFER.PUT_FILE
でRDSインスタンスにコピーします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
は問題なく動作するようになりました。
ソースと宛先でバージョンが異なります。
hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null, version=>'COMPATIBLE');
ああ、悪いニュース:expdpにもこれが必要です。