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

时间:2018-01-22 09:18:33

标签: oracle amazon-web-services amazon-ec2 oracle11g amazon-rds

我在EC2实例上有一个现有的.dmp文件,可以访问在AWS上运行Oracle 11g的RDS实例。

我已阅读Importing Data in AWS RDS,似乎AWS不支持此类直接转移。

确实需要Source Oracle DB,您必须创建/导出.dmp文件,然后通过建立数据库链接将其传输到destination RDS instance

我的问题是,有没有办法将现有的.dmp文件传输/导入到RDS实例上的DATA_DUMP_DIR

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

禁止对RDS实例进行文件访问。 仅通过db_link访问DATA_PUMP_DIR目录并使用DBMS_FILE_TRANSFER包。

  • 选项1

您可以使用EC2实例上的旧exp实用程序导出数据,此实用程序还会创建导出文件.dmp,但格式不同。格式与impdp expdp不兼容。 exp imp实用程序可以通过SQL * NET网络作为客户端 - 服务器连接到目标数据库。该实用程序已过时且性能较低。运行实用程序dmp时,不会在服务器上创建expdp文件。 dmp文件写在运行实用程序exp的一侧(服务器或客户端)

$ORACLE_HOME/bin/exp parfile=parfile_exp_full FILE=export.dmp LOG=export.log

然后使用imp到RDS实例进行数据导入。

$ORACLE_HOME/bin/imp parfile=parfile_imp_full FILE=export.dmp LOG=import.log
  • 选项2

您可以使用实用程序$ORACLE_HOME/bin/sqlplus -s user/pass@ec2 @csv2.sql将数据导出为CSV文件。

set heading off
set termout OFF
SET FEEDBACK OFF
SET TAB OFF
set pause off
set verify off
SET UNDERLINE OFF
set trimspool on
set echo off
set linesize 1000
set pagesize 0
set wrap off
spool test2.csv
select code||','||name||','||code_rail from alexs.all_station;
spool off
exit;

然后使用实用程序sqlldr将数据导入RDS实例。

答案 1 :(得分:1)

最终,我不得不启动另一个AWS实例,在其上安装Oracle XE,然后将我的转储文件放在DATA_PUMP_DIR&然后按照AWS RDS Data Import指南进行操作。

令人讨厌的是,没有其他方法可以做到这一点。没有SSH访问RDS实例只是加起来! 此外,AWS Doc不清楚详情。

答案 2 :(得分:0)

自2019年2月起,您现在可以导入i个文件from S3 buckets

这是我花了数年时间阅读AWS文档后采取的步骤。

  1. 将所有转储文件放入S3中​​(这超出了此答案的范围:D)
  2. Create an RDS option group用于S3集成
  3. 将选项.dmp添加到组中(选择组,然后单击S3_INTEGRATION
  4. Create an IAM role授权访问S3
  5. 将该角色附加到RDS实例
  6. Connect to the instance使用ADD OPTION
  7. 按照AWS RDS docs中所述的sqlplus过程进行操作(直接转到步骤#4)

    • import替换为存储桶的实际名称
    • 如果文件位于特定目录键下,则添加参数mys3bucket
    • p_s3_prefix保留不变,除非您要覆盖默认位置。

    要跟踪任务进度,请输入

    DATA_PUMP_DIR

    用您的实际任务ID代替SELECT text FROM table( rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-YOUR_TASK_ID.log') );:)

  8. 通过键入以下内容来检查YOUR_TASK_ID的内容:

    DATA_PUMP_DIR

    这应该列出您位于S3中的所有select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime;文件...