Amazon S3 整合 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon S3 整合

您可在 RDS for Oracle 資料庫執行個體與 Amazon S3 儲存貯體之間傳輸檔案。您可以使用 Amazon S3 與 Oracle Data Pump 等 Oracle 資料庫功能整合。例如,您可從 Amazon S3 下載 Data Pump 檔案至 RDS for Oracle 資料庫執行個體。如需詳細資訊,請參閱 將資料匯入 Amazon RDS 上的 Oracle

注意

資料庫執行個體與 Amazon S3 儲存貯體必須在相同的 AWS 區域中。

設定 IAM 許可權限以進行 RDS for Oracle 與 Amazon S3 的整合

若要讓 RDS for Oracle 與 Amazon S3 整合,則您的資料庫執行個體必須具有 Amazon S3 儲存貯體的存取權。您的資料庫執行個體使用的 Amazon VPC 不需要提供存取給 Amazon S3 端點。

RDS for Oracle 支援在一個帳戶中的資料庫執行個體和不同帳戶中的 Amazon S3 儲存貯體之間傳輸檔案。如需採取額外步驟,下列各節中會說明這些步驟。

步驟 1:建立 Amazon RDS 角色的 IAM 政策

在此步驟中,您會建立具有在 Amazon S3 儲存貯體和 RDS 資料庫執行個體之間傳輸檔案所需許可的 AWS Identity and Access Management (IAM) 政策。此步驟假設您已建立 S3 儲存貯體。

在您建立政策之前,請記住下列資訊:

  • 儲存貯體的 Amazon Resource Name (ARN)

  • 如果您的儲存貯體使用 SSE-KMS 或 SSE-S3 加 AWS KMS 密,則為您的金鑰提供 ARN

    注意

    RDS for Oracle 資料庫執行個體無法存取使用 SSE-C 加密的 Amazon S3 儲存貯體。

如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用伺服器端加密保護資料

建立 IAM 政策以允許 Amazon RDS 存取您的 Amazon S3 儲存貯體
  1. 開啟 IAM 管理主控台

  2. Access management (存取管理) 下,請選擇 Policies (政策)。

  3. 選擇建立政策

  4. Visual editor (視覺化編輯器) 標籤中,選擇 Choose a service (選擇服務),然後選擇 S3

  5. Actions (動作) 中,選擇 Expand all (全部展開),然後選擇從 Amazon S3 儲存貯體傳輸檔案至 Amazon RDS 所需的儲存貯體許可和物件許可。例如,請執行以下操作:

    • 展開 [清單],然後選取ListBucket

    • 展開 [取],然後選取GetObject

    • 展開 [寫入],然後選取PutObjectDeleteObject

    • 展開 [權限管理],然後選取 [PutObjectAcl]。若您計劃將檔案上傳至另一個帳戶所擁有的儲存貯體,而此帳戶需要儲存貯體內容的完全控制,則需要此許可權限。

    物件許可權限是 Amazon S3 中物件作業的許可權限。您必須授予其儲存貯體中的物件,而非儲存貯體本身。如需詳細資訊,請參閱物件作業的許可權限

  6. 選擇資源,然後執行下列動作:

    1. 選擇特定

    2. 針對儲存貯體,請選擇新增 ARN。輸入您的儲存貯體 ARN。儲存貯體名稱會自動填入。接著選擇 Add (新增)

    3. 如果顯示物件資源,請選擇新增 ARN 以手動新增資源,或選擇任何

      注意

      您可以將 Amazon Resource Name (ARN) 設為更具體的 ARN 值,以允許 Amazon RDS 只能存取 Amazon S3 儲存貯體中的特定檔案或資料夾。如需如何為 Amazon S3 定義存取原則的詳細資訊,請參閱管理 Amazon S3 資源的存取許可

  7. (選用) 選擇 Add additional permissions (新增其他許可),將資源新增至政策。例如,請執行以下操作:

    1. 如果您的儲存貯體使用自訂 KMS 金鑰加密,請為服務選取 KMS

    2. 針對手動動作,請選取下列項目:

      • 加密

      • ReEncrypt 從ReEncrypt 到

      • 解密

      • DescribeKey

      • GenerateData關鍵

    3. 針對資源,請選擇特定

    4. 針對金鑰,請選擇新增 ARN。輸入自訂金鑰的 ARN 作為資源,然後選擇新增

      如需詳細資訊,請參閱 Amazon 簡單儲存服務使用者指南中的使用存放於 AWS Key Management Service (SSE-KMS) 的 KMS 金鑰使用伺服器端加密來保護資料

    5. 如果您想要 Amazon RDS 存取其他儲存貯體,請新增這些儲存貯體的 ARN。(選擇性) 您也可以授權存取 Amazon S3 中的所有儲存貯體和物件。

  8. 選擇 Next: Tags (下一步:標籤),然後選擇 Next: Review (下一步:檢閱)

  9. Name (名稱) 輸入您的 IAM 政策名稱,例如 rds-s3-integration-policy。您可使用此項名稱,建立與資料庫叢集相關的 IAM 角色。您也可以新增選用的 Description (描述) 值。

  10. 選擇 Create policy (建立政策)。

建立可授予 Amazon RDS 存取 Amazon S3 儲存貯體的 AWS Identity and Access Management (IAM) 政策。在您建立政策後,請記下政策的 ARN。您需要 ARN 才能進行後續步驟。

依據所需的存取類型,在政策中納入適當動作:

  • GetObject – 必須從 Amazon S3 儲存貯體傳輸檔案至 Amazon RDS。

  • ListBucket – 必須從 Amazon S3 儲存貯體傳輸檔案至 Amazon RDS。

  • PutObject – 必須由 Amazon RDS 傳輸檔案至 Amazon S3 儲存貯體。

下列 AWS CLI 命令會建立以這些選項命名rds-s3-integration-policy的 IAM 政策。其中將授予存取至名為 DOC-EXAMPLE-BUCKET 的儲存貯體。

範例

對於LinuxmacOS、或Unix:

aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }'

下列範例包含自訂 KMS 金鑰的許可。

aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

在 Windows 中:

aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }'

下列範例包含自訂 KMS 金鑰的許可。

aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3integration", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt", "kms:GenerateDataKey", "kms:DescribeKey", ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "arn:aws:kms:::your-kms-arn" ] } ] }'

步驟 2:(選用) 建立 Amazon S3 儲存貯體的 IAM 政策

只有在下列情況中才需要此步驟:

  • 您計劃從一個帳戶 (帳戶 A) 將檔案上傳至 Amazon S3 儲存貯體,然後從另一個帳戶 (帳戶 B) 進行存取。

  • 帳戶 B 擁有儲存貯體。

  • 帳戶 B 需要載入儲存貯體中物件的完整控制。

若上述條件不適用於您,請跳到 步驟 3:建立您的資料庫執行個體的 IAM 角色並附加政策

如要建立儲存貯體政策,請確定您具有下列項目:

  • 帳戶 A 的帳戶 ID

  • 帳户 A 的使用者名稱

  • 帳戶 B 中 Amazon S3 儲存貯體的 ARN 值

建立或編輯儲存貯體政策
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇要建立儲存貯體政策的儲存貯體名稱,或您想編輯之儲存貯體政策的儲存貯體名稱。

  3. 選擇 Permissions (許可)。

  4. Bucket policy (儲存貯體政策) 下方,選擇 Edit (編輯)。這會開啟「編輯儲存貯體政策」頁面。

  5. Edit bucket policy (編輯儲存貯體政策) 頁面,瀏覽《Amazon S3 使用者指南》中的 Policy examples (政策範例)、選擇 Policy generator (政策產生器) 以自動產生政策,或在 Policy (政策) 區段編輯 JSON。

    如果您選擇「策略產生器」,則「 AWS 策略產生器」會在新視窗中開啟:

    1. AWS Policy Generator ( 政策產生器) 頁面上,在 Select Type of Policy (選取政策類型) 中選擇 S3 Bucket Policy (S3 儲存貯體政策)。

    2. 在提供的欄位中輸入資訊,以新增陳述式,然後選擇 Add Statement (新增陳述式)。針對您想要新增的任意數量陳述式重複此動作。如需這些欄位的詳細資訊,請參閱《IAM 使用者指南》中的 IAM JSON 政策元素參考

      注意

      為方便起見,Edit bucket policy (編輯儲存貯體政策) 頁面會在 Policy (政策) 文字欄位上方顯示目前儲存貯體的 Bucket ARN (Amazon Resource Name) (儲存貯體 ARN (Amazon 資源名稱))。您可以複製此 ARN,以在 AWS Policy Generator ( 政策產生器) 頁面上的陳述式中使用。

    3. 完成新增陳述式後,選擇 Generate Policy (產生政策)。

    4. 複製產生的政策文字,選擇 Close (關閉),然後退回 Amazon S3 主控台中的 Edit bucket policy (編輯儲存貯體政策) 頁面。

  6. Policy (政策) 方塊中,編輯現有政策,或從政策產生器貼上儲存貯體政策。請務必先處理安全性警告、錯誤、一般警告,以及建議,然後再儲存政策。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-A-ID:account-A-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ] } ] }
  7. 選擇 Save changes (儲存變更),此選項會跳至儲存貯體許可頁面。

步驟 3:建立您的資料庫執行個體的 IAM 角色並附加政策

此步驟會假設您已於 步驟 1:建立 Amazon RDS 角色的 IAM 政策 中建立了 IAM 政策。於此步驟中,您會建立 RDS for Oracle 資料庫執行個體的角色,然後將政策附加至角色。

建立 IAM 角色以允許 Amazon RDS 存取 Amazon S3 儲存貯體
  1. 開啟 IAM 管理主控台

  2. 在導覽窗格中,選擇 Roles (角色)。

  3. 選擇 Create Role (建立角色)。

  4. 選擇 AWS 服務

  5. 對於其他 AWS 服務的使用案例:,選擇 RDS,然後選擇 RDS-將角色新增至資料庫。然後選擇下一步

  6. 請在許可政策之下的搜尋輸入您在 步驟 1:建立 Amazon RDS 角色的 IAM 政策 建立的 IAM 政策名稱,然後於政策出現在清單時加以選取。然後選擇下一步

  7. 角色名稱中輸入 IAM 角色名稱,例如 rds-s3-integration-role。您也可以新增選用的 Description (描述) 值。

  8. 選擇建立角色

如要建立角色並將政策附加至該角色
  1. 建立 IAM 角色,讓 Amazon RDS 可代表您存取您的 Amazon S3 儲存貯體。

    建議您在資源型信任關係中使用 aws:SourceArnaws:SourceAccount 全域條件內容索引鍵,將服務的許可限定於特定資來源。這是防止混淆代理人問題最有效的方式。

    您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 aws:SourceArn 值。在此情況下,當在相同陳述式中使用 aws:SourceAccount 值和 aws:SourceArn 裡的帳户時,兩者必須使用同樣的帳户 ID。

    • 如果您想要跨服務存取單一資源,請使用 aws:SourceArn

    • 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯,請使用 aws:SourceAccount

    在信任關係中,請務必使用 aws:SourceArn 全域條件內容索引鍵,其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。

    下列 AWS CLI 命令會建立rds-s3-integration-role為此目的命名的角色。

    範例

    對於LinuxmacOS、或Unix:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": my_account_ID, "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname" } } } ] }'

    在 Windows 中:

    aws iam create-role ^ --role-name rds-s3-integration-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": my_account_ID, "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname" } } } ] }'

    如需詳細資訊,請參閱《IAM 使用者指南》中的建立角色以將許可委派給 IAM 使用者

  2. 角色建立後,請記下角色的 ARN。您需要 ARN 才能進行後續步驟。

  3. 請將您建立的政策連接到您建立的角色。

    下列 AWS CLI 命令會將原則附加至名為的角色rds-s3-integration-role

    範例

    對於LinuxmacOS、或Unix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    在 Windows 中:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role

    your-policy-arn 替換為您前個步驟記下的政策 ARN。

步驟 4:建立 IAM 角色與 RDS for Oracle 資料庫執行個體的關聯

設定 Amazon S3 整合許可的最後一個步驟是將您的 IAM 角色與資料庫執行個體建立關聯。請注意以下要求:

  • 您必須能存取連接了必要 Amazon S3 許可政策的角色。

  • 您一次只能將一個 IAM 角色與 RDS for Oracle 資料庫執行個體建立關聯。

  • 您的資料庫執行個體必須處於可用狀態。

如要建立 IAM 角色與 RDS for Oracle 資料庫執行個體的關聯
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

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

  3. 選擇 RDS for Oracle 資料庫執行個體名稱以顯示其詳細資訊。

  4. Connectivity & security (連線和安全) 索引標籤上,向下捲動至頁面底部的 Manage IAM roles (管理 IAM 角色) 區段。

  5. 對於新增 IAM 角色到此執行個體,請選擇您在 步驟 3:建立您的資料庫執行個體的 IAM 角色並附加政策 中建立的角色。

  6. 針對 Feature (功能) 選擇 S3_INTEGRATION

    新增 S3_INTEGRATION 角色
  7. 選擇 Add role (新增角色)

下列 AWS CLI 命令會將角色新增至名為的 Oracle 資料庫執行個體mydbinstance

範例

對於LinuxmacOS、或Unix:

aws rds add-role-to-db-instance \ --db-instance-identifier mydbinstance \ --feature-name S3_INTEGRATION \ --role-arn your-role-arn

在 Windows 中:

aws rds add-role-to-db-instance ^ --db-instance-identifier mydbinstance ^ --feature-name S3_INTEGRATION ^ --role-arn your-role-arn

your-role-arn 替換為您前個步驟記下的角色 ARN。S3_INTEGRATION 必須在 --feature-name 選項中指定。

新增 Amazon S3 整合選項

若要整合 Amazon RDS for Oracle 與 Amazon S3,您的資料庫執行個體必須與包含 S3_INTEGRATION 選項的選項群組建立關聯。

設定選項群組進行 Amazon S3 整合
  1. 建立新的選項群組,或識別現有的選項群組,以便在其中新增 S3_INTEGRATION 選項。

    如需建立選項群組的相關資訊,請參閱建立選項群組

  2. S3_INTEGRATION 選項新增至選項群組。

    如需將選項新增至選項群組的相關資訊,請參閱將選項新增至選項群組

  3. 建立新的 RDS for Oracle 資料庫執行個體,將其與選項群組建立關聯,或修改 RDS for Oracle 資料庫執行個體,使其與選項群組建立關聯。

    如需建立資料庫執行個體的相關資訊,請參閱 建立 Amazon RDS 資料庫執行個體

    如需修改資料庫執行個體的相關資訊,請參閱修改 Amazon RDS 資料庫執行個體

設定選項群組進行 Amazon S3 整合
  1. 建立新的選項群組,或識別現有的選項群組,以便在其中新增 S3_INTEGRATION 選項。

    如需建立選項群組的相關資訊,請參閱建立選項群組

  2. S3_INTEGRATION 選項新增至選項群組。

    例如,下列 AWS CLI 指令會將S3_INTEGRATION選項新增至名為的選項群組myoptiongroup

    範例

    對於LinuxmacOS、或Unix:

    aws rds add-option-to-option-group \ --option-group-name myoptiongroup \ --options OptionName=S3_INTEGRATION,OptionVersion=1.0

    在 Windows 中:

    aws rds add-option-to-option-group ^ --option-group-name myoptiongroup ^ --options OptionName=S3_INTEGRATION,OptionVersion=1.0
  3. 建立新的 RDS for Oracle 資料庫執行個體,將其與選項群組建立關聯,或修改 RDS for Oracle 資料庫執行個體,使其與選項群組建立關聯。

    如需建立資料庫執行個體的相關資訊,請參閱 建立 Amazon RDS 資料庫執行個體

    如需修改 RDS for Oracle 資料庫執行個體的相關資訊,請參閱修改 Amazon RDS 資料庫執行個體

在 Amazon RDS for Oracle 和 Amazon S3 儲存貯體之間傳輸檔案

如要在 RDS for Oracle 資料庫執行個體和 Amazon S3 儲存貯體之間傳輸檔案,您可以使用 Amazon RDS 套件 rdsadmin_s3_tasks。您可在上傳檔案時裡用 GZIP 壓縮文件,並在下載時對其進行解壓縮。

檔案傳輸的需求和限制

在資料庫執行個體和 Amazon S3 儲存貯體之間傳輸檔案之前,請注意以下事項:

  • rdsadmin_s3_tasks套件會傳輸位於單一目錄中的檔案。您無法在傳輸中包含子目錄。

  • Amazon S3 儲存貯體中的物件大小上限為 5 TB。

  • 以非同步方式rdsadmin_s3_tasks執行所建立的工作。

  • 您可以從「資料汲取」目錄 (例如DATA_PUMP_DIR,或任何使用者建立的目錄) 上載檔案。您無法從 Oracle 背景處理作業所使用的目錄 (例如adumpbdump、或trace目錄) 上傳檔案。

  • 每個程序呼叫的下載限制為 2000 個檔案download_from_s3。如果您需要從 Amazon S3 下載 2000 個以上的檔案,請將您的下載分割為不同的動作,每次程序呼叫不超過 2000 個檔案。

  • 如果您的下載資料夾中存在檔案,且您嘗試下載具有相同名稱的檔案,則 download_from_s3 會跳過下載。若要從下載目錄中移除檔案,請使用 PL/SQL 程序 UTL_F.F移除。

將檔案從 RDS for Oracle 資料庫執行個體上傳至 Amazon S3 儲存貯體

如要從資料庫執行個體上傳檔案至 Amazon S3 儲存貯體,請使用程序 rdsadmin.rdsadmin_s3_tasks.upload_to_s3。例如,您可上傳 Oracle Recovery Manager (RMAN) 備份檔案或 Oracle Data Pump 檔案。如需使用物件的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》。如需 RMAN 備份的詳細資訊,請參閱執行 Oracle 資料庫執行個體的一般 RMAN 任務

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

p_bucket_name

VARCHAR2

必要

上傳檔案目的地的 Amazon S3 儲存貯體名稱。

p_directory_name

VARCHAR2

必要

上傳檔案來源的 Oracle 目錄物件名稱。目錄可為 Data Pump 目錄任何由使用者定義的目錄物件,例如 DATA_PUMP_DIR。您無法從背景處理程序所使用的目錄上傳檔案adump,例如bdump、和trace

注意

您只能由指定目錄上傳檔案。您不能由指定目錄之中的子目錄上傳檔案。

p_s3_prefix

VARCHAR2

必要

上傳檔案的 Amazon S3 檔案名稱字首。空白字首會將所有檔案上傳至指定 Amazon S3 儲存貯體的頂層,不會在檔案名稱新增字首。

例如若字首為 folder_1/oradb,檔案會上傳至 folder_1。在這種情況下,oradb 字首會新增至各個檔案。

p_prefix

VARCHAR2

必要

檔案名稱必須與其相符才能上傳的檔案名稱字首。空白字首會將上傳指定目錄之中的檔案。

p_compression_level

NUMBER

0

選擇性

GZIP 壓縮層級。有效值範圍從 09

  • 0 – 無壓縮

  • 1 – 最快速的壓縮

  • 9 – 最高壓縮

p_bucket_owner_full_control

VARCHAR2

選擇性

儲存貯體的存取控制設定。唯一有效值為 null 或 FULL_CONTROL。僅當您將檔案從一個帳戶 (帳戶 A) 上傳至另一個帳戶 (帳戶 B) 所擁有的儲存貯體,且帳戶 B 需要完全控制這些檔案時,才需要此設定。

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 程序的傳回值是一個任務 ID。

下列範例會將DATA_PUMP_DIR目錄中的所有檔案上傳到名為 DOC/ EXAMPLE 儲存貯體的 Amazon S3 儲存貯體。檔案未壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

以下範例將 db 目錄中所有字首為 DATA_PUMP_DIR 的檔案上傳至名為 DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體。Amazon RDS 對檔案套用最高層級的 GZIP 壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_prefix => 'db', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_compression_level => 9) AS TASK_ID FROM DUAL;

下列範例將 DATA_PUMP_DIR 目錄的所有檔案,上傳至名為DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體。檔案上傳至 dbfiles 資料夾。於此範例中,GZIP 壓縮層級為 1,此為最快速的壓縮層級。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_prefix => '', p_s3_prefix => 'dbfiles/', p_directory_name => 'DATA_PUMP_DIR', p_compression_level => 1) AS TASK_ID FROM DUAL;

以下範例將 DATA_PUMP_DIR 目錄的所有檔案,上傳至名為DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體。檔案上傳至 dbfiles 資料夾,而 ora 則新增至每個檔案名稱的開頭。未套用任何壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_prefix => '', p_s3_prefix => 'dbfiles/ora', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

下列範例假定該命令執行於帳戶 A 中,但帳戶 B 需要儲存貯體內容的完全控制。命令 rdsadmin_s3_tasks.upload_to_s3 會將 DATA_PUMP_DIR 目錄中的所有檔案傳輸至名為 s3bucketOwnedByAccountB 的儲存貯體。存取控制設定為 FULL_CONTROL,則帳戶 B 可存取儲存貯體中的檔案。GZIP 壓縮層級為 6,此會平衡速度和檔案大小。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 's3bucketOwnedByAccountB', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_bucket_owner_full_control => 'FULL_CONTROL', p_compression_level => 6) AS TASK_ID FROM DUAL;

在各項範例中,SELECT 陳述式以 VARCHAR2 資料類型傳回任務 ID。

您可以透過顯示任務的輸出檔案來檢視結果。

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

以程序傳回的任務 ID 取代 task-id

注意

任務是以非同步方式執行。

將檔案從 Amazon S3 儲存貯體下載至 Oracle 資料庫執行個體

若要從 Amazon S3 儲存貯體下載檔案至 Oracle 資料庫執行個體,請使用 Amazon RDS 程序 rdsadmin.rdsadmin_s3_tasks.download_from_s3

download_from_s3 程序具有下列參數。

參數名稱 資料類型 預設 必要 描述

p_bucket_name

VARCHAR2

必要

下載檔案來源的 Amazon S3 儲存貯體名稱。

p_directory_name

VARCHAR2

必要

下載檔案目的地的 Oracle 目錄物件名稱。目錄可為 Data Pump 目錄任何由使用者定義的目錄物件,例如 DATA_PUMP_DIR

p_error_on_zero_downloads

VARCHAR2

FALSE

選用

此旗標可決定當 Amazon S3 儲存貯體中沒有物件符合字首時,任務是否會引發錯誤。如果此參數未設定或設為 FALSE (預設值),任務會列印訊息,指出找不到物件,但不會引發例外狀況或失敗。如果此參數為 TRUE,則任務會引發例外狀況並失敗。

可能無法進行比對測試的字首規格範例是字首中的空格 (如 ' import/test9.log' 中所示) 和大小寫不符 (如 test9.logtest9.LOG 中所示)。

p_s3_prefix

VARCHAR2

必要

檔案名稱必須與其相符才能下載的檔案名稱字首。空白字首會在指定的 Amazon S3 儲存貯體中下載所有第一層檔案,但不是在該儲存貯體資料夾中的檔案。

程序僅會由符合字首的第一層資料夾下載 Amazon S3 物件。符合指定字串的巢狀目錄結構不會下載。

例如假設 Amazon S3 儲存貯體具有資料夾結構 folder_1/folder_2/folder_3。您指定 'folder_1/folder_2/' 字首。在這種情況下,只會下載 folder_2 之中的檔案,不會下載 folder_1folder_3 的檔案。

如果您反而指定 'folder_1/folder_2' 字首,則會下載 folder_1 中符合 'folder_2' 字首的所有檔案,且不會下載 folder_2 中的任何檔案。

p_decompression_format

VARCHAR2

選用

解壓縮格式。有效值為 NONE 適用於未解壓縮,而 GZIP 適用於解壓縮。

rdsadmin.rdsadmin_s3_tasks.download_from_s3 程序的傳回值是一個任務 ID。

以下範例將名為 DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體中所有的檔案下載至 DATA_PUMP_DIR 目錄。這些檔案未壓縮,因此無須套用解壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

以下範例將名為 db 的 Amazon S3 儲存貯體之中字首為 DOC-EXAMPLE-BUCKET 的所有檔案下載至 DATA_PUMP_DIR 目錄。這些檔案以 GZIP 進行壓縮,因此可套用解壓縮。參數 p_error_on_zero_downloads 會開啟字首錯誤檢查,因此,如果字首與儲存貯體中的任何檔案不符,任務就會引發例外狀況並失敗。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_s3_prefix => 'db', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'GZIP', p_error_on_zero_downloads => 'TRUE') AS TASK_ID FROM DUAL;

以下範例將名為 myfolder/ 的 Amazon S3 儲存貯體之中資料夾 DOC-EXAMPLE-BUCKET 的所有檔案下載至 DATA_PUMP_DIR 目錄。使用 p_s3_prefix 參數,指定 Amazon S3 資料夾。上傳的檔案使用 GZIP 進行壓縮,但於下載過程中不會解壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_s3_prefix => 'myfolder/', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'NONE') AS TASK_ID FROM DUAL;

以下範例將名為 DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體中的檔案 mydumpfile.dmp 下載至 DATA_PUMP_DIR 目錄。未套用任何解壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_s3_prefix => 'mydumpfile.dmp', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

在各項範例中,SELECT 陳述式以 VARCHAR2 資料類型傳回任務 ID。

您可以透過顯示任務的輸出檔案來檢視結果。

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

以程序傳回的任務 ID 取代 task-id

注意

任務是以非同步方式執行。

您可使用 UTL_FILE.FREMOVE Oracle 程序由目錄移除檔案。如需詳細資訊,請參閱 Oracle 文件中的 FREMOVE 程序

監控檔案傳輸狀態

檔案傳輸作業會在開始及完成時發佈 Amazon RDS 事件。事件訊息包含檔案傳輸的任務 ID。如需檢視事件相關資訊,請參閱檢視 Amazon RDS 事件

您可在 bdump 檔案之中,檢視進行中作業的狀態。bdump 檔案位在 /rdsdbdata/log/trace 目錄:每個 bdump 檔案的名稱格式如下。

dbtask-task-id.log

task-id 替換為您要監控作業的 ID。

注意

任務是以非同步方式執行。

您可以使用 rdsadmin.rds_file_util.read_text_file 預存程序檢視 bdump 檔案內容。例如以下查詢會傳回 dbtask-1234567890123-1234.log bdump 檔案的內容。

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

下列範例顯示傳輸失敗的日誌。

TASK_ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1234567890123-1234 TEXT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2023-04-17 18:21:33.993 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datapump/A123B4CDEF567890G1234567890H1234/sample.dmp to Amazon S3 with bucket name DOC-EXAMPLE-BUCKET and key sample.dmp. 2023-04-17 18:21:34.188 UTC [ERROR] RDS doesn't have permission to write to Amazon S3 bucket name DOC-EXAMPLE-BUCKET and key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.

針對 Amazon S3 整合進行疑難排解

如需疑難排解秘訣,請參閱 AWS Re: POST 文章當我將 Amazon RDS 版 Oracle 與 Amazon S3 整合時,如何解決問題?

移除 Amazon S3 整合選項

您可由資料庫執行個體移除 Amazon S3 整合選項。

若要從資料庫執行個體中移除 Amazon S3 整合選項,請執行下列其中一個動作:

  • 若要從多個資料庫執行個體中移除 Amazon S3 整合選項,請從資料庫執行個體所屬的選項群組中移除 S3_INTEGRATION 選項。此變更會影響使用選項群組的所有資料庫執行個體。如需詳細資訊,請參閱 從選項群組移除選項

  • 如要從單一資料庫執行個體移除 Amazon S3 整合,請修改執行個體,並指定不含 S3_INTEGRATION 選項的不同選項群組。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。如需更多詳細資訊,請參閱 修改 Amazon RDS 資料庫執行個體