Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
如何對整合 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 區域。
- 資料庫執行個體的 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 儲存貯體的權限
請完成以下步驟:
-
開啟 Amazon RDS console (Amazon RDS 主控台)。
-
在導覽窗格中,選擇 Databases (資料庫)。
-
選取您要檢查的資料庫執行個體。
-
選擇 Connectivity & security (連線與安全性) 索引標籤。
-
向下捲動至 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 替換為您的資料庫執行個體。
-
如果 IAM 角色存在但沒有最低權限,則請更新角色以納入這些權限。
如果您未具備所需權限的 IAM 角色,請完成以下步驟:
- 建立 IAM 政策,並包含傳輸檔案所需的權限。
**注意:**建立 IAM 政策時,請務必為儲存貯體新增儲存貯體層級權限,並為物件新增物件層級權限。 - 為您的 Amazon RDS for Oracle 資料庫執行個體建立 IAM 角色,並將您的政策附加至該角色。
- 將您的 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 資料庫執行個體
請完成以下步驟:
-
開啟 Amazon RDS console (Amazon RDS 主控台)。
-
在導覽窗格中,選擇 Databases (資料庫)。
-
選擇您要檢查的資料庫執行個體。
-
選擇 Configuration (組態) 索引標籤,並記下 Option groups (選項群組) 參數。
-
若要檢查此選項群組是否處於同步狀態,請執行以下 describe-db-instances 命令:
aws rds describe-db-instances \--db-instance-identifier example-db-instance \--query 'DBInstances[*].[OptionGroupMemberships[*]]'**注意:**將 example-db-instance 替換為您的資料庫執行個體。
-
執行以下其中一項操作:
如果選項群組未處於同步狀態,請選擇 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 儲存貯體下載至資料庫執行個體,請完成以下步驟:
- 使用 expdp 命令、DATA_DUMP_DIR 中的 dbms_datapump API,或自訂目錄,建立要傳送至 Amazon S3 的匯出檔案。
- 使用 rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序將檔案上傳至 S3。
- 使用 rdsadmin.rdsadmin_s3_tasks.download_from_s3 程序,將檔案從 S3 儲存貯體下載至 DATA_PUMP_DIR 資料夾或使用者建立的目錄。
當您執行 rdsadmin 套件上傳或下載程序時,請檢視日誌並監控檔案傳輸狀態。若要檢視這些日誌,請完成以下步驟:
-
開啟 Amazon RDS console (Amazon RDS 主控台)。
-
在導覽窗格中,選擇 Databases (資料庫)。
-
選擇您要檢視的資料庫執行個體。
-
選擇 Logs & events (日誌和事件) 索引標籤。
-
在 Logs (日誌) 區段下,於搜尋篩選條件中輸入程序任務 ID。
-
選取傳回的檔案。
-
選擇 Watch (觀看) 以檢視日誌,或選擇 Download (下載) 以下載日誌。
-
若要讀取上傳或下載程序期間產生的日誌檔案,請執行以下 select 陳述式:
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));**注意:**將 task-id 替換為程序傳回的任務 ID。
相關資訊
相關內容
- 已提問 2 年前
- 已提問 3 年前

