Amazon S3 整合 - Amazon Relational Database Service

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

Amazon S3 整合

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

注意

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

為RDS甲骨文與 Amazon S3 整合設定IAM許可

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

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

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

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

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

  • 您存儲桶的 Amazon 資源名稱(ARN)

  • 如果您ARN的存儲桶使用 SSE-KMS 或 SSE-S3 加密,則為您的 AWS KMS 密鑰

    注意

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

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

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

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

  3. 選擇 建立政策

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

  5. 對於「動作」,選擇「全部展開」,然後選擇將檔案從 Amazon S3 儲存貯體傳輸到 Amazon 所需的儲存貯體許可和物件許可RDS。例如,請執行以下操作:

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

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

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

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

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

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

    1. 選擇特定

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

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

      注意

      您可以將 Amazon 資源名稱(ARN)設置為更具體的ARN值,以允許亞馬遜僅訪問 Amazon RDS S3 存儲桶中的特定文件或文件夾。如需如何為 Amazon S3 定義存取原則的詳細資訊,請參閱管理 Amazon S3 資源的存取許可

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

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

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

      • 加密

      • ReEncrypt 從ReEncrypt 到

      • 解密

      • DescribeKey

      • GenerateDataKey

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

    4. 對於金鑰,請選擇「新增」ARN。輸入您ARN的自訂金鑰作為資源,然後選擇 [新增]。

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

    5. 如果您希RDS望 Amazon 訪問其他存儲桶,請ARNs為這些存儲桶添加。(選擇性) 您也可以授權存取 Amazon S3 中的所有儲存貯體和物件。

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

  9. 例如,在 [名稱] 中輸入IAM原則的名稱rds-s3-integration-policy建立要與資料庫執行個體建立關聯的IAM角色時,您可以使用此名稱。您也可以新增選用的 Description (描述) 值。

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

建立一個 AWS Identity and Access Management (IAM) 政策,授予亞馬遜RDS存取 Amazon S3 儲存貯體的權限。建立原則之後,請記下原則ARN的內容。您需要執ARN行後續步驟。

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

  • GetObject— 需要將文件從 Amazon S3 存儲桶傳輸到 Amazon RDS。

  • ListBucket— 需要將文件從 Amazon S3 存儲桶傳輸到 Amazon RDS。

  • PutObject— 需要將文件從 Amazon 傳輸RDS到 Amazon S3 存儲桶。

下列 AWS CLI 命令會建立以這些選項命名rds-s3-integration-policy的IAM策略。其中將授予存取至名為 amzn-s3-demo-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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-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. 編輯儲存貯體政策頁面上,瀏覽 Amazon S3 使用者指南中的政策範例,選擇政策產生器以自動產生政策,或JSON在政策區段中編輯。

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

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

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

      注意

      為方便起見,[編輯儲存貯體政策] 頁面會在 [政] 文字欄位上方顯示目前儲存貯體的儲存貯體 ARN (Amazon 資源名稱)。您可以複製此項目,以ARN便在「AWS 原則產生器」頁面的陳述式中使用。

    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:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }
  7. 選擇 Save changes (儲存變更),此選項會跳至儲存貯體許可頁面。

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

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

創建一個IAM角色以允許 Amazon RDS 訪問 Amazon S3 存儲桶
  1. 開啟 IAM 管理主控台

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

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

  4. 選擇 AWS 服務

  5. 對於其他 AWS 服務的使用案例:,選擇RDS然後 RDS-將角色添加到數據庫。然後選擇下一步

  6. 對於 [權限] IAM 策略下的 [搜尋],輸入您在其中建立的原則名稱步驟 1:為您的 Amazon RDS 角色建立IAM政策,然後在清單中顯示時選取策略。然後選擇下一步

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

  8. 選擇建立角色

如要建立角色並將政策附加至該角色
  1. 建立 Amazon RDS 可以代表您擔任的IAM角色,以存取您的 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的 Oracle 資料庫執行個體建立關聯

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

  • 您必須能夠存取已附加所需 Amazon S3 許可政策的IAM角色。

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

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

將您的IAM角色與您RDS的 Oracle 資料庫執行個體建立關聯
  1. 登錄 AWS Management Console 並在打開 Amazon RDS 控制台https://console.aws.amazon.com/rds/

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

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

  4. 在 [連線與安全性] 索引標籤上,向下捲動至頁面底部的 [管理IAM角色] 區段。

  5. 對於 [將IAM角色新增至此執行個體],請選擇您在中建立的角色步驟 3:為您的資料庫執行個體建立IAM角色並附加原則

  6. 對於「功能」,選擇 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 版 Oracle 與 Amazon S3 整合,您的資料庫執行個體必須與包含該選項的選項群組建立關聯。S3_INTEGRATION

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

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

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

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

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

    如需建立資料庫執行個體的相關資訊,請參閱 建立 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為 Oracle 資料庫執行個體建立新的執行個體,並將選項群組與其關聯,或修改 Oracle 資料庫執RDS行個體的執行個體,以建立選項群組與其關聯。

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

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

在 Amazon RDS 的甲骨文和 Amazon S3 存儲桶之間傳輸文件

若要在 Oracle 資料庫執RDS行個體和 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_ FILE。 FREMOVE

將RDS適用於 Oracle 資料庫執行個體的檔案上傳至 Amazon S3 儲存貯體

如要從資料庫執行個體上傳檔案至 Amazon S3 儲存貯體,請使用程序 rdsadmin.rdsadmin_s3_tasks.upload_to_s3。例如,您可以上傳「Oracle 復原管理程式」(RMAN) 備份檔案或「Oracle 資料汲取」檔案。如需使用物件的詳細資訊,請參閱《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目錄中的所有檔案上傳到名為的 Amazon S3 儲存貯體 amzn-s3-demo-bucket。 檔案不會壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

以下範例將 db 目錄中所有字首為 DATA_PUMP_DIR 的檔案上傳至名為 amzn-s3-demo-bucket 的 Amazon S3 儲存貯體。Amazon RDS 對文件應用最高級別的GZIP壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-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 目錄的所有檔案,上傳至名為amzn-s3-demo-bucket 的 Amazon S3 儲存貯體。檔案上傳至 dbfiles 資料夾。在此範例中,GZIP壓縮層級為 1,這是最快的壓縮級別。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-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 目錄的所有檔案,上傳至名為amzn-s3-demo-bucket 的 Amazon S3 儲存貯體。檔案上傳至 dbfiles 資料夾,而 ora 則新增至每個檔案名稱的開頭。未套用任何壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-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'));

Replace (取代) 任務識別碼 具有程序傳回的任務 ID。

注意

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

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

若要將檔案從 Amazon S3 儲存貯體下載到適用RDS於 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。

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

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

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

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-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 儲存貯體之中資料夾 amzn-s3-demo-bucket 的所有檔案下載至 DATA_PUMP_DIR 目錄。使用 p_s3_prefix 參數,指定 Amazon S3 資料夾。上傳的文件被壓縮GZIP,但在下載過程中不會解壓縮。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'myfolder/', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'NONE') AS TASK_ID FROM DUAL;

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

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-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'));

Replace (取代) 任務識別碼 具有程序傳回的任務 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 amzn-s3-demo-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 amzn-s3-demo-bucket and key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.

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

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

移除 Amazon S3 整合選項

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

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

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

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