如何使用 DATA_PUMP 导出到 S3 存储桶?

How to export using DATA_PUMP to S3 bucket?

我们有 RDS (Oracle) 实例,我需要将特定架构导出到转储文件中。导出工程并将转储文件复制到 DATA_PUMP_DIR。问题是 RDS 没有文件目录访问权限。

我需要在 S3 上导出 DMP 文件或复制到另一个 EC2 实例。

文章:LINK讨论了在两个 RDS 实例之间复制数据转储文件,但不复制到 S3 或 EC2。

有几种方法可以解决这个问题。 第一个选项。

  1. 在EC2上安装Oracle XE版本的免费数据库版本 实例(非常简单快速)
  2. 将模式从 RDS 实例导出到 DATA_PUMP_DIR 目录。在 EC2 上使用 DBMS_DATAPUMP 包或 运行 expdp user/pass@rds 创建转储文件。
  3. 在 RDS 数据库和 Oracle XE 之间的 RDS 实例上创建数据库 link 数据库

If you are creating a database link between two DB instances inside the same VPC or peered VPCs the two DB instances should have a valid route between them. Adjusting Database Links for Use with DB Instances in a VPC

  1. 将转储文件从 RDS 实例复制到 EC2 上使用的 Oracle XE DB DBMS_FILE_TRANSFER.PUT_FILE 通过数据库 link

  2. 将文件从 EC2 实例上的 DATA_PUMP_DIR 目录 Oracle XE 复制到 S3。

第二个选项。 使用过时的实用程序 exp 导出。它对某些类型的数据的导出有限制,而且速度较慢。

  1. 运行 exp user/password@rds 在 EC2 实例上。
  2. 将文件从 EC2 实例上的 Oracle XE 目录复制到 S3

Original export is desupported for general use as of Oracle Database 11g. The only supported use of Original Export in 11g is backward migration of XMLType data to a database version 10g release 2 (10.2) or earlier. Therefore, Oracle recommends that you use the new Data Pump Export and Import utilities, except in the following situations which require Original Export and Import: Original Export and Import

第三个选项我正在用

  1. 查看 alexandria-plsql-utils 项目,尤其是:amazon_aws_auth_pkgamazon_aws_s3_pkgftp_util_pkg 包。

  2. 安装所需的包和依赖项。

  3. 进行转储,然后使用下面的示例代码,您可以将文件从 Amazon RDS Oracle 复制到 S3 存储桶中。

    declare
       b_blob blob;
    begin
       b_blob := file_util_pkg.get_blob_from_file ('DATA_PUMP_DIR', 'my_dump.dmp');
       amazon_aws_auth_pkg.init ('aws_key_id','aws_secret', p_gmt_offset => 0);
       amazon_aws_s3_pkg.new_object('my-bucket-name', 'my_dump.dmp', b_blob, 'application/octet-stream');
     end;
    

    `

现在可以直接从 Oracle 数据库访问 S3 存储桶。请查看以下文档:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html

这里是支持的官方消息:https://aws.amazon.com/about-aws/whats-new/2019/02/Amazon-RDS-for-Oracle-Now-Supports-Amazon-S3-Integration/?nc1=h_ls

看来第一个post来的有点早。但是无论如何,这个 post 列出了更多好的解决方案,例如数据库 link.