跳至內容

如何對整合 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 Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

確認資料庫執行個體具有存取 S3 儲存貯體所需的權限

檢查您的資料庫執行個體是否具有具備最小權限、可上傳與下載 S3 的 AWS Identity and Access Management (IAM) 角色。請完成以下步驟:

  1. 開啟 Amazon RDS console (Amazon RDS 主控台)。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選取您要檢查的資料庫執行個體。
  4. 選擇 Connectivity & security (連線與安全性) 索引標籤。
  5. 向下捲動至 Manage IAM roles (管理 IAM 角色) 區段,檢查是否有包含以下權限的 active (作用中) 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 儲存貯體中的範例資料夾,並使用範例儲存貯體,請附加以下 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 console (Amazon RDS 主控台)。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選擇您要檢查的資料庫執行個體。
  4. 選擇 Configuration (組態) 索引標籤。
  5. 記下 Option groups (選項群組) 參數。

如果此選項群組未處於同步狀態,且您嘗試新增 S3_INTEGRATION 選項,則系統不會新增該選項。最佳實務是確保選項群組處於同步狀態。

若要檢查此選項群組是否處於同步狀態,請執行以下 AWS CLI 命令:

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

如果選項群組未處於同步狀態,請選擇資料庫的 Logs & events (日誌與事件) 索引標籤,然後檢閱 Recent events (最近的事件) 區段。找出導致選項群組無法處於同步狀態的元件,然後從資料庫中移除此元件。

如果選項群組處於同步狀態,請確認選項群組中包含 S3_INTEGRATION 選項。如需更多資訊,請參閱列出選項群組的選項和選項設定。如果選項群組未包含 S3_INTEGRATION 選項,請新增該選項。如需更多資訊,請參閱新增 Amazon S3 整合選項

**注意:**如果未將 S3_INTEGRATION 選項新增至您的資料庫執行個體,您會收到錯誤 「ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier";」。此錯誤表示資料庫執行個體上未建立上傳與下載所需的程序。

當您將 S3_INTEGRATION 選項新增至 Amazon RDS 時,不會發生停機時間。如果您打算使用 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 console (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。

相關資訊

Amazon S3 整合

為什麼我的 Amazon RDS for Oracle 資料庫執行個體使用的儲存空間超出預期?