Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何对 Amazon RDS for Oracle 与 Amazon S3 集成时出现的问题进行故障排除?
我想对 Amazon Relational Database Service (Amazon RDS) for Oracle 与 Amazon Simple Storage Service (Amazon S3) 集成时出现的问题和错误进行故障排除。
简短描述
在 Amazon RDS for Oracle 数据库实例和 Amazon S3 存储桶之间传输文件之前,请检查以下设置条件:
- 数据库实例和 S3 存储桶位于同一 AWS 区域。
- 数据库实例对 S3 存储桶具有所需的访问权限。
- 数据库实例与包含 S3_INTEGRATION 选项的选项组相关联。
- 您只能从 Oracle 目录对象上传文件。此目录可能是用户创建的目录或 DATA_PUMP_DIR 目录。
- 如果您使用用户创建的目录,则执行上传和下载的用户必须对该目录具有所需的权限。有关更多信息,请参阅在 Amazon RDS 上将数据导入 Oracle。
- 如果要在子目录中复制数据,则在使用 rdsadmin 软件包时要明确指定子目录的名称。您无法复制使用 S3_INTEGRATION 选项的子目录。
解决方法
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
确保数据库实例对 S3 存储桶具有所需的访问权限
检查您的数据库实例是否具有 AWS Identity and Access Management (IAM) 角色,且该角色具有从 S3 上传和下载的最低权限。完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库)。
- 选择要查看的数据库实例。
- 选择 Connectivity & security(连接和安全)选项卡。
- 向下滚动到 Manage IAM roles(管理 IAM 角色)部分,查看您是否拥有包含以下权限的活动 IAM 角色
S3:ListBucket
S3:PutObject
S3:GetObject
要检查您的数据库实例是否拥有具有最低权限的 IAM 角色,请运行以下 AWS CLI 命令 describe-db-instances:
aws rds describe-db-instances \--db-instance-identifier example-db-instance \--query 'DBInstances[*].[AssociatedRoles[*]]'
检查 IAM 角色是否存在后,请执行以下操作之一:
- 如果 IAM 角色存在,但没有最低权限,请修改角色以包含这些权限。
- 如果您没有具有所需权限的 IAM 角色,请先创建具有传输文件所需权限的 IAM 策略。接下来,为您的 Amazon RDS for Oracle 数据库实例创建角色,并将您的策略附加到该角色。然后,将您的 IAM 角色与 Amazon RDS for Oracle 数据库实例关联起来。有关更多信息,请参阅 RDS Custom for Oracle 的要求和限制。创建 IAM 策略时,请务必为存储桶添加存储桶级别权限,为对象添加对象级别权限。
如果您在存储桶权限方面仍然存在问题,请修改 IAM 角色以授予对 S3 存储桶的完全访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::example-bucket/*", "arn:aws:s3:::example-bucket" ] } ] }
**重要事项:**对 IAM 角色进行修改以授予完全访问权限,仅用于测试问题是否由 IAM 权限设置不当造成。解决问题后,请将自定义权限恢复到以前的状态。
要将文件上传到 Amazon S3 中的特定文件夹,请在 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序中使用 p_s3_prefix 参数。在上传文件之前,请确保您拥有所需的权限。
例如,要将文件上传到 S3 存储桶 example-bucket 的 example-folder 文件夹,请附加以下 IAM 策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::example-bucket/example-folder/*" ] } ] }
确保数据库实例与包含 S3_INTEGRATION 选项的选项组相关联
要检查您的 RDS 数据库实例上是否附加了选项组,请完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库)。
- 选择您要检查的数据库实例。
- 选择 Configuration(配置)选项卡。
- 请注意 Option groups(选项组)参数。
如果此选项组未处于 in-sync(同步)状态,并且您尝试添加 S3_INTEGRATION 选项,则该选项不会被添加。最佳做法是确保选项组处于 in-sync(同步)状态。
要检查此选项组是否处于 in-sync(同步)状态,请运行以下 AWS CLI 命令:
aws rds describe-db-instances \--db-instance-identifier example-db-instance \ --query 'DBInstances[*].[OptionGroupMemberships[*]]'
如果选项组未处于 in-sync(同步)状态,请选择数据库的 Logs & events(日志和事件)选项卡,然后查看 Recent events(近期事件)部分。确定阻止选项组同步的组件,然后将其从数据库中移除。
如果选项组处于 in-sync(同步)状态,请检查其中是否包含 S3_INTEGRATION 选项。有关更多信息,请参阅列出选项组的选项和选项设置。如果选项组中未包含 S3_INTEGRATION 选项,则添加该选项。有关更多信息,请参阅添加 Amazon S3 集成选项。
**注意:**如果未将 S3\ _INTEGRATION 选项添加到您的数据库实例,则会收到错误 "ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier";"。此错误表示您未在数据库实例上创建所需的上传和下载过程。
向 Amazon RDS 添加 S3_INTEGRATION 选项时,您不会遇到停机的情况。如果您计划使用 Apply Immediately(立即应用)选项,请确保没有待处理的维护操作。如果存在待处理的维护操作,则这些操作将在 S3 集成时一并应用。有关更多信息,请参阅维护数据库实例。
确保您只能从用户创建的 Oracle 目录对象或 DATA_PUMP_DIR 目录上传和下载文件
您无法直接在数据库实例中访问 Amazon S3 文件。若要访问这些文件,必须将文件复制到 Amazon RDS 主机的目录中才能对其进行访问。若要将文件从数据库实例上传和下载到 S3 存储桶,请完成以下步骤:
- 使用 expdp 命令、DATA_DUMP_DIR 中的 dbms_datapump API 或自定义目录将 Amazon RDS 中的导出文件复制到 Amazon S3。务必要创建转储文件。
- 使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序将文件上传到 S3。有关更多信息,请参阅将文件从 RDS for Oracle 数据库实例上传到 Amazon S3 存储桶。
- 使用 rdsadmin. rdsadmin_s3_tasks.download_from_s3 程序将文件从 S3 存储桶下载到 DATA_PUMP_DIR 文件夹或用户创建的目录。有关更多信息,请参阅将文件从 Amazon S3 存储桶下载到 Oracle 数据库实例。
查看运行 rdsadmin 包的上传或下载程序时生成的日志,以监控文件传输的状态。要查看这些日志,请完成以下步骤:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择 Databases(数据库)。
- 选择您要查看的数据库实例。
- 选择 Logs & events(日志和事件)选项卡。
- 在 Logs(日志)部分下,在搜索筛选条件中输入该程序返回的任务 ID。
- 选择返回的文件。
- 选择 Watch(监视)以查看日志。
-or-
选择 Download(下载)以下载日志。
要读取在上传/下载过程中生成的日志文件,请运行以下命令:
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));
**注意:**务必将 task-id 替换为该程序返回的任务 ID。

