跳至內容

如何對整合 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 區域。
  • 資料庫執行個體的 AWS Identity and Access Management (IAM) 角色具備對 S3 儲存貯體所需的存取權。
  • 資料庫執行個體已與選項群組建立關聯,且包含 S3_INTEGRATION 選項。
  • 您只能從 Oracle 目錄物件上傳檔案。
    **注意:**此目錄可能是使用者建立的目錄DATA_PUMP_DIR 目錄。
  • 如果您使用使用者建立的目錄,請確認執行上傳與下載的使用者對該目錄具有必要權限。
  • 如果您在子目錄內複製資料,則在使用 rdsadmin 套件時,請明確指定子目錄的名稱。
    **注意:**您無法複製使用 S3_INTEGRATION 選項的子目錄。您只能使用 S3_INTEGRATION 選項,在 Oracle 邏輯目錄 (例如 DATA_PUMP_DIR) 與 Amazon S3 之間複製檔案。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

驗證資料庫執行個體的 IAM 角色具備對 S3 儲存貯體的權限

請完成以下步驟:

  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

    您也可以執行 describe-db-instances 命令:

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

    **注意:**將 example-db-instance 替換為您的資料庫執行個體。

  6. 如果 IAM 角色存在但沒有最低權限,則請更新角色以納入這些權限。

如果您未具備所需權限的 IAM 角色,請完成以下步驟:

  1. 建立 IAM 政策,並包含傳輸檔案所需的權限。
    **注意:**建立 IAM 政策時,請務必為儲存貯體新增儲存貯體層級權限,並為物件新增物件層級權限。
  2. 為您的 Amazon RDS for Oracle 資料庫執行個體建立 IAM 角色,並將您的政策附加至該角色。
  3. 將您的 IAM 角色與您的 Amazon RDS for Oracle 資料庫執行個體建立關聯

如果儲存貯體權限問題仍然存在,則請使用以下範例政策,授予 IAM 角色對 S3 儲存貯體的完整存取權:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/*",
                "arn:aws:s3:::example-bucket"
            ]
        }
    ]
}

**重要:**請僅授予對 S3 儲存貯體的完整存取權,以測試問題是否由 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/*"
            ]
        }
    ]
}

驗證您是否已將選項群組附加至 RDS 資料庫執行個體

請完成以下步驟:

  1. 開啟 Amazon RDS console (Amazon RDS 主控台)。

  2. 在導覽窗格中,選擇 Databases (資料庫)。

  3. 選擇您要檢查的資料庫執行個體。

  4. 選擇 Configuration (組態) 索引標籤,並記下 Option groups (選項群組) 參數。

  5. 若要檢查此選項群組是否處於同步狀態,請執行以下 describe-db-instances 命令:

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

    **注意:**將 example-db-instance 替換為您的資料庫執行個體。

  6. 執行以下其中一項操作:
    如果選項群組未處於同步狀態,請選擇 Logs & events (日誌和事件) 索引標籤,並檢閱 Recent events (最近事件) 區段。識別導致選項群組無法進入同步狀態的元件,然後從資料庫中移除此元件。
    -或-
    如果選項群組處於同步狀態,則檢查選項群組中是否包含 S3_INTEGRATION 選項。如果選項群組中未包含 S3_INTEGRATION 選項,則請新增 S3 整合選項

**注意:**如果您收到錯誤「ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier";」,請確認您已將 S3_INTEGRATION 選項新增至資料庫執行個體。

新增 S3_INTEGRATION 選項時不會發生停機。如果您計畫使用 Apply Immediately (立即套用) 選項,請確認沒有待處理的維護動作。如果有待處理的維護動作,則這些動作會與 S3 整合一起套用。如需更多資訊,請參閱維護資料庫執行個體

上傳與下載檔案

您無法直接在資料庫執行個體中存取 Amazon S3 檔案。若要存取這些檔案,您必須將檔案複製到 Amazon RDS 主機中的目錄。若要將檔案從資料庫執行個體上傳至 S3 儲存貯體,或從 S3 儲存貯體下載至資料庫執行個體,請完成以下步驟:

  1. 使用 expdp 命令、DATA_DUMP_DIR 中的 dbms_datapump API,或自訂目錄,建立要傳送至 Amazon S3 的匯出檔案。
  2. 使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序將檔案上傳至 S3
  3. 使用 rdsadmin.rdsadmin_s3_tasks.download_from_s3 程序,將檔案從 S3 儲存貯體下載DATA_PUMP_DIR 資料夾或使用者建立的目錄。

當您執行 rdsadmin 套件上傳或下載程序時,請檢視日誌並監控檔案傳輸狀態。若要檢視這些日誌,請完成以下步驟:

  1. 開啟 Amazon RDS console (Amazon RDS 主控台)。

  2. 在導覽窗格中,選擇 Databases (資料庫)。

  3. 選擇您要檢視的資料庫執行個體。

  4. 選擇 Logs & events (日誌和事件) 索引標籤。

  5. Logs (日誌) 區段下,於搜尋篩選條件中輸入程序任務 ID。

  6. 選取傳回的檔案。

  7. 選擇 Watch (觀看) 以檢視日誌,或選擇 Download (下載) 以下載日誌。

  8. 若要讀取上傳或下載程序期間產生的日誌檔案,請執行以下 select 陳述式:

    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 資料庫執行個體使用的儲存體比預期多?