Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon S3 集成

您可以在 Amazon RDS for Oracle DB 实例和 Amazon S3 存储桶之间传输文件。您可以使用 Amazon S3 与 Oracle 集成的功能,例如 Data Pump。例如,您可以将 Data Pump 文件从 Amazon S3 下载到数据库实例主机。

注意

数据库实例和 Amazon S3 存储桶必须位于同一 AWS 区域。

Amazon RDS Oracle TDE 与 Amazon S3 集成的先决条件

若要让 Amazon RDS for Oracle 与 Amazon S3 集成,Amazon RDS 数据库实例必须可以访问 Amazon S3 存储桶。为此,您要创建一个 AWS Identity and Access Management (IAM) 策略和 IAM 角色。

注意

若要将角色添加到数据库实例,数据库实例的状态必须为 available

控制台

创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶

  1. 打开 IAM 管理控制台

  2. 在导航窗格中,选择 Policies

  3. 选择 Create policy

  4. Visual editor (可视化编辑器) 选项卡上,选择 Choose a service (选择服务),然后选择 S3

  5. 对于 Actions (操作),选择 Expand all (全部展开),然后选择 IAM 策略所需的存储桶权限和对象权限。

    根据所需的访问类型,在策略中包括适合的操作:

    • GetObject – 从 Amazon S3 存储桶向 Amazon RDS 传输文件所必需的。

    • ListBucket – 从 Amazon S3 存储桶向 Amazon RDS 传输文件所必需的。

    • PutObject – 从 Amazon RDS 向 Amazon S3 存储桶传输文件所必需的。

    对象权限是 Amazon S3 中的对象操作的权限,需要为存储桶中的对象而不是存储桶本身授予这些权限。有关 Amazon S3 中的对象操作权限的更多信息,请参阅对象操作的权限

  6. 选择 Resources (资源),然后为 bucket (存储桶) 选择 Add ARN (添加 ARN)

  7. Add ARN (添加 ARN) 对话框中,提供有关资源的详细信息,然后选择 Add (添加)

    指定要允许访问的 Amazon S3 存储桶。例如,如果您希望允许 Amazon RDS 访问名为 example-bucket 的 Amazon S3 存储桶,请将 Amazon 资源名称 (ARN) 值设置为 arn:aws-cn:s3:::example-bucket

  8. 如果列出了对象资源,请为对象选择Add ARN (添加 ARN)

  9. 添加 ARN 对话框中,提供有关资源的详细信息。

    对于 Amazon S3 存储桶,请指定要允许访问的 Amazon S3 存储桶。对于对象,您可以选择 Any (任意),以便为存储桶中的任何对象授予权限。

    注意

    您可以将 Amazon 资源名称 (ARN) 设置为更具体的 ARN 值,以允许 Amazon RDS 仅访问 Amazon S3 存储桶中的特定文件或文件夹。有关如何为 Amazon S3 定义访问策略的更多信息,请参阅管理您的 Amazon S3 资源的访问权限

  10. (可选)选择 Add additional permissions (添加额外的权限) 以将另一个 Amazon S3 存储桶添加到策略中,然后为该存储桶重复前面的步骤。

    注意

    您可以重复该操作,以便在希望 Amazon RDS 访问的每个 Amazon S3 存储桶的策略中添加相应的存储桶权限语句。您也可以根据需要授予访问 Amazon S3 中所有存储桶和对象的权限。

  11. 选择 Review policy (查看策略)

  12. 对于 Name (名称),请为您的 IAM 策略输入名称,例如 rds-s3-integration-policy。在创建 IAM 角色与您的数据库实例关联时,需要使用此名称。您也可以添加可选的 Description (描述) 值。

  13. 选择 Create policy (创建策略)

创建 IAM 角色以允许 Amazon RDS 访问 Amazon S3 存储桶

  1. 在导航窗格中,选择 Roles (角色)

  2. 选择 Create role (创建角色)

  3. 对于 AWS Service (AWS 服务),选择 RDS

  4. 对于 Select your use case (选择您的用例),选择 RDS – Add Role to Database (RDS - 将角色添加到数据库)

  5. 选择 Next: Permissions (下一步: 权限)

  6. 对于 Attach permissions policies (附上权限策略) 下面的 Search (搜索),请输入您创建的 IAM 策略的名称,然后当策略在列表中显示时选择它。

  7. 选择 Next: Tags (下一步: 标签),然后选择 Next: Review (下一步: 审核)

  8. Role name (角色名称) 设置为您的 IAM 角色的名称,例如,rds-s3-integration-role。您也可以添加可选的 Role description (角色描述) 值。

  9. 选择 Create role (创建角色)

将您的 IAM 角色与数据库实例关联

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 选择 Oracle 数据库实例名称以显示其详细信息。

  3. Connectivity & security (连接性和安全性) 选项卡上的 Manage IAM roles (管理 IAM 角色) 部分中,在 Add IAM roles to this instance (向此实例添加 IAM 角色) 下选择要添加的角色。

  4. 对于 Feature (功能),选择 S3_INTEGRATION

    
                            添加 S3_INTEGRATION 角色
  5. 选择 Add role (添加角色)

AWS CLI

向 Amazon RDS 授予对 Amazon S3 存储桶的访问权限

  1. 创建 AWS Identity and Access Management (IAM) 策略,向 Amazon RDS 授予对 Amazon S3 存储桶的访问权限。

    根据所需的访问类型,在策略中包括适合的操作:

    • GetObject – 从 Amazon S3 存储桶向 Amazon RDS 传输文件所必需的。

    • ListBucket – 从 Amazon S3 存储桶向 Amazon RDS 传输文件所必需的。

    • PutObject – 从 Amazon RDS 向 Amazon S3 存储桶传输文件所必需的。

    以下 AWS CLI 命令使用这些选项创建名为 rds-s3-integration-policy 的 IAM 策略。它授予访问名为 your-s3-bucket-arn 的存储桶的权限。

    针对 Linux、OS X 或 Unix:

    aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*" ] } ] }'

    对于 Windows:

    aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::your-s3-bucket-arn", "arn:aws:s3:::your-s3-bucket-arn/*" ] } ] }'
  2. 创建策略之后,请记下策略的 Amazon 资源名称 (ARN)。后续步骤需要该 ARN。

  3. 创建一个让 Amazon RDS 可代表您访问 Amazon S3 存储桶的 IAM 角色。

    以下 AWS CLI 命令创建 rds-s3-integration-role 来实现此目的。

    针对 Linux、OS X 或 Unix:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    对于 Windows:

    aws iam create-role ^ --role-name rds-s3-integration-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    有关更多信息,请参阅 IAM 用户指南中的创建向 IAM 用户委派权限的角色

  4. 创建角色之后,记下该角色的 ARN。后续步骤需要该 ARN。

  5. 将您创建的策略附在您创建的角色上。

    以下 AWS CLI 命令将策略附加到名为 rds-s3-integration-role 的角色。

    针对 Linux、OS X 或 Unix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    对于 Windows:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role

    your-policy-arn 替换为您在上一步中记下的策略 ARN。

  6. 将角色添加到 Oracle 数据库实例。

    以下 AWS CLI 命令将角色添加到名为 mydbinstance 的 Oracle 数据库实例。

    针对 Linux、OS X 或 Unix:

    aws rds add-role-to-db-instance \ --db-instance-identifier mydbinstance \ --feature-name S3_INTEGRATION \ --role-arn your-role-arn

    对于 Windows:

    aws rds add-role-to-db-instance ^ --db-instance-identifier mydbinstance ^ --feature-name S3_INTEGRATION ^ --role-arn your-role-arn

    your-role-arn 替换为您在上一步中记下的角色 ARN。必须为 --feature-name 选项指定 S3_INTEGRATION

添加 Amazon S3 集成选项

若要使用 Amazon RDS for Oracle 与 Amazon S3 的集成,您的 Amazon RDS Oracle 数据库实例必须与包括 S3_INTEGRATION 选项的选项组关联。

控制台

为 Amazon S3 集成配置选项组

  1. 创建新选项组或识别现有选项组,然后您可以将 S3_INTEGRATION 选项添加到其中。

    有关创建选项组的信息,请参阅 创建选项组

  2. S3_INTEGRATION 选项添加到该选项组。

    有关向选项组添加选项的信息,请参阅 将选项添加到选项组

  3. 创建新的 Oracle 数据库实例并将选项组与其关联,或者修改要将选项组与其关联的 Oracle 数据库实例。

    有关创建 Oracle 数据库实例的信息,请参阅 创建运行 Oracle 数据库引擎的数据库实例

    有关修改 Oracle 数据库实例的信息,请参阅 修改运行 Oracle 数据库引擎的数据库实例

AWS CLI

为 Amazon S3 集成配置选项组

  1. 创建新选项组或识别现有选项组,然后您可以将 S3_INTEGRATION 选项添加到其中。

    有关创建选项组的信息,请参阅 创建选项组

  2. S3_INTEGRATION 选项添加到该选项组。

    例如,以下 AWS CLI 命令将 S3_INTEGRATION 选项添加到名为 myoptiongroup 的选项组。

    针对 Linux、OS X 或 Unix:

    aws rds add-option-to-option-group \ --option-group-name myoptiongroup \ --options OptionName=S3_INTEGRATION,OptionVersion=1.0

    对于 Windows:

    aws rds add-option-to-option-group ^ --option-group-name myoptiongroup ^ --options OptionName=S3_INTEGRATION,OptionVersion=1.0
  3. 创建新的 Oracle 数据库实例并将选项组与其关联,或者修改要将选项组与其关联的 Oracle 数据库实例。

    有关创建 Oracle 数据库实例的信息,请参阅 创建运行 Oracle 数据库引擎的数据库实例

    有关修改 Oracle 数据库实例的信息,请参阅 修改运行 Oracle 数据库引擎的数据库实例

在 Amazon RDS for Oracle 和 Amazon S3 存储桶之间传输文件

您可以使用 Amazon RDS 过程将文件从 Oracle 数据库实例上传到 Amazon S3 存储桶。您也可以使用 Amazon RDS 过程将文件从 Amazon S3 存储桶下载到 Oracle 数据库实例。

将文件从 Oracle 数据库实例上传到 Amazon S3 存储桶

若要将文件从 Oracle 数据库实例上传到 Amazon RDS 存储桶,请使用 Amazon S3 过程 rdsadmin.rdsadmin_s3_tasks.upload_to_s3。例如,您可以上传 Oracle Recovery Manager (RMAN) 备份文件。有关执行 RMAN 备份的更多信息,请参阅 Oracle 数据库实例的 Recovery Manager (RMAN) 数据库管理员常见任务

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 过程具有以下参数。

参数名称 数据类型 默认值 是否必需 描述

p_bucket_name

VARCHAR2

必需

要将文件上传到其中的 Amazon S3 存储桶的名称。

p_directory_name

VARCHAR2

必需

要从其中上传文件的 Oracle 目录对象的名称。该目录可以是用户创建的任何目录对象或 Data Pump 目录,例如 DATA_PUMP_DIR

注意

您只可以从指定目录上传文件。您不能上传指定目录的子目录中的文件。

p_s3_prefix

VARCHAR2

必需

待上传文件的 Amazon S3 文件名前缀。如果前缀为空,则将所有文件上传到指定 Amazon S3 存储桶的最顶层,且不为文件名添加前缀。

例如,如果前缀为 folder_1/oradb,则文件上传到 folder_1。在这个例子中,oradb 前缀添加到每个文件。

p_prefix

VARCHAR2

必需

一个文件名前缀,文件名必须与其匹配才会上传。如果前缀为空,则将所有文件上传到指定目录。

下面的示例将 DATA_PUMP_DIR 目录中的所有文件上传到名为 mys3bucket 的 Amazon S3 存储桶。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

下面的示例将 DATA_PUMP_DIR 目录中前缀为 db 的所有文件上传到名为 mys3bucket 的 Amazon S3 存储桶。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => 'db', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

下面的示例将 DATA_PUMP_DIR 目录中的所有文件上传到名为 mys3bucket 的 Amazon S3 存储桶。文件上传到 dbfiles 文件夹。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => 'dbfiles/', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

下面的示例将 DATA_PUMP_DIR 目录中的所有文件上传到名为 mys3bucket 的 Amazon S3 存储桶。文件上传到 dbfiles 文件夹,且 ora 添加到每个文件名的开头。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_prefix => '', p_s3_prefix => 'dbfiles/ora', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

在每个示例中,SELECT 语句返回 VARCHAR2 数据类型的任务 ID。

将文件从 Amazon S3 存储桶下载到 Oracle 数据库实例

若要将文件从 Amazon S3 存储桶下载到 Oracle 数据库实例,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_s3_tasks.download_from_s3rdsadmin.rdsadmin_s3_tasks.download_from_s3 过程具有以下参数。

参数名称 数据类型 默认值 是否必需 描述

p_bucket_name

VARCHAR2

必需

要从中下载文件的 Amazon S3 存储桶的名称。

p_directory_name

VARCHAR2

必需

要将文件下载到其中的 Oracle 目录对象的名称。该目录可以是用户创建的任何目录对象或 Data Pump 目录,例如 DATA_PUMP_DIR

p_s3_prefix

VARCHAR2

''

可选

一个文件名前缀,文件名必须与其匹配才会下载。如果前缀为空,则下载指定 Amazon S3 存储桶中的所有文件。

该过程仅从匹配前缀的第一级文件夹下载 Amazon S3 对象。匹配指定前缀的嵌套目录结构不会下载。例如,假定 Amazon S3 存储桶拥有文件夹结构 folder_1/folder_2/folder_3。另外再假设您指定 'folder_1/folder_2' 前缀。在这种情况下,只会下载 folder_2 中的文件,不会下载 folder_1folder_3 中的文件。

下面的示例将名为 mys3bucket 的 Amazon S3 存储桶中的所有文件下载到 DATA_PUMP_DIR 目录。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

下面的示例将名为 mys3bucket 的 Amazon S3 存储桶中前缀为 db 的所有文件下载到 DATA_PUMP_DIR 目录。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_s3_prefix => 'db', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

在每个示例中,SELECT 语句返回 VARCHAR2 数据类型的任务 ID。

下面的示例将名为 mys3bucket 的 Amazon S3 存储桶中的 myfolder/ 文件夹中的所有文件下载到 DATA_PUMP_DIR 目录。使用前缀参数设置来指定 Amazon S3 文件夹。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_s3_prefix => 'myfolder/', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

在每个示例中,SELECT 语句返回 VARCHAR2 数据类型的任务 ID。

注意

您可以使用 UTL_FILE.FREMOVE Oracle 过程从目录中删除文件。有关更多信息,请参阅 Oracle 文档中的 FREMOVE 过程

监控文件传输的状态

文件传输任务开始和结束时会发布 Amazon RDS 事件。有关查看事件的信息,请参阅 查看 Amazon RDS 事件

您可以查看 bdump 文件中的持续任务的状态。bdump 文件位于 /rdsdbdata/log/trace 目录下。每个 bdump 文件名称格式如下。

dbtask-task-id.log

task-id 替换为您想要监控的任务的 ID。

您可以使用 rdsadmin.rds_file_util.read_text_file 存储过程查看 bdump 文件的内容。例如,以下查询将返回 dbtask-1546988886389-2444.log bdump 文件的内容。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1546988886389-2444.log'));

删除 Amazon S3 集成选项

您可以从数据库实例中删除 Amazon S3 集成选项。

要从数据库实例中删除 Amazon S3 集成选项,请执行下列操作之一:

  • 要从多个数据库实例中删除 Amazon S3 集成选项,请从数据库实例所属的选项组中删除 S3_INTEGRATION 选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息,请参阅 从选项组中删除选项

  • 要从单个数据库实例中删除 Amazon S3 集成选项,请修改该数据库实例,并指定不包含 S3_INTEGRATION 选项的另一个选项组。您可以指定默认(空)选项组,或指定其他自定义选项组。有关更多信息,请参阅 修改运行 Oracle 数据库引擎的数据库实例