跳至内容

如何对 Amazon RDS for Oracle 与 Amazon S3 集成时出现的问题进行故障排除?

3 分钟阅读
0

我想对 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 上传和下载的最低权限。完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择要查看的数据库实例。
  4. 选择 Connectivity & security(连接和安全)选项卡。
  5. 向下滚动到 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-bucketexample-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 数据库实例上是否附加了选项组,请完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择您要检查的数据库实例。
  4. 选择 Configuration(配置)选项卡。
  5. 请注意 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 存储桶,请完成以下步骤:

  1. 使用 expdp 命令、DATA_DUMP_DIR 中的 dbms_datapump API 或自定义目录将 Amazon RDS 中的导出文件复制到 Amazon S3。务必要创建转储文件。
  2. 使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序将文件上传到 S3。有关更多信息,请参阅将文件从 RDS for Oracle 数据库实例上传到 Amazon S3 存储桶
  3. 使用 rdsadmin. rdsadmin_s3_tasks.download_from_s3 程序将文件从 S3 存储桶下载到 DATA_PUMP_DIR 文件夹或用户创建的目录。有关更多信息,请参阅将文件从 Amazon S3 存储桶下载到 Oracle 数据库实例

查看运行 rdsadmin 包的上传或下载程序时生成的日志,以监控文件传输的状态。要查看这些日志,请完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择您要查看的数据库实例。
  4. 选择 Logs & events(日志和事件)选项卡。
  5. Logs(日志)部分下,在搜索筛选条件中输入该程序返回的任务 ID。
  6. 选择返回的文件。
  7. 选择 Watch(监视)以查看日志。
    -or-
    选择 Download(下载)以下载日志。

要读取在上传/下载过程中生成的日志文件,请运行以下命令:

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

**注意:**务必将 task-id 替换为该程序返回的任务 ID。

相关信息

Amazon S3 集成

我的 Amazon RDS for Oracle 数据库实例的存储使用量为何超出预期?