如何對整合 Amazon RDS for Oracle 與 Amazon S3 時發生的問題進行疑難排解?

上次更新日期︰2021 年 10 月 29 日

我要對整合 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 目錄。
  • 如果您正在使用使用者建立的目錄,則執行上傳和下載的使用者必須具有目錄上所需的讀取和寫入權限。如需詳細資訊,請參閱授予來源資料庫上的使用者權限
  • 如果您正在複製子目錄中的資料,請在使用 rdsadmin 套件時明確指定子目錄的名稱。您無法使用 S3_INTEGRATION 選項複製子目錄。

解決方案

確定資料庫執行個體具有對 S3 儲存貯體的必要存取權

若要檢查您的資料庫執行個體是否具有從 S3 上傳和下載最低權限的 AWS Identity and Access Management (IAM) 角色,請執行下列操作:

  1. 開啟 Amazon RDS 主控台
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選擇您要檢查的資料庫執行個體。
  4. 選擇 Connectivity & security (連線與安全) 索引標籤。
  5. 向下捲動至 Manage IAM roles (管理 IAM 角色) 區段,檢查是否具有下列權限的 active (作用中) IAM 角色:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

您還可以使用 AWS Command Line Interface (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 角色,則請建立具有將檔案從 S3 儲存貯體傳輸至 Amazon RDS 所需許可的 IAM 政策。如需詳細資訊,請參閱Amazon RDS for Oracle 與 Amazon S3 整合的必要條件。建立 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 權限導致。解決問題後,視需要調整自訂權限。

若要將檔案上傳至 S3 中的特定資料夾,請使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序中的 p_s3_prefix 參數。上傳檔案之前,請確定您擁有必要的許可。

例如,若要將檔案上傳至 example-folder 資料夾,以及 S3 儲存貯體 example-bucket,請連接下列 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_INTERATION 選項的選項群組關聯

若要檢查是否有連接至 RDS 資料庫執行個體的選項群組,請執行下列操作:

  1. 開啟 Amazon RDS 主控台
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選擇您要檢查的資料庫執行個體。
  4. 按一下 Configuration (組態) 索引標籤。
  5. 請注意 Option groups (選項群組) 參數。

如果該選項群組不處於 valid (有效) 狀態,而且您正在嘗試新增 S3_INTERATION 選項,則不會成功新增該選項。因此,請確定選項群組處於 valid (有效) 狀態。

若要檢查該選項群組是否處於 valid (有效) 狀態,請執行下列 AWS CLI 命令:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

如果選項群組不處於 valid (有效) 狀態,請選擇資料庫的 Logs & events (記錄和事件) 索引標籤,然後向下捲動至 Recent events (最近的事件) 區段。識別讓選項群組無效的元件,並從資料庫中移除該元件。

如果選項群組處於 valid (有效) 狀態,請檢查選項群組中是否包含 S3_INTENATION 選項。若要取得詳細資訊,請參閱列出選項群組的選項和選項設定。如果選項群組中未包含 S3_INTERATION 選項,則新增該選項。如需詳細資訊,請參閱新增 Amazon S3 整合選項

注意:如果 S3_INTEGRATION 選項未新增至您的資料庫執行個體,您會收到錯誤 ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier”。該錯誤表示上傳和下載所需的程序,並且未在資料庫執行個體上建立。

將 S3_INTEGRATION 選項新增至 Amazon RDS 不會導致停機時間。如果您計劃使用 Apply Immediately (立即套用) 選項,請確定沒有擱置中維護動作。如果有任何待處理操作,這些操作會與 S3 整合一起套用。如需詳細資訊,請參閱維護資料庫執行個體

請確定您只從使用者建立的 Oracle 目錄物件或 DATA_PU_DIR 目錄上傳/下載檔案

您無法直接在資料庫執行個體中存取 S3 檔案。若要存取這些檔案,您必須將檔案複製到 RDS 主機中的目錄,才能存取該檔案。若要從資料庫執行個體上傳/下載檔案至 S3 儲存貯體,請執行下列操作:

  1. 若要將 Amazon RDS 中的匯出檔案複製到 S3,請務必使用 expdp 命令、DATA_DUMP_DIR 或自訂目錄中的 dbms_datapump API 來建立傾印檔案。然後使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序將檔案上傳至 S3。如需有關該程序參數和上傳檔案範例查詢的資訊,請參閱將 Oracle 資料庫執行個體的檔案上傳至 Amazon S3 儲存貯體
  2. 使用 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 (監看),以檢視日誌。
    -或-
    選擇 Download (下載) 以下載日誌。

您還可以執行下列命令來讀取上傳/下載程序中產生的日誌檔案:

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

注意:請務必將 task-id 取代為程序傳回的任務 ID。