如何使用 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。
有几种方法可以解决这个问题。
第一个选项。
- 在EC2上安装Oracle XE版本的免费数据库版本
实例(非常简单快速)
- 将模式从 RDS 实例导出到 DATA_PUMP_DIR
目录。在 EC2 上使用
DBMS_DATAPUMP
包或 运行 expdp user/pass@rds
创建转储文件。
- 在 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
将转储文件从 RDS 实例复制到 EC2 上使用的 Oracle XE DB
DBMS_FILE_TRANSFER.PUT_FILE
通过数据库 link
将文件从 EC2 实例上的 DATA_PUMP_DIR
目录 Oracle XE 复制到 S3。
第二个选项。
使用过时的实用程序 exp
导出。它对某些类型的数据的导出有限制,而且速度较慢。
- 运行
exp user/password@rds
在 EC2 实例上。
- 将文件从 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
第三个选项我正在用
查看 alexandria-plsql-utils 项目,尤其是:amazon_aws_auth_pkg
、amazon_aws_s3_pkg
和 ftp_util_pkg
包。
安装所需的包和依赖项。
进行转储,然后使用下面的示例代码,您可以将文件从 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
看来第一个post来的有点早。但是无论如何,这个 post 列出了更多好的解决方案,例如数据库 link.
我们有 RDS (Oracle) 实例,我需要将特定架构导出到转储文件中。导出工程并将转储文件复制到 DATA_PUMP_DIR。问题是 RDS 没有文件目录访问权限。
我需要在 S3 上导出 DMP 文件或复制到另一个 EC2 实例。
文章:LINK讨论了在两个 RDS 实例之间复制数据转储文件,但不复制到 S3 或 EC2。
有几种方法可以解决这个问题。 第一个选项。
- 在EC2上安装Oracle XE版本的免费数据库版本 实例(非常简单快速)
- 将模式从 RDS 实例导出到 DATA_PUMP_DIR
目录。在 EC2 上使用
DBMS_DATAPUMP
包或 运行expdp user/pass@rds
创建转储文件。 - 在 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
将转储文件从 RDS 实例复制到 EC2 上使用的 Oracle XE DB
DBMS_FILE_TRANSFER.PUT_FILE
通过数据库 link将文件从 EC2 实例上的
DATA_PUMP_DIR
目录 Oracle XE 复制到 S3。
第二个选项。
使用过时的实用程序 exp
导出。它对某些类型的数据的导出有限制,而且速度较慢。
- 运行
exp user/password@rds
在 EC2 实例上。 - 将文件从 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
第三个选项我正在用
查看 alexandria-plsql-utils 项目,尤其是:
amazon_aws_auth_pkg
、amazon_aws_s3_pkg
和ftp_util_pkg
包。安装所需的包和依赖项。
进行转储,然后使用下面的示例代码,您可以将文件从 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
看来第一个post来的有点早。但是无论如何,这个 post 列出了更多好的解决方案,例如数据库 link.