Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何排查将 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 for Oracle 数据库实例中的用户权限和角色?
- 如果要在子目录中复制数据,则在使用 rdsadmin 软件包时要明确指定子目录的名称。无法使用 S3_INTEGRATION 选项复制子目录。
解决方法
确保数据库实例对 S3 桶具有所需的访问权限
检查您的数据库实例是否具有 AWS Identity and Access Management(IAM)角色,且该角色具有从 S3 上传和下载的最低权限:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择数据库。
- 选择您要查看的数据库实例。
- 选择连接和安全选项卡。
- 向下滚动到管理 IAM 角色部分,查看您是否拥有具有以下权限的活跃 IAM 角色:
S3:ListBucket
S3:PutObject
S3:GetObject
您也可以使用 AWS 命令行界面(AWS CLI)命令 describe-db-instances 来检查数据库实例是否具有以下最低权限的 IAM 角色:
aws rds describe-db-instances \ --db-instance-identifier example-db-instance \ --query 'DBInstances[*].[AssociatedRoles[*]]'
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
检查 IAM 角色是否存在后,根据您的调查发现执行以下任一操作:
- 如果 IAM 角色存在,但没有这些最低权限,请修改角色以包含这些权限。
- 如果您没有具有所需权限的 IAM 角色,请创建一个 IAM policy。向该策略授权,允许其将文件从 S3 桶传输到 Amazon RDS。创建 IAM policy 时,请务必为桶添加桶级别权限,为对象添加对象级别权限。
如果您在桶权限方面仍然存在问题,请修改 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 权限导致。解决问题后,根据需要调整自定义权限。
若要将文件上传到 S3 中的特定文件夹,请在 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序中使用 p_s3_prefix 参数。在上传文件之前,请确保您拥有所需的权限。
例如,若要将文件上传到 S3 桶 example-bucket 的 example-folder 文件夹,请附加以下 IAM policy:
{ "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 控制台。
- 在导航窗格中,选择数据库。
- 选择您要查看的数据库实例。
- 选择配置选项卡。
- 请注意选项组参数。
如果此选项组未处于同步状态,而您在这时添加 S3_INTEGRATION 选项,那么该选项将无法成功添加。因此,请确保选项组处于同步状态。
若要检查此选项组是否处于同步状态,请运行以下 AWS CLI 命令:
aws rds describe-db-instances \ --db-instance-identifier example-db-instance \ --query 'DBInstances[*].[OptionGroupMemberships[*]]'
如果选项组未处于同步状态,请选择数据库的日志和事件选项卡,然后向下滚动到近期事件部分。找出阻止选项组同步的组件,然后将其从数据库中删除。
如果选项组处于同步状态,请检查其中是否包含 S3_INTEGRATION 选项。有关详细信息,请参阅列出选项组的选项和选项设置。如果选项组中未包含 S3_INTEGRATION 选项,则添加该选项。有关更多信息,请参阅添加 Amazon S3 集成选项。
**注意:**如果未将 S3_INTEGRATION 选项添加到您的数据库实例,则会收到错误 ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3":标识符无效"。此错误表示未在数据库实例上创建所需的上传和下载过程。
向 Amazon RDS 添加 S3_INTEGRATION 选项不会导致停机。如果要使用立即应用选项,请确保没有待处理的维护操作。如果有任何待处理的操作,则这些操作将通过 Amazon S3 集成生效。有关详细信息,请参阅维护数据库实例。
确保您只能从用户创建的 Oracle 目录对象或 DATA_PUMP_DIR 目录上传/下载文件
无法直接在数据库实例中访问 S3 文件。若要访问这些文件,必须将文件复制到 RDS 主机的目录中才能对其进行访问。若要将文件从数据库实例上传或下载到 S3 桶,请完成以下步骤:
- 若要将 Amazon RDS 中的导出文件复制到 S3,请先创建转储文件。为此,请在 DATA_DUMP_DIR 或自定义目录中使用 expdp 命令或 dbms_datapump API。然后,使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序将文件上传到 S3。有关此程序的参数和上传文件的示例查询的信息,请参阅将文件从 Oracle 数据库实例上传到 Amazon S3 桶。
- 使用 rdsadmin. rdsadmin_s3_tasks.download_from_s3 程序将文件从 S3 桶下载到 DATA_PUMP_DIR 文件夹或任何用户创建的目录。有关此程序的参数和下载文件示例查询的信息,请参阅将文件从 Amazon S3 桶下载到 Oracle 数据库实例。
若要监控文件传输的状态,请查看运行该程序以上传或下载 rdsadmin 包时生成的日志:
- 打开 Amazon RDS 控制台。
- 在导航窗格中,选择数据库。
- 选择要查看其日志的数据库实例。
- 选择日志和事件选项卡。
- 在日志部分下,在搜索筛选条件中输入该程序返回的任务 ID。
- 选择返回的文件。
- 选择监视以查看日志。
-或-
选择下载以下载日志。
您也可以运行以下命令来读取在上传或下载过程中生成的日志文件:
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));
**注意:**将 task-id 替换为该程序返回的任务 ID。
相关信息

相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前