首页 > 解决方案 > 在 oracle 12g 中使用 DBMS_DATAPUMP 导入 o​​racle 转储时出错

问题描述

我一直在尝试将转储文件导入 AWS 中的 RDS 下的 Oracle 12g,并且一直低于错误,我无法弄清楚发生了什么。非常感谢任何帮助或指示。

这是我想要做的。

1)我.dat从客户那里得到了一个转储文件(不确定他们是如何从 oracle 导出这个转储的),我的目标是将它导入 AWS oracle RDS 实例。

2) 根据如何将 Oracle 转储文件传输到 AWS RDS 实例?

我创建了新的 EC2 实例并安装了 Oracle Express 版本,然后将 .dat 文件复制到 DATA_PUMP_DIR 目录 ( /u01/app/oracle/admin/XE/dpdump/)。

3) 创建到 AWS oracle RDS 实例的数据库链接,并能够使用DBMS_FILE_TRANSFER.PUT_FILE.

4) 我可以在 oracle rds 实例中看到 DATA_PUMP_DIR 路径下的文件。

到目前为止,一切都很好。

5) 现在,我正在尝试使用以下过程将转储文件导入 RDS

DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'sample.dat', directory => 'DATA_PUMP_DIR');
DBMS_DATAPUMP.START_JOB(hdnl);
END;
/  

我一直低于错误

DECLARE
*
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 4087
ORA-06512: at "SYS.DBMS_DATAPUMP", line 4338
ORA-06512: at line 5

我知道错误指向了这条线DBMS_DATAPUMP.ADD_FILE(),但我无法弄清楚这里出了什么问题。

我尝试了各种导入选项,但没有任何帮助。我已经创建了表空间并确保用户具有正确的权限。

非常感谢任何指针。

标签: oracleamazon-rds

解决方案


1) 使用 Amazon RDS 主用户账户连接到 RDS 实例。

2) 运行这个 pl/sql 块

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

/ 

3) 您可以从任何 oracle 客户端开始导入。例如,实例 EC2。

impdp RDS_master_user/password@rds_instance DUMPFILE=sample.dmp   DIRECTORY=DATA_PUMP_DIR parfile=import_parfile

import_parfile

SCHEMAS =SCHEMA_NAME

推荐阅读