

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

# 使用原生備份和還原，匯入和匯出 SQL Server 資料庫
<a name="SQLServer.Procedural.Importing"></a>

Amazon RDS 支援使用完整備份檔案 (.bak 檔案) 進行 Microsoft SQL Server 資料庫的原生備份與還原。當您使用 RDS 時，您會存取存放在 Amazon S3 的檔案，而非使用資料庫伺服器上的本機檔案系統。

例如，您可以從本機伺服器建立完整備份，將它存放在 S3，然後還原到現有的 Amazon RDS 資料庫執行個體。您也可以從 RDS 建立備份，將備份存放在 S3，然後還原到您想要的任何地方。

原生備份和還原可在單一可用區和多可用區資料庫執行個體的所有 AWS 區域中使用，包括具有僅供讀取複本的多可用區資料庫執行個體。對於 Amazon RDS 上支援的所有 Microsoft SQL Server 版本，都可使用原生備份與還原。

下圖顯示所支援的案例。

![\[原生備份與還原架構\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQL-bak-file.png)


使用原生 .bak 檔案來備份和還原資料庫，通常是備份和還原資料庫最快的方法。使用原生備份與還原有許多其他優點。例如，您可以執行下列操作：
+ 往返於 Amazon RDS 來遷移資料庫。
+ 在 RDS for SQL Server 資料庫執行個體之間移動資料庫。
+ 遷移 .bak 檔案內的資料結構描述、預存程序、觸發及其他資料庫程式碼。
+ 備份和還原單一資料庫，而非整個資料庫執行個體。
+ 建立用於開發、測試、訓練和示範的資料庫副本。
+ 透過 Amazon S3 存放和傳輸備份檔案，為災難復原添加一道保護。
+ 建立透明資料加密 (TDE) 已開啟的資料庫其原生備份，並將這些備份還原至內部部署資料庫。如需詳細資訊，請參閱[支援 SQL Server 的透明資料加密](Appendix.SQLServer.Options.TDE.md)。
+ 將 TDE 已開啟的內部部署資料庫其原生備份還原至 RDS for SQL Server 資料庫執行個體。如需詳細資訊，請參閱[支援 SQL Server 的透明資料加密](Appendix.SQLServer.Options.TDE.md)。

**Contents**
+ [限制與建議](#SQLServer.Procedural.Importing.Native.Limitations)
+ [設定原生備份與還原](SQLServer.Procedural.Importing.Native.Enabling.md)
  + [手動建立原生備份與還原的 IAM 角色](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)
+ [使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)
  + [備份資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Backup.Examples)
  + [還原資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Examples)
  + [還原日誌](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Restore.Log.Examples)
  + [完成資料庫還原](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax)
  + [處理部分還原的資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Partially.Restored)
    + [捨棄部分還原的資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Drop.Partially.Restored)
    + [部分還原資料庫的快照還原和時間點復原行為](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Snapshot.Restore)
  + [取消任務](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Cancel)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Cancel.Syntax)
  + [追蹤任務的狀態](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking)
    + [Usage](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Syntax)
    + [範例](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Examples)
    + [回應](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Tracking.Response)
+ [壓縮備份檔案](SQLServer.Procedural.Importing.Native.Compression.md)
+ [故障診斷](SQLServer.Procedural.Importing.Native.Troubleshooting.md)
+ [使用其他方法來匯入和匯出 SQL Server 資料](SQLServer.Procedural.Importing.Snapshots.md)
  + [使用快照，將資料匯入 RDS for SQL Server](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Importing.Procedure)
    + [匯入資料](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.Import)
      + [產生和發佈指令碼精靈](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ScriptWizard)
      + [匯入和匯出精靈](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.ImportExportWizard)
      + [大量複製](SQLServer.Procedural.Importing.Snapshots.md#ImportData.SQLServer.MgmtStudio.BulkCopy)
  + [從 RDS for SQL Server 匯出資料](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting)
    + [SQL Server 匯入和匯出精靈](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSIEW)
    + [SQL Server 產生和發佈指令碼精靈及 bcp 公用程式](SQLServer.Procedural.Importing.Snapshots.md#SQLServer.Procedural.Exporting.SSGPSW)
+ [從 Linux 使用 BCP 公用程式匯入和匯出資料](SQLServer.Procedural.Importing.BCP.Linux.md)
  + [先決條件](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Prerequisites)
  + [在 Linux 上安裝 SQL Server 命令列工具](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Installing)
  + [從 RDS for SQL Server 匯出資料](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting)
    + [基本匯出語法](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic)
    + [匯出範例](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example)
  + [將資料匯入至 RDS for SQL Server](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing)
    + [基本匯入語法](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic)
    + [匯入範例](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Importing.Example)
  + [常用 BCP 選項](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Options)
  + [最佳實務和考量](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.BestPractices)
  + [排解常見問題](SQLServer.Procedural.Importing.BCP.Linux.md#SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting)

## 限制與建議
<a name="SQLServer.Procedural.Importing.Native.Limitations"></a>

以下是使用原生備份與還原時的一些限制：
+ 您無法在與 Amazon RDS 資料庫執行個體不同的區域中備份或還原 Amazon S3 儲存貯體。 AWS 
+ 您不能還原與現有資料庫同名的資料庫。資料庫名稱是唯一的。
+ 強烈建議您不要將備份從某個時區還原至不同時區。如果您將備份從某個時區還原至不同時區，則必須稽核您的查詢及應用程式，是否受到時區變更的影響。
+ RDS for Microsoft SQL Server 的大小限制為每個檔案 5 TB。對於大型資料庫的原生備份，您可以使用多檔案備份。
+ 可備份至 S3 的資料庫大小上限取決於資料庫執行個體上可用的記憶體、CPU、I/O 和網路資源。資料庫越大，備份代理程式所耗用的記憶體就越多。
+ 您無法同時備份或是從 10 個備份檔案進行還原。
+ 差異備份是以前次完整備份為基礎。您不能在前次完整備份和差異備份之間擷取快照，差異備份才能運作。如果您要建立差異備份，但手動或自動快照存在，請先建立另一個完整備份，再繼續建立差異備份。
+ 檔案 file\$1guid (唯一識別符) 設定為 `NULL` 的資料庫不支援差異與紀錄還原。
+ 您最多可以同時執行 2 個備份或還原任務。
+ 您無法從 Amazon RDS 上的 SQL Server 執行原生日誌備份。
+ RDS 支援高達 64 TiB 的資料庫原生還原。SQL Server Express 上原生還原的資料庫不能超過 10 GB。
+ 在維護時段或每當 Amazon RDS 正在擷取資料庫的快照時，您無法進行原生備份。如果原生備份工作與 RDS 每日備份時段重疊，則會取消原生備份工作。
+ 在異地同步備份資料庫執行個體上，原本就只能還原以完整還原模式所備份的資料庫。
+ 不支援在交易內呼叫 RDS 程序來進行原生備份和還原。
+ 使用對稱加密 AWS KMS key 來加密備份。Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。
+ 原生備份檔案是在「加密限定」加密模式下，以指定的 KMS 金鑰加密。當您還原已加密的備份檔案時，請注意它們是以「加密限定」加密模式所加密。
+ 您無法還原含有 FILESTREAM 檔案群組的資料庫。
+ 當您傳遞`@enable_bucket_default_encryption=1`至備份預存程序時，透過 S3 儲存貯體的預設加密組態支援使用 (SSE-KMS) 的 Amazon S3 伺服器端加密。 AWS KMS 根據預設，還原支援 S3 物件的伺服器端加密。

  當您將 KMS 金鑰提供給預存程序時，任何原生備份和還原都會使用 KMS 金鑰在用戶端上加密和解密。當 時`@enable_bucket_default_encryption=0`，或當 S3 儲存貯體設定的預設加密金鑰時， 會將備份 AWS 存放在具有 SSE-S3 的 S3 儲存貯體中`@enable_bucket_default_encryption=1`。
+ 使用 S3 存取點時，存取點無法設定為使用 RDS 內部 VPC。
+ 為了獲得最高效能，我們建議您在區域中可使用目錄儲存貯體或目錄儲存貯體的存取點。

在建立、複製和還原備份檔案時，如果您的資料庫可以離線，建議您使用原生備份與還原將資料庫遷移至 RDS。如果您的內部部署資料庫無法離線，建議您使用 AWS Database Migration Service 將資料庫遷移至 Amazon RDS。如需詳細資訊，請參閱[什麼是 AWS Database Migration Service？](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 

原生備份與還原並無法取代跨區域快照複製功能的資料復原能力。我們建議您使用快照複製將資料庫快照複製到另一個 AWS 區域，以便在 Amazon RDS 中進行跨區域災難復原。如需詳細資訊，請參閱[複製 Amazon RDS 的資料庫快照](USER_CopySnapshot.md)。

# 設定原生備份與還原
<a name="SQLServer.Procedural.Importing.Native.Enabling"></a>

若要設定原生備份與還原，您需要設定三個元件：

1. 用來儲存備份檔案的 Amazon S3 儲存貯體。

   您須有 S3 儲存貯體用於備份檔案，然後上傳您要遷移到 RDS 的備份。如果您已經有 Amazon S3 儲存貯體，則可直接使用。如果沒有，您可以[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)。或者，當您使用 `SQLSERVER_BACKUP_RESTORE` 新增 AWS 管理主控台選項時，可以選擇替您建立新的儲存貯體。

   如需有關使用 S3 的詳細資訊，請參閱 [Amazon Simple Storage Service 使用者指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)。

1. 存取儲存貯體的 AWS Identity and Access Management (IAM) 角色。

   如果您已經有 IAM 角色，則可直接使用。當您使用 AWS 管理主控台新增 `SQLSERVER_BACKUP_RESTORE` 選項時，可以選擇替您建立新的 IAM 角色。或者，您也可以手動建立新的。

   如果您想要手動建立新的 IAM 角色，請採取下一節所討論的方法。如果您想要將信任關係和許可政策連接到現有 IAM 角色，請執行相同的動作。

1. 在資料庫執行個體的選項群組中新增的 `SQLSERVER_BACKUP_RESTORE` 選項。

   若要在資料庫執行個體上啟用原生備份與還原，請將 `SQLSERVER_BACKUP_RESTORE` 選項新增至資料庫執行個體上的選項群組。如需詳細資訊和指示，請參閱[SQL Server 對原生備份與還原的支援](Appendix.SQLServer.Options.BackupRestore.md)。

## 手動建立原生備份與還原的 IAM 角色
<a name="SQLServer.Procedural.Importing.Native.Enabling.IAM"></a>

如果您要手動建立新的 IAM 角色，以用於原生備份和還原，您可以這麼做。在此情況下，您建立角色將 Amazon RDS 服務的許可委派給 Amazon S3 儲存貯體。當您建立 IAM 角色時，您會連接信任關係和許可政策。信任關係可讓 RDS 承擔此角色。許可政策定義此角色可執行的動作。如需有關建立角色的詳細資訊，請參閱[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

對於原生備份與還原功能，請使用類似本節範例的信任關係和許可政策。在下列範例中，我們使用服務原則名稱 `rds.amazonaws.com` 做為所有服務帳戶的別名。在其他範例中，我們指定 Amazon Resource Name (ARN)，以識別我們在信任政策中授予存取的另一個帳戶、使用者或角色。

建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容金鑰，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
+ 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
+ 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 ARN。針對原生備份與還原，請確認同時包括資料庫選項群組和資料庫執行個體，如以下範例所示。

**Example 與原生備份與還原全域條件內容索引鍵的信任關係**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": [
                        "arn:aws:rds:Region:0123456789:db:db_instance_identifier",
                        "arn:aws:rds:Region:0123456789:og:option_group_name"
                    ],
                    "aws:SourceAccount": "0123456789"
                }
            }
        }
    ]
}
```

下列範例使用 ARN 來指定資源。如需有關使用 ARN 的詳細資訊，請參閱 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

**Example 原生備份與還原的許可政策 (無加密支援)**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:GetObjectAttributes",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

**Example 原生備份與還原的許可政策 (有加密支援)**  
如果您要將備份檔案加密，請在許可政策中包含加密金鑰。如需加密金鑰的詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[入門](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)。  
您必須使用對稱加密 KMS 金鑰，為您的備份加密。Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。  
IAM 角色也必須是 KMS 金鑰的金鑰使用者和金鑰管理員，也就是說，這必須在金鑰政策中指定。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToKey",
      "Effect": "Allow",
      "Action": [
        "kms:DescribeKey",
        "kms:GenerateDataKey",
        "kms:Encrypt",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id"
    },
    {
      "Sid": "AllowAccessToS3",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
    },
    {
      "Sid": "GetS3Info",
      "Effect": "Allow",
      "Action": [
        "s3:GetObjectAttributes",
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

**Example 在沒有加密支援的情況下，使用存取點進行原生備份和還原的許可政策**  
使用 S3 存取點所需的動作與 S3 儲存貯體相同。資源路徑已更新以符合 S3 存取點 ARN 模式。  
存取點必須設定為使用**網路原始伺服器：網際網路**，因為 RDS 不會發佈私有 VPCs。來自 RDS 執行個體的 S3 流量不會經過公有網際網路，因為它會經過私有 VPCs。  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
                ],
            "Resource": [
            "arn:aws:s3:us-east-1:111122223333:accesspoint/amzn-s3-demo-ap",
            "arn:aws:s3:::underlying-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectAttributes",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
                ],
                "Resource": [
                "arn:aws:s3:us-east-1:111122223333:accesspoint/amzn-s3-demo-ap/*",
                    "arn:aws:s3:::underlying-bucket/*"
                    ]
                }
            ]   
}
```

**Example 使用無加密支援的目錄儲存貯體存取點進行原生備份和還原的許可政策**  
目錄儲存貯體使用與一般用途儲存貯體不同的[工作階段型授權機制](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-authenticating-authorizing.html)，因此原生備份還原的唯一必要許可是儲存貯體層級的「s3express：CreateSession」許可。若要設定物件層級存取，您必須將[存取點用於目錄儲存貯](https://docs.aws.amazon.com//AmazonS3/latest/userguide/access-points-directory-buckets-policies.html)體。  
存取點必須設定為使用**網路原始伺服器：網際網路**，因為 RDS 不會發佈私有 VPCs。來自 RDS 執行個體的 S3 流量不會經過公有網際網路，因為它會經過私有 VPCs。  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action": "s3express:CreateSession",
        "Resource": 
            [
                "arn:aws:s3express:us-east-1:111122223333:accesspoint/amzn-s3-demo-accesspoint--use1-az6--xa-s3",
                "arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--use1-az6--x-s3"
            ]
        }
    ]
}
```

# 使用原生備份與還原
<a name="SQLServer.Procedural.Importing.Native.Using"></a>

啟用並設定原生備份與還原之後，就可以開始使用此選項。您要先連接至 Microsoft SQL Server 資料庫，然後呼叫 Amazon RDS 預存程序來執行工作。如需連接資料庫的指示，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

您需要提供 Amazon S3 儲存貯體和檔案的 Amazon Resource Name (ARN)，才能使用某些預存程序。ARN 的格式為 `arn:aws:s3:::bucket_name/file_name.extension`。Amazon S3 不需要 ARNs中的帳戶號碼或 AWS 區域。

如果您也提供選用的 KMS 金鑰，金鑰 ARN 的格式為 `arn:aws:kms:region:account-id:key/key-id`。如需詳細資訊，請參閱 [ Amazon 資源名稱 (ARNs) AWS 和服務命名空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。您必須使用對稱加密 KMS 金鑰，為您的備份加密。Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。

**注意**  
無論您是否使用 KMS 金鑰，原生備份和還原任務預設會透過 SSE-S3 為上傳至 S3 的檔案啟用伺服器端進階加密標準 (AES) 256 位元加密。傳入`@enable_bucket_default_encryption=1`備份預存程序會使用 S3 儲存貯體設定的預設加密金鑰。

如需如何呼叫每個預存程序的相關指示，請參閱下列主題：
+ [備份資料庫](#SQLServer.Procedural.Importing.Native.Using.Backup)
+ [還原資料庫](#SQLServer.Procedural.Importing.Native.Using.Restore)
+ [還原日誌](#SQLServer.Procedural.Importing.Native.Restore.Log)
+ [完成資料庫還原](#SQLServer.Procedural.Importing.Native.Finish.Restore)
+ [處理部分還原的資料庫](#SQLServer.Procedural.Importing.Native.Partially.Restored)
+ [取消任務](#SQLServer.Procedural.Importing.Native.Using.Cancel)
+ [追蹤任務的狀態](#SQLServer.Procedural.Importing.Native.Tracking)

## 備份資料庫
<a name="SQLServer.Procedural.Importing.Native.Using.Backup"></a>

若要備份資料庫，請使用 `rds_backup_database` 預存程序。

**注意**  
在維護時段或 Amazon RDS 正在擷取快照時，您無法備份資料庫。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Backup.Syntax"></a>

```
exec msdb.dbo.rds_backup_database
	@source_db_name='database_name',
	@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@overwrite_s3_backup_file=0|1],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'],
	[@number_of_files=n],
	[@enable_bucket_default_encryption=0|1];
```

下列是必要參數：
+ `@source_db_name` – 要備份之資料庫的名稱。
+ `@s3_arn_to_backup_to` – ARN，指出要用於備份之目錄儲存貯體的 Amazon S3 儲存貯體、存取點、目錄儲存貯體或存取點，以及備份檔案名稱。

  檔案可以有任何副檔名，但通常使用 `.bak`。請注意，存取點 ARNs 格式必須為 `arn:aws:s3:us-east-1:111122223333:access-point-name/object/key`。

下列是選用參數：
+ `@kms_master_key_arn` – 對稱加密 KMS 金鑰的 ARN，用來加密項目。
  + 您無法使用預設的加密金鑰。如果您使用預設金鑰，資料庫將不會備份。
  +  如果您未指定 KMS 金鑰識別碼，則不會加密備份檔案。如需詳細資訊，請參閱[加密 Amazon RDS 資源](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)。
  + 當您指定 KMS 金鑰時，會使用用戶端加密。
  + Amazon RDS 不支援非對稱 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)。
+ `@overwrite_s3_backup_file` – 此值指出是否覆寫現有的備份檔案。
  + `0` – 不覆寫現有檔案。此為預設值。

    將 `@overwrite_s3_backup_file` 設為 0 時，如果檔案已存在，則傳回錯誤。
  + `1` – 即使現有檔案不是備份檔案，只要是指定的名稱，就覆寫檔案。
+ `@type` – 備份的類型。
  + `DIFFERENTIAL` – 建立差異備份。
  + `FULL` – 建立完整備份。此為預設值。

  差異備份是以前次完整備份為基礎。您不能在前次完整備份和差異備份之間擷取快照，差異備份才能運作。如果您要建立差異備份，但快照存在，請先建立另一個完整備份，再繼續建立差異備份。

  您可以使用下列範例 SQL 查詢來尋找前次完整備份或快照：

  ```
  select top 1
  database_name
  , 	backup_start_date
  , 	backup_finish_date
  from    msdb.dbo.backupset
  where   database_name='mydatabase'
  and     type = 'D'
  order by backup_start_date desc;
  ```
+ `@number_of_files` – 要將備份分割 (分塊) 的檔案數目。上限為 10。
  + 完整和差異備份都支援多個備份。
  + 如果輸入值 1 或省略參數，則會建立單一備份檔案。

  提供檔案共有的字首，再於末尾加上星號 (`*`)。星號可以位於 S3 ARN *file\$1name* 部分的任何位置。星號會由所產生檔案 (以 `1-of-number_of_files` 開頭) 中的一系列字母數字字串取代。

  例如，如果 S3 ARN 中的檔案名稱是 `backup*.bak` 且您設定 `@number_of_files=4`，則產生的備份檔案為 `backup1-of-4.bak`、`backup2-of-4.bak`、`backup3-of-4.bak` 及 `backup4-of-4.bak`。
  + 如果任一檔案名稱已存在，且 `@overwrite_s3_backup_file` 為 0，則會傳回錯誤。
  + 多個備份在 S3 ARN 的 *file\$1name* 部分中只能有一個星號。
  + 單一檔案備份在 S3 ARN 的 *file\$1name* 部分中可以有任意數量的星號。不會從所產生檔案名稱中移除星號。
+ `@block_size` – 區塊大小 (以位元組為單位)，指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數，最高可達 4194304 位元組 (4 MB)。
+ `@buffer_count` – 用於備份程序的 I/O 緩衝區總數。
+ `@enable_bucket_default_encryption` – 指出是否在 S3 中使用 S3 儲存貯體預設加密組態進行伺服器端加密的值。無論此設定為何，目錄儲存貯體一律使用儲存貯體的預設加密組態。
  + `0` – 伺服器端加密透過 SSE-S3 使用進階加密標準 (AES) 256 位元加密。
  + `1` – 伺服器端加密使用 S3 儲存貯體設定[的預設加密](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-encryption.html)。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Backup.Examples"></a>

**Example 差異備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@overwrite_s3_backup_file=1,
@type='DIFFERENTIAL';
```

**Example 具有用戶端加密的完整備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 多個備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4;
```

**Example 多個差異備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@type='DIFFERENTIAL',
@number_of_files=4;
```

**Example 多個備份與加密**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE',
@number_of_files=4;
```

**Example 多個備份與 S3 覆寫**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@number_of_files=4;
```

**Example 備份與區塊大小**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@block_size=512;
```

**Example 多檔案備份與 `@max_transfer_size` 和 `@buffer_count`**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=4,
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example 單一檔案備份與 @number\$1of\$1files 參數**  
此範例會產生名為 `backup*.bak` 的備份檔案。  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@number_of_files=1;
```

**Example 具有伺服器端加密的完整備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/backup*.bak',
@overwrite_s3_backup_file=1,
@type='FULL',
@enable_bucket_default_encryption=1;
```

**Example 使用存取點完整備份的**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

**Example 使用目錄儲存貯體的存取點進行完整備份**  

```
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3express:us-east-1:123456789012:accesspoint/my-access-point--use1-az6--xa-s3/object/backup1.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
```

## 還原資料庫
<a name="SQLServer.Procedural.Importing.Native.Using.Restore"></a>

若要還原資料庫，請呼叫 `rds_restore_database` 預存程序。在還原任務完成且資料庫開啟後，Amazon RDS 會建立資料庫的初始快照。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Restore.Syntax"></a>

```
exec msdb.dbo.rds_restore_database
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension',
	@with_norecovery=0|1,
	[@keep_cdc=0|1],
	[@data_file_volume='D:|H:|I:|J:'],
	[@log_file_volume='D:|H:|I:|J:'],
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
        [@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n],
	[@type='DIFFERENTIAL|FULL'];
```

下列是必要參數：
+ `@restore_db_name`– 要還原之資料庫的名稱。資料庫名稱是唯一的。您不能還原與現有資料庫同名的資料庫。
+ `@s3_arn_to_restore_from` – 此 ARN 指出 Amazon S3 字首和用來還原資料庫的備份檔案名稱。
  + 若為單一檔案備份，請提供整個檔案名稱。
  + 若為多檔案備份，請提供檔案共有的字首，再於末尾加上星號 (`*`)。
    + 如果使用目錄儲存貯體，`/*`由於[目錄儲存貯體的差異](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-differences.html)，ARN 必須以 結尾。
  + 如果 `@s3_arn_to_restore_from` 是空的，則會傳回下列錯誤訊息：S3 ARN 字首不得為空。

以下為差異還原的必要參數，但為完整還原的選用參數：
+ `@with_norecovery` – 用於還原操作的復原子句。
  + 設為 `0` 表示以 RECOVERY 還原。在此情況下，資料庫於還原之後會在線上。
  + 設為 `1` 表示以 NORECOVERY 還原。在此情況下，資料庫於還原任務完成之後會停留在 RESTORING 狀態。此方法可讓您進行後續差異還原。
  + 若為 DIFFERENTIAL 還原，請指定 `0` 或 `1`。
  + 若為 `FULL` 還原，此值預設為 `0`。

下列是選用參數：
+ `@keep_cdc` – 指出是否要在還原的資料庫上保留變更資料擷取 (CDC) 組態。設定為 `1` 以啟用 KEEP\$1CDC，`0`設定為停用。預設值為 `0`。
+ `@data_file_volume` – 指定資料庫資料檔案的磁碟機代號。預設值為 `D:`。
+ `@log_file_volume` – 指定資料庫日誌檔案的磁碟機代號 預設值為 `D:`。
+ `@kms_master_key_arn` – 如果您已將備份檔案加密，則此為用來解密檔案的 KMS 金鑰。

  當您指定 KMS 金鑰時，會使用用戶端加密。
+ `@type` – 還原的類型。有效類型為 `DIFFERENTIAL` 和 `FULL`。預設值為 `FULL`。
+ `@block_size` – 區塊大小 (以位元組為單位)，指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數，最高可達 4194304 位元組 (4 MB)。
+ `@buffer_count` – 用於備份程序的 I/O 緩衝區總數。

**注意**  
若為差異還原，資料庫必須處於 RESTORING 狀態，或必須已存在一個以 NORECOVERY 還原的任務。  
當資料庫在線上時，您無法還原後續差異備份。  
如果資料庫已有一個使用 RECOVERY 的待定還原任務，則您無法再提交另一個還原任務。  
不支援同時使用 NORECOVERY 和 KEEP\$1CDC 進行完整還原。  
具有跨區域僅供讀取複本的執行個體不支援所有原生還原。  
對於支援的組態，在具有僅供讀取複本的多可用區域執行個體上還原資料庫，與在多可用區域執行個體上還原資料庫類似。您不需要採取任何其他動作來還原複本上的資料庫。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Restore.Examples"></a>

**Example 單一檔案還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

**Example 多檔案還原**  
若要避免在還原多個檔案時發生錯誤，請確保所有備份檔案具有相同的字首，以及沒有其他檔案使用該字首。  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*';
```

**Example 含 RECOVERY 的完整資料庫還原**  
下列三個範例執行同樣的任務，都是含 RECOVERY 的完整還原。  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
[@type='DIFFERENTIAL|FULL'];
```

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=0;
```

**Example 含加密的完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 還原與區塊大小**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@block_size=512;
```

**Example 多檔案還原與 @max\$1transfer\$1size 和 @buffer\$1count**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup*',
@max_transfer_size=4194304,
@buffer_count=10;
```

**Example 含 NORECOVERY 的完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='FULL',
@with_norecovery=1;
```

**Example 含 NORECOVERY 的差異還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;
```

**Example 含 RECOVERY 的差異還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=0;
```

**Example 使用存取點搭配 RECOVERY 進行完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point/object/backup1.bak',
@with_norecovery=0;
```

**Example 使用 KEEP\$1CDC 進行完整資料庫還原**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 還原日誌
<a name="SQLServer.Procedural.Importing.Native.Restore.Log"></a>

若要還原日誌，請呼叫 `rds_restore_log` 預存程序。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Syntax"></a>

```
exec msdb.dbo.rds_restore_log 
	@restore_db_name='database_name',
	@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/log_file_name.extension',
	[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
	[@with_norecovery=0|1],
	[@keep_cdc=0|1],
	[@stopat='datetime'],
	[@block_size=512|1024|2048|4096|8192|16384|32768|65536],
        [@max_transfer_size=n],
        [@buffer_count=n];
```

下列是必要參數：
+ `@restore_db_name` – 資料庫的名稱，表示要還原其日誌。
+ `@s3_arn_to_restore_from` – 此 ARN 指出 Amazon S3 字首和用來還原日誌的日誌檔案名稱。檔案可以有任何副檔名，但通常使用 `.trn`。

  如果 `@s3_arn_to_restore_from` 是空的，則會傳回下列錯誤訊息：S3 ARN 字首不得為空。

下列是選用參數：
+ `@keep_cdc` – 指出是否要在還原的資料庫上保留變更資料擷取 (CDC) 組態。設為 1 以啟用 KEEP\$1CDC，設為 0 以停用。預設值為 0。
+ `@kms_master_key_arn` – 如果您已將日誌加密，則此為用來解密日誌的 KMS 金鑰。
+ `@with_norecovery` – 用於還原操作的復原子句。此值預設為 `1`。
  + 設為 `0` 表示以 RECOVERY 還原。在此情況下，資料庫於還原之後會在線上。當資料庫在線上時，您無法還原更多的日誌備份。
  + 設為 `1` 表示以 NORECOVERY 還原。在此情況下，資料庫於還原任務完成之後會停留在 RESTORING 狀態。此方法可讓您進行後續日誌還原。
+ `@stopat` – 此值指定將資料庫還原至指定日期和時間的狀態 (日期時間格式)。只有在指定日期和時間之前寫入的交易日誌記錄，才會套用至資料庫。

  如果不指定此參數 (NULL)，則會還原整個日誌。
+ `@block_size` – 區塊大小 (以位元組為單位)，指定備份操作的實體區塊大小。有效值為 512、1024、2048、4096、8192、16384、32768 和 65536
+ `@max_transfer_size` – 最大傳輸大小表示備份程序期間每個 I/O 操作傳輸的資料磁碟區上限 (以位元組為單位)。有效值為 65536 位元組 (64 KB) 的倍數，最高可達 4194304 位元組 (4 MB)。
+ `@buffer_count` – 用於備份程序的 I/O 緩衝區總數。

**注意**  
若為日誌還原，資料庫必須處於還原中狀態，或必須已存在一個以 NORECOVERY 還原的任務。  
當資料庫在線上時，您無法還原日誌備份。  
如果資料庫已有一個使用 RECOVERY 的待定還原任務，則您無法再提交日誌還原任務。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Restore.Log.Examples"></a>

**Example 日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 含加密的日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@kms_master_key_arn='arn:aws:kms:us-east-1:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

**Example 含 NORECOVERY 的日誌還原**  
下列兩個範例執行同樣的任務，都是含 NORECOVERY 的日誌還原。  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=1;
```

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn';
```

**Example 還原與區塊大小**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@block_size=512;
```

**Example 含 RECOVERY 的日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0;
```

**Example 含 STOPAT 子句的日誌還原**  

```
exec msdb.dbo.rds_restore_log
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/mylog.trn',
@with_norecovery=0,
@stopat='2019-12-01 03:57:09';
```

**Example 使用 KEEP\$1CDC 還原日誌**  

```
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@keep_cdc=1;
```

## 完成資料庫還原
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore"></a>

如果資料庫的前次還原任務是使用 `@with_norecovery=1` 執行，則資料庫現在處於 RESTORING 狀態。使用 `rds_finish_restore` 預存程序開啟資料庫，以正常操作。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Finish.Restore.Syntax"></a>

```
exec msdb.dbo.rds_finish_restore @db_name='database_name';
```

**注意**  
若要使用此方法，資料庫必須處於 RESTORING 狀態，且沒有任何待定還原任務。  
若要完成還原資料庫，請使用 master 登入。或使用最近以 NORECOVERY 還原資料庫或日誌的使用者登入。

## 處理部分還原的資料庫
<a name="SQLServer.Procedural.Importing.Native.Partially.Restored"></a>

### 捨棄部分還原的資料庫
<a name="SQLServer.Procedural.Importing.Native.Drop.Partially.Restored"></a>

若要捨棄局部還原的資料庫 (停留在 RESTORING 狀態)，請使用 `rds_drop_database` 預存程序。

```
exec msdb.dbo.rds_drop_database @db_name='database_name';
```

**注意**  
如果資料庫已有待定還原任務或已完成還原任務，則您無法提交 DROP 資料庫請求。  
若要捨棄資料庫，請使用 master 登入。或使用最近以 NORECOVERY 還原資料庫或日誌的使用者登入。

### 部分還原資料庫的快照還原和時間點復原行為
<a name="SQLServer.Procedural.Importing.Native.Snapshot.Restore"></a>

來源執行個體中的局部還原資料庫 (停留在 RESTORING 狀態)，在快照還原和時間點復原期間，將會從目標執行個體中捨棄。

## 取消任務
<a name="SQLServer.Procedural.Importing.Native.Using.Cancel"></a>

若要取消備份或還原任務，請呼叫 `rds_cancel_task` 預存程序。

**注意**  
您無法取消 FINISH\$1RESTORE 任務。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Cancel.Syntax"></a>

```
exec msdb.dbo.rds_cancel_task @task_id=ID_number;
```

以下是必要參數：
+ `@task_id`– 要取消之任務的 ID。您可以呼叫 `rds_task_status` 來取得任務 ID。

## 追蹤任務的狀態
<a name="SQLServer.Procedural.Importing.Native.Tracking"></a>

若要追蹤備份和還原任務的狀態，請呼叫 `rds_task_status` 預存程序。如果您不提供任何參數，預存程序會傳回所有任務的狀態。任務的狀態大約每兩分鐘更新一次。查詢歷程記錄會保留 36 天。

### Usage
<a name="SQLServer.Procedural.Importing.Native.Tracking.Syntax"></a>

```
exec msdb.dbo.rds_task_status
	[@db_name='database_name'],
	[@task_id=ID_number];
```

下列是選用參數：
+ `@db_name`– 要顯示任務狀態之資料庫的名稱。
+ `@task_id`– 要顯示任務狀態之任務的 ID。

### 範例
<a name="SQLServer.Procedural.Importing.Native.Tracking.Examples"></a>

**Example 列出特定任務的狀態**  

```
exec msdb.dbo.rds_task_status @task_id=5;
```

**Example 列出特定資料庫和任務的狀態**  

```
exec msdb.dbo.rds_task_status
@db_name='my_database',
@task_id=5;
```

**Example 列出特定資料庫上的所有任務及其狀態**  

```
exec msdb.dbo.rds_task_status @db_name='my_database';
```

**Example 列出目前執行個體上的所有任務及其狀態**  

```
exec msdb.dbo.rds_task_status;
```

### 回應
<a name="SQLServer.Procedural.Importing.Native.Tracking.Response"></a>

`rds_task_status` 預存程序會傳回下列幾欄。


****  

| 資料欄 | 描述 | 
| --- | --- | 
| `task_id` |  任務的 ID。  | 
| `task_type` |  任務類型取決於輸入參數，如下所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html) 當資料庫隨著下列還原任務完成而開啟之後，Amazon RDS 會建立資料庫的初始快照： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `database_name` |  與任務相關聯之資料庫的名稱。  | 
| `% complete` |  任務的進度 (以百分比值表示)。  | 
| `duration (mins)` |  任務所花的時間 (以分鐘為單位)。  | 
| `lifecycle` |  任務的狀態。可能的狀態如下： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html)  | 
| `task_info` |  任務的其他資訊。 如果備份或還原資料庫時發生錯誤，此欄會包含此錯誤的相關資訊。如需可能錯誤的清單及緩解策略，請參閱[故障診斷](SQLServer.Procedural.Importing.Native.Troubleshooting.md)。  | 
| `last_updated` |  上次更新任務狀態的日期和時間。進度每完成 5% 後，就會更新一次狀態。  | 
| `created_at` | 建立任務的日期和時間。 | 
| S3\$1object\$1arn | 此 ARN 指出 Amazon S3 字首，以及正在備份或還原的檔案名稱。 | 
| `overwrite_s3_backup_file` |  呼叫備份任務時所指定之 `@overwrite_s3_backup_file` 參數的值。如需詳細資訊，請參閱[備份資料庫](#SQLServer.Procedural.Importing.Native.Using.Backup)。  | 
| KMS\$1master\$1key\$1arn | 用於加密 (備份時) 和解密 (還原時) 的 KMS 金鑰的 ARN。 | 
| filepath | 不適用於原生備份與還原任務。 | 
| overwrite\$1file | 不適用於原生備份與還原任務。 | 

# 壓縮備份檔案
<a name="SQLServer.Procedural.Importing.Native.Compression"></a>

若要節省 Amazon S3 儲存貯體的空間，您可以壓縮備份檔案。如需有關壓縮備份檔案的詳細資訊，請參閱 Microsoft 文件中的[備份壓縮](https://msdn.microsoft.com/en-us/library/bb964719.aspx)。

下列資料庫版本支援壓縮備份檔案：
+ Microsoft SQL Server Enterprise Edition 
+ Microsoft SQL Server Standard Edition 

若要驗證備份檔案的壓縮選項，請執行下列程式碼：

```
1. exec rdsadmin.dbo.rds_show_configuration 'S3 backup compression';
```

若要對備份檔案啟用壓縮，請執行下列程式碼：

```
1. exec rdsadmin.dbo.rds_set_configuration 'S3 backup compression', 'true';
```

若要對備份檔案停用壓縮，請執行下列程式碼：

```
1. exec rdsadmin.dbo.rds_set_configuration 'S3 backup compression', 'false';
```

# 故障診斷
<a name="SQLServer.Procedural.Importing.Native.Troubleshooting"></a>

下列是您使用原生備份與還原時可能遇到的問題。


****  

| 問題 | 故障診斷建議 | 
| --- | --- | 
|  資料庫備份/還原選項尚未啟用，或正在進行啟用。請稍後再試。  |  確定您已將 `SQLSERVER_BACKUP_RESTORE` 選項新增至與資料庫執行個體產生關聯的資料庫選項群組。如需詳細資訊，請參閱 [新增原生備份與還原選項](Appendix.SQLServer.Options.BackupRestore.md#Appendix.SQLServer.Options.BackupRestore.Add)。  | 
|  EXECUTE 許可在物件 '*rds\$1backup\$1database*'、資料庫 'msdb'、結構描述 'dbo' 上遭到拒絕。  |  執行預存程序時，請務必使用主要使用者。如果您即使以主要使用者身分登入仍發生此錯誤，可能是因為管理員使用者許可不相符。若要重設主要使用者，請使用 AWS 管理主控台。請參閱[重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)。  | 
|  EXECUTE 許可在物件 '*rds\$1restore\$1database*'、資料庫 'msdb'、結構描述 'dbo' 上遭到拒絕。  |  執行預存程序時，請務必使用主要使用者。如果您即使以主要使用者身分登入仍發生此錯誤，可能是因為管理員使用者許可不相符。若要重設主要使用者，請使用 AWS 管理主控台。請參閱[重設 Amazon RDS for SQL Server 主要使用者的 db\$1owner 角色成員資格](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)。  | 
|  存取遭拒  | 備份或還原程序無法存取備份檔案。這通常是如下的問題所造成： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Troubleshooting.html)  | 
|  <edition\$1name> 版本不支援備份壓縮資料庫  |  只有 Microsoft SQL Server Enterprise Edition 才支援壓縮備份檔案， Standard Edition。 如需更多詳細資訊，請參閱 [壓縮備份檔案](SQLServer.Procedural.Importing.Native.Compression.md)。  | 
|  金鑰 <ARN> 不存在  |  您嘗試還原已加密的備份，但未提供有效的加密金鑰。請檢查加密金鑰並重試。如需更多詳細資訊，請參閱 [還原資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)。  | 
|  請使用正確的類型重新發行任務並覆寫屬性  |  如果您嘗試備份資料庫，且提供已存在之檔案的名稱，但將覆寫屬性設為 false，則儲存操作會失敗。若要修正此錯誤，請提供尚不存在之檔案的名稱，或將覆寫屬性設為 true。 如需更多詳細資訊，請參閱 [備份資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Backup)。 也可能是您想要還原資料庫，但不慎呼叫 `rds_backup_database` 預存程序。在此情況下，請改為呼叫 `rds_restore_database` 預存程序。 如需更多詳細資訊，請參閱 [還原資料庫](SQLServer.Procedural.Importing.Native.Using.md#SQLServer.Procedural.Importing.Native.Using.Restore)。 如果您想要還原資料庫，且呼叫 `rds_restore_database` 預存程序，請確定您提供有效備份檔案的名稱。 如需更多詳細資訊，請參閱 [使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)。  | 
|  請指定與 RDS 執行個體位於相同區域的儲存貯體  |  如果 Amazon S3 儲存貯體和 Amazon RDS 資料庫執行個體位於不同的 AWS 區域，您無法備份到或還原自這個儲存貯體。您可以使用 Amazon S3 複寫將備份檔案複製到正確的 AWS 區域。 如需詳細資訊，請參閱 Amazon S3 文件中的[跨區域複寫](https://docs.aws.amazon.com/AmazonS3/latest/userguide/crr.html)。  | 
|  指定的儲存貯體不存在  | 請確認您以正確格式提供儲存貯體和檔案的正確 ARN。 如需更多詳細資訊，請參閱 [使用原生備份與還原](SQLServer.Procedural.Importing.Native.Using.md)。  | 
|  使用者 <ARN> 未獲授權，不可對資源 <ARN> 執行 <kms action>  |  您請求執行加密操作，但未提供正確的 AWS KMS 許可。請確認您有正確許可，或新增許可。 如需更多詳細資訊，請參閱 [設定原生備份與還原](SQLServer.Procedural.Importing.Native.Enabling.md)。  | 
|  還原」任務無法從 10 個以上的備份檔案中還原。請減少符合的檔案數目，然後再試一次。  |  減少您嘗試從中還原的檔案數量。必要時您可以提高每個個別檔案的大小。  | 
|  資料庫 '*database\$1name*' 已存在。不允許兩個僅大小寫或口音不同的資料庫。選擇不同的資料庫名稱。  |  您不能還原與現有資料庫同名的資料庫。資料庫名稱是唯一的。  | 

# 使用其他方法來匯入和匯出 SQL Server 資料
<a name="SQLServer.Procedural.Importing.Snapshots"></a>

接下來，您可以找到有關使用快照將 Microsoft SQL Server 資料匯入 Amazon RDS 的資訊。您還可以找到有關從執行 SQL Server 的 RDS 資料庫執行個體匯出快照的資訊。

只要您的案例有支援使用原生備份與還原功能，您即可輕鬆將資料移進和移出 Amazon RDS。如需詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。

**注意**  
Amazon RDS for Microsoft SQL Server 不支援將資料匯入 `msdb` 資料庫。

## 使用快照，將資料匯入 RDS for SQL Server
<a name="SQLServer.Procedural.Importing.Procedure"></a>

**使用快照將資料匯入 SQL Server 資料庫執行個體**

1. 建立資料庫執行個體。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

1. 防止應用程式存取目的地資料庫執行個體。

   如果在匯入資料時防止存取您的資料庫執行個體，資料傳輸會較快。此外，您不必擔心載入資料時，其他應用程式無法同時寫入資料庫執行個體而引起的衝突。如果發生問題而必須轉返到先前的資料庫快照，唯一失去的變更只是已匯入的資料。您可以在解決問題之後重新匯入此資料。

   如需有關控制存取資料庫執行個體的資訊，請參閱[使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

1. 建立目標資料庫的快照。

   如果目標資料庫中已填入資料，建議您先建立資料庫的快照，再匯入資料。如果資料匯入發生問題，或您想要捨棄變更，您可以使用快照將資料庫還原到先前的狀態。如需資料庫快照的相關資訊，請參閱[為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。
**注意**  
當您建立資料庫快照時，資料庫的 I/O 操作會在備份進行時暫停一會兒 (毫秒)。

1. 在目標資料庫上停用自動備份。

   在目標資料庫執行個體上停用自動備份可提升您匯入資料時的效能，因為停用自動備份時，Amazon RDS 不會記錄交易。但有一些注意事項。需要有自動備份才能執行時間點復原。因此，您無法在匯入資料期間將資料庫還原至特定時間點。此外，還會清除資料庫執行個體上建立的任何自動備份，除非您選擇保留它們。

   選擇保留自動備份可幫助您避免資料意外刪除。Amazon RDS 也會儲存資料庫執行個體屬性以及各自動化備份，以利復原。使用此選項讓您可以在刪除後，還原備份保留期間刪除的特定時間資料庫執行個體。自動備份會在指定備份時段結束時自動刪除，就和它們在作用中資料庫執行個體一樣。

   您也可以使用先前的快照來復原資料庫，您已建立的任何快照仍然可用。如需自動備份的相關資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

1. 停用外部索引鍵限制 (如適用)。

    如果需要停用外部索引鍵限制，您可以利用下列指令碼這樣做。

   ```
   --Disable foreign keys on all tables
       DECLARE @table_name SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables;
       
       OPEN table_cursor;
       FETCH NEXT FROM table_cursor INTO @table_name;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' NOCHECK CONSTRAINT ALL';
         EXEC (@cmd);
         FETCH NEXT FROM table_cursor INTO @table_name;
       END
       
       CLOSE table_cursor;
       DEALLOCATE table_cursor;
       
       GO
   ```

1. 捨棄索引 (如適用)。

1. 停用觸發條件 (如適用)。

    如果需要停用觸發條件，您可以利用下列指令碼這樣做。

   ```
   --Disable triggers on all tables
       DECLARE @enable BIT = 0;
       DECLARE @trigger SYSNAME;
       DECLARE @table SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name,
        table_object.name table_name
       FROM sysobjects trigger_object
       JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id
       WHERE trigger_object.type = 'TR';
       
       OPEN trigger_cursor;
       FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         IF @enable = 1
            SET @cmd = 'ENABLE ';
         ELSE
            SET @cmd = 'DISABLE ';
       
         SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' ';
         EXEC (@cmd);
         FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       END
       
       CLOSE trigger_cursor;
       DEALLOCATE trigger_cursor;
       
       GO
   ```

1. 在來源 SQL Server 執行個體中，查詢您想要匯入到目的地資料庫執行個體的任何登入。

   SQL Server 將登入和密碼存放在 `master` 資料庫中。因為 Amazon RDS 不授權存取 `master` 資料庫，您無法直接將登入和密碼匯入目的地資料庫執行個體。反之，您必須查詢來源 SQL Server 執行個體上的 `master` 資料庫，以產生資料定義語言 (DDL) 檔案。此檔案應該包含您要新增至目的地資料庫執行個體的所有登入和密碼。此檔案還應該包含您要轉移的角色成員資格和許可。

   如需查詢 `master` 資料庫的相關資訊，請參閱 Microsoft 知識庫中的[在 SQL Server 的執行個體之間傳輸登入和密碼](https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/security/transfer-logins-passwords-between-instances)。

   此指令碼會輸出另一個指令碼，供您在目的地資料庫執行個體上執行。知識庫文章中的指令碼有下列程式碼：

   ```
   p.type IN 
   ```

   在出現 `p.type` 的每個地方，改用下列程式碼：

   ```
   p.type = 'S' 
   ```

1. 使用[匯入資料](#ImportData.SQLServer.Import)中的方法來匯入資料。

1. 授予應用程式存取目標資料庫執行個體的權利。

   資料匯入完成時，就可以授予您在匯入期間封鎖的那些應用程式存取資料庫執行個體的權利。如需有關控制存取資料庫執行個體的資訊，請參閱[使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

1. 在目標資料庫執行個體上啟用自動備份。

   如需自動備份的相關資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

1. 啟用外部索引鍵限制。

    如果您先前已停用外部索引鍵限制，現在可以利用下列指令碼來啟用它們。

   ```
   --Enable foreign keys on all tables
       DECLARE @table_name SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables;
       
       OPEN table_cursor;
       FETCH NEXT FROM table_cursor INTO @table_name;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' CHECK CONSTRAINT ALL';
         EXEC (@cmd);
         FETCH NEXT FROM table_cursor INTO @table_name;
       END
       
       CLOSE table_cursor;
       DEALLOCATE table_cursor;
   ```

1. 啟用索引 (如適用)。

1. 啟用觸發條件 (如適用)。

    如果您先前已停用觸發條件，現在可以利用下列指令碼來啟用它們。

   ```
   --Enable triggers on all tables
       DECLARE @enable BIT = 1;
       DECLARE @trigger SYSNAME;
       DECLARE @table SYSNAME;
       DECLARE @cmd NVARCHAR(MAX);
       DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name,
        table_object.name table_name
       FROM sysobjects trigger_object
       JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id
       WHERE trigger_object.type = 'TR';
       
       OPEN trigger_cursor;
       FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       
       WHILE @@FETCH_STATUS = 0 BEGIN
         IF @enable = 1
            SET @cmd = 'ENABLE ';
         ELSE
            SET @cmd = 'DISABLE ';
       
         SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' ';
         EXEC (@cmd);
         FETCH NEXT FROM trigger_cursor INTO @trigger, @table;
       END
       
       CLOSE trigger_cursor;
       DEALLOCATE trigger_cursor;
   ```

### 匯入資料
<a name="ImportData.SQLServer.Import"></a>

Microsoft SQL Server Management Studio 是所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含的圖形化 SQL Server 用戶端。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。若要尋找此下載檔，請造訪 [Microsoft 網站](https://www.microsoft.com/en-us/download)。

**注意**  
SQL Server Management Studio 只推出 Windows 應用程式版本。

SQL Server Management Studio 包含下列工具，您可用來將資料匯入 SQL Server 資料庫執行個體：
+ 產生和發佈指令碼精靈
+ 匯入和匯出精靈
+ 大量複製

#### 產生和發佈指令碼精靈
<a name="ImportData.SQLServer.MgmtStudio.ScriptWizard"></a>

「產生和發佈指令碼精靈」會建立指令碼，其中包含資料庫的結構描述、資料庫本身或兩者都有。您可以在本機 SQL Server 部署中產生資料庫的指令碼。然後，您可以執行指令碼，將其中包含的資訊傳輸至 Amazon RDS 資料庫執行個體。

**注意**  
如果資料庫是 1 GiB 或更大，只產生資料庫結構描述的指令碼會更有效率。然後，您使用 SQL Server 的「匯入和匯出」精靈或大量複製功能來傳輸資料。

如需「產生和發佈指令碼精靈」的詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms178078%28v=sql.105%29.aspx)。

在精靈中，請特別注意 **Set Scripting Options (設定指令碼編寫選項)** 頁面的進階選項，確保已選取您要讓指令碼包含的所有項目。例如，指令碼依預設不包含資料庫觸發條件。

產生並儲存指令碼之後，您可以使用 SQL Server Management Studio 來連接至資料庫執行個體，然後執行指令碼。

#### 匯入和匯出精靈
<a name="ImportData.SQLServer.MgmtStudio.ImportExportWizard"></a>

「匯入和匯出精靈」會建立一個特殊 Integration Services 套件，可用來將本機 SQL Server 資料庫中的資料複製到目的地資料庫執行個體。此精靈可篩選要複製到目的地資料庫執行個體的資料表，甚至是資料表內的元組。

**注意**  
「匯入和匯出精靈」很適合大型資料集，但從遠端匯出本機部署的資料時，可能不是最快的方法。若要使用更快的方法，請考慮採用 SQL Server 大量複製功能。

如需「匯入和匯出精靈」的詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms140052%28v=sql.105%29.aspx)。

在精靈的 **Choose a Destination (選擇目的地)** 頁面上，執行下列動作：
+ 在 **Server Name (伺服器名稱)** 中，輸入資料庫執行個體的端點名稱。
+ 對於伺服器驗證模式，請選擇 **Use SQL Server Authentication (使用 SQL Server 驗證)**。
+ 在 **User name (使用者名稱)** 和 **Password (密碼)** 中，輸入您為資料庫執行個體所建立之主要使用者的登入資料。

#### 大量複製
<a name="ImportData.SQLServer.MgmtStudio.BulkCopy"></a>

需要將來源資料庫中的資料複製到資料庫執行個體時，SQL Server 大量複製功能很有效率。大量複製可將您指定的資料寫入資料檔案，例如 ASCII 檔案。然後，您可以再次執行大量複製，將檔案的內容寫入目的地資料庫執行個體。

本節使用所有 SQL Server 版本都有的 **bcp** 公用程式。如需大量匯入和匯出操作的詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)。

**注意**  
使用大量複製之前，您必須先將資料庫結構描述匯入目的地資料庫執行個體。本主題稍早描述的「產生和發佈指令碼精靈」是此用途的絕佳工具。

下列命令連接至本機 SQL Server 執行個體。然後在現有 SQL Server 部署的 C:\$1 根目錄中，產生指定之資料表的 Tab 分隔檔。資料表以完整名稱指定，而文字檔案與所複製的資料表同名。

```
bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000 
```

上述程式碼包含下列選項：
+ `-n` 指定大量複製使用要複製之資料的原生資料類型。
+ `-S` 指定 *bcp* 公用程式要連接的 SQL Server 執行個體。
+ `-U` 指定登入 SQL Server 執行個體的帳戶使用者名稱。
+ `-P` 指定 所指定之使用者的密碼。`-U`
+ `-b` 指定每一批匯入資料的列數。

**注意**  
根據您的匯入情況而定，可能還有其他重要的參數。例如，您可能需要有關身分值的 `-E` 參數。如需詳細資訊，請參閱此 [Microsoft SQL Server 文件](http://msdn.microsoft.com/en-us/library/ms162802%28v=sql.105%29.aspx)中有關 **bcp** 公用程式命令列語法的完整描述。

例如，假設有一個使用預設結構描述 (`store`) 之名為 `dbo` 的資料庫包含名為 `customers` 的資料表。使用者帳戶 `admin` (密碼為 `insecure`) 會將 `customers` 資料表的 10,000 列複製到名為 `customers.txt` 的檔案。

```
bcp store.dbo.customers out C:\customers.txt -n -S localhost -U admin -P insecure -b 10000 
```

產生資料檔案後，您可以使用類似的命令，將資料上傳至資料庫執行個體。事先，在目標資料庫執行個體上建立資料庫和結構描述。然後，使用 `in` 引數來指定輸入檔案，而不是使用 `out` 來指定輸出檔案。指定資料庫執行個體的端點，而不是使用 localhost 來指定本機 SQL Server 執行個體。如果您使用的連接埠不是 1433，則也需要指定連接埠。使用者名稱和密碼是資料庫執行個體的主要使用者和密碼。語法如下。

```
bcp dbname.schema_name.table_name 
					in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000
```

接續上一個範例，假設主要使用者名稱是 `admin`，密碼是 `insecure`。資料庫執行個體的端點是 `rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com`，您使用的連接埠是 4080。命令如下所示。

```
bcp store.dbo.customers in C:\customers.txt -n -S rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,4080 -U admin -P insecure -b 10000 
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

## 從 RDS for SQL Server 匯出資料
<a name="SQLServer.Procedural.Exporting"></a>

您可以選擇下列其中一個選項，從 RDS for SQL Server 資料庫執行個體匯出資料：
+ **使用完整備份檔案 (.bak) 的原生資料庫備份 **​ – 使用 .bak 檔案來備份資料庫已充分最佳化，該方式通常是匯出資料的最快方法。如需更多詳細資訊，請參閱 [使用原生備份和還原，匯入和匯出 SQL Server 資料庫](SQLServer.Procedural.Importing.md)。
+ **SQL Server 匯入和匯出精靈** – 如需詳細資訊，請參閱 [SQL Server 匯入和匯出精靈](#SQLServer.Procedural.Exporting.SSIEW)。
+ **SQL Server 產生和發佈指令碼精靈及 bcp 公用程式** – 如需詳細資訊，請參閱 [SQL Server 產生和發佈指令碼精靈及 bcp 公用程式](#SQLServer.Procedural.Exporting.SSGPSW)。

### SQL Server 匯入和匯出精靈
<a name="SQLServer.Procedural.Exporting.SSIEW"></a>

您可以使用「SQL Server 匯入和匯出」精靈，將 RDS for SQL Server 資料庫執行個體中的一或多個資料表、檢視或查詢，複製到另一個資料存放區。如果目標資料存放區不是 SQL Server，這是最佳選擇。如需詳細資訊，請參閱 SQL Server 文件中的 [SQL Server 匯入和匯出精靈](http://msdn.microsoft.com/en-us/library/ms141209%28v=sql.110%29.aspx)。

「SQL Server 匯入和匯出」精靈隨附於 Microsoft SQL Server Management Studio。所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含此圖形化 SQL Server 用戶端。SQL Server Management Studio 只推出 Windows 應用程式版本。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。若要尋找此下載檔，請造訪 [Microsoft 網站](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio)。

**使用 SQL Server 匯入和匯出精靈來匯出資料**

1. 在 SQL Server Management Studio 中，連接至 RDS for SQL Server 資料庫執行個體。如需詳細作法，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

1. 在 **Object Explorer** (物件總管) 中，展開 **Databases** (資料庫)，開啟來源資料庫的內容 (右鍵) 功能表，選擇 **Tasks** (任務)，然後選擇 **Export Data** (匯出資料)。出現精靈。

1. 在 **Choose a Data Source (選擇資料來源)** 頁面上，執行下列動作：

   1. 對於 **Data source (資料來源)**，請選擇 **SQL Server Native Client 11.0**。

   1. 確認 **Server name** (伺服器名稱) 方塊顯示 RDS for SQL Server 資料庫執行個體的端點。

   1. 選取 **Use SQL Server Authentication (使用 SQL Server 驗證)**。在 **User name** (使用者名稱) 和 **Password** (密碼) 中，輸入資料庫執行個體的主要使用者名稱和密碼。

   1. 確認 **Database (資料庫)** 方塊顯示您要從中匯出資料的資料庫。

   1. 選擇**下一步**。

1. 在 **Choose a Destination (選擇目的地)** 頁面上，執行下列動作：

   1. 對於 **Destination (目的地)**，請選擇 **SQL Server Native Client 11.0**。
**注意**  
還有其他目標資料來源可用。其中包括 .NET Framework 資料提供者、OLE DB 提供者、SQL Server Native Client 提供者、ADO.NET 提供者、Microsoft Office Excel、Microsoft Office Access 及「一般檔案」來源。如果您選擇以其中一個資料來源為目標，請略過步驟 4 的其餘部分。關於接下來需提供的連線資訊的詳情，請參閱 SQL Server 文件中的[選擇目的地](http://msdn.microsoft.com/en-us/library/ms178430%28v=sql.110%29.aspx)。

   1. 在 **Server name (伺服器名稱)** 中，輸入目標 SQL Server 資料庫執行個體的伺服器名稱。

   1. 選擇適當的驗證類型。視需要輸入使用者名稱和密碼。

   1. 在 **Database (資料庫)** 中，選擇目標資料庫的名稱，或選擇 **New (新增)** 來建立新資料庫，以包含所匯出的資料。

      如果您選擇 **New (新增)**，請參閱 SQL Server 文件中的[建立資料庫](http://msdn.microsoft.com/en-us/library/ms183323%28v=sql.110%29.aspx)，以詳細了解需要提供的資料庫詳細資訊。

   1. 選擇**下一步**。

1. 在 **Table Copy or Query (資料表複製或查詢)** 頁面上，選擇 **Copy data from one or more tables or views (從一個或多個資料表或檢視複製資料)** 或 **Write a query to specify the data to transfer (寫入查詢來指定要傳輸的資料)**。選擇**下一步**。

1. 如果您選擇 **Write a query to specify the data to transfer (寫入查詢來指定要傳輸的資料)**，您會看到 **Provide a Source Query (提供來源查詢)** 頁面。在 SQL 查詢中輸入或貼上，然後選擇 **Parse (下一步)** 來進行確認。確認查詢有效後，選擇 **Next (下一步)**。

1. 在 **Select Source Tables and Views (選取來源資料表和檢視)** 頁面上，執行下列動作：

   1. 選取您要匯出的資料表和檢視，或確認已選取您提供的查詢。

   1. 選擇 **Edit Mappings (編輯映射)**，並指定資料庫和資料行映射資訊。如需詳細資訊，請參閱 SQL Server 文件中的[資料行映射](http://msdn.microsoft.com/en-us/library/ms189660%28v=sql.110%29.aspx)。

   1. (選用) 如需預覽要匯出的資料，請選取資料表、檢視或查詢，然後選擇 **Preview (預覽)**。

   1. 選擇**下一步**。

1. 在 **Run Package (執行封裝)** 頁面上，確認已選取 **Run immediately (立即執行)**。選擇**下一步**。

1. 在 **Complete the Wizard (完成精靈)** 頁面上，確認資料匯出詳細資訊如您所預期。選擇 **Finish** (完成)。

1. 在 **The execution was successful (已執行成功)** 頁面上，選擇 **Close (關閉)**。

### SQL Server 產生和發佈指令碼精靈及 bcp 公用程式
<a name="SQLServer.Procedural.Exporting.SSGPSW"></a>

您可以使用「SQL Server 產生和發佈指令碼精靈」來為整個資料庫或只針對選取的物件建立指令碼。您可以在目標 SQL Server 資料庫執行個體上執行這些指令碼，以重新建立指令碼物件。然後，您可以使用 bcp 公用程式，將所選取之物件的資料大量匯出到目標資料庫執行個體。如果您要在兩個 SQL Server 資料庫執行個體之間移動整個資料庫 (包括資料表以外的物件) 或大量資料，這是最佳選擇。如需 bcp 命令列語法的完整描述，請參閱 Microsoft SQL Server 文件中的 [bcp 公用程式](http://msdn.microsoft.com/en-us/library/ms162802%28v=sql.110%29.aspx)。

「SQL Server 產生和發佈指令碼」精靈隨附於 Microsoft SQL Server Management Studio。所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含此圖形化 SQL Server 用戶端。SQL Server Management Studio 只推出 Windows 應用程式版本。您可以從 Microsoft [免費下載](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio) SQL Server Management Studio Express。

**使用 SQL Server 產生和發佈指令碼精靈及 bcp 公用程式來匯出資料**

1. 在 SQL Server Management Studio 中，連接至 RDS for SQL Server 資料庫執行個體。如需詳細作法，請參閱[連線至 Microsoft SQL Server 資料庫執行個體](USER_ConnectToMicrosoftSQLServerInstance.md)。

1. 在 **Object Explorer (物件總管)** 中，展開 **Databases (資料庫)** 節點，選取您要編寫指令碼的資料庫。

1. 遵循 SQL Server 文件的[產生和發佈指令碼精靈](http://msdn.microsoft.com/en-us/library/bb895179%28v=sql.110%29.aspx)中的說明來建立指令碼檔案。

1. 在 SQL Server Management Studio 中，連接至目標 SQL Server 資料庫執行個體。

1. 在 **Object Explorer** (物件總管) 中選取目標 SQL Server 資料庫執行個體後，在 **File** (檔案) 選單上選擇 **Open** (開啟)，選擇 **File** (檔案)，然後開啟指令碼檔案。

1. 如果您已產生整個資料庫的指令碼，請檢閱指令碼中的 CREATE DATABASE 陳述式。確定資料庫是按照您要的位置和參數建立。如需詳細資訊，請參閱 SQL Server 文件中的 [CREATE DATABASE](http://msdn.microsoft.com/en-us/library/ms176061%28v=sql.110%29.aspx)。

1. 如果您在指令碼中建立資料庫使用者，請檢查那些使用者的伺服器登入是否存在於目標資料庫執行個體上。如果不是，請建立那些使用者的登入；否則，用於建立資料庫使用者的指令碼命令會失敗。如需詳細資訊，請參閱 SQL Server 文件中的[建立登入](http://msdn.microsoft.com/en-us/library/aa337562%28v=sql.110%29.aspx)。

1. 在「SQL 編輯器」功能表上選擇 **\$1Execute**，以執行指令碼檔案和建立資料庫物件。指令碼完成時，確認所有資料庫物件都如預期地存在。

1. 使用 bcp 公用程式將 RDS for SQL Server 資料庫執行個體中的資料匯出到檔案。開啓命令提示並輸入下列命令。

   ```
   bcp database_name.schema_name.table_name out data_file -n -S aws_rds_sql_endpoint -U username -P password
   ```

   上述程式碼包含下列選項：
   + *table\$1name* 是您在目標資料庫中已重新建立，而現在想要將資料填入該資料表的其中一個資料表名稱。
   + *data\$1file* 是準備建立之資料檔案的完整路徑和名稱。
   + `-n` 指定大量複製使用要複製之資料的原生資料類型。
   + `-S` 指定要從中匯出資料的 SQL Server 資料庫執行個體。
   + `-U` 指定連接至 SQL Server 資料庫執行個體時所使用的使用者名稱。
   + `-P` 指定 所指定之使用者的密碼。`-U`

   以下顯示命令範例 命令。

   ```
   bcp world.dbo.city out C:\Users\JohnDoe\city.dat -n -S sql-jdoe.1234abcd.us-west-2.rds.amazonaws.com,1433 -U JohnDoe -P ClearTextPassword
   ```

   重複此步驟，直到您要匯出的所有資料表都有資料檔案為止。

1. 遵循 SQL Server 文件的[大量匯入資料的基本方針](http://msdn.microsoft.com/en-us/library/ms189989%28v=sql.110%29.aspx)中的指示，以準備目標資料庫執行個體來大量匯入資料。

1. 考慮過 SQL Server 文件的[關於大量匯入和大量匯出操作](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)中所討論的效能和其他考量之後，再決定要使用的大量匯入方法。

1. 使用 bcp 公用程式從您建立的資料檔案中大量匯入資料。若要這麼做，請根據您在步驟 11 所做的決定，遵循 SQL Server 文件的[使用 bcp 公用程式匯入及匯出大量資料](http://msdn.microsoft.com/en-us/library/aa337544%28v=sql.110%29.aspx)或[使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大量資料](http://msdn.microsoft.com/en-us/library/ms175915%28v=sql.110%29.aspx)中的指示。

# 從 Linux 使用 BCP 公用程式匯入和匯出資料
<a name="SQLServer.Procedural.Importing.BCP.Linux"></a>

BCP (大量複製程式) 公用程式可讓您在 RDS for SQL Server 資料庫執行個體與資料檔案之間有效傳輸大量資料。您可以從 Linux 環境使用 BCP 執行大量資料操作，使其適用於資料遷移、ETL 程序及定期資料傳輸。

BCP 支援將資料從檔案匯入 SQL Server 資料表中，以及將資料從 SQL Server 資料表匯出至檔案。這對於以各種格式 (包括分隔符號文字檔案) 傳輸結構化資料尤有效用。

## 先決條件
<a name="SQLServer.Procedural.Importing.BCP.Linux.Prerequisites"></a>

從 Linux 將 BCP 用於 RDS for SQL Server 資料庫執行個體之前，請確定您有下列項目：
+ 有網路可連線至 RDS for SQL Server 資料庫執行個體的 Linux 環境
+ 安裝在 Linux 系統上的 Microsoft SQL Server 命令列工具，包括：
  + sqlcmd - SQL Server 命令列查詢工具
  + bcp - 大量複製程式公用程式
+ 適用於 RDS for SQL Server 資料庫執行個體的有效憑證
+ 透過安全群組設定的網路存取，以允許 SQL Server 連接埠 (通常是 1433) 上的連線
+ 您要執行之操作的適當資料庫許可

## 在 Linux 上安裝 SQL Server 命令列工具
<a name="SQLServer.Procedural.Importing.BCP.Linux.Installing"></a>

若要從 Linux 使用 BCP，您必須安裝 Microsoft SQL Server 命令列工具。如需特定 Linux 發行版本的詳細安裝指示，請參閱下列 Microsoft 文件：
+ [在 Linux 上安裝 sqlcmd 和 bcp SQL Server 命令列工具](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)
+ [bcp 公用程式](https://docs.microsoft.com/en-us/sql/tools/bcp-utility) - BCP 公用程式的完整參考

安裝完成後請執行下列命令，以確保工具可在您的 PATH 中使用：

```
bcp -v
sqlcmd -?
```

## 從 RDS for SQL Server 匯出資料
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting"></a>

您可以使用 BCP，將資料從 RDS for SQL Server 資料庫執行個體匯出至 Linux 系統上的檔案。這對於建立備份、資料分析或進行資料遷移準備，都有其效用。

### 基本匯出語法
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic"></a>

使用 BCP 匯出資料的基本語法為：

```
bcp database.schema.table out output_file -S server_name -U username -P password [options]
```

其中：
+ `database.schema.table` - 完整資料表名稱
+ `output_file` - 輸出檔案的路徑和名稱
+ `server_name` - 您的 RDS for SQL Server 端點
+ `username` - 您的資料庫使用者名稱
+ `password` - 您的資料庫密碼

### 匯出範例
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example"></a>

下列範例會從 `sales` 資料庫中名為 `customers` 的資料表匯出資料：

```
bcp sales.dbo.customers out /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n"
```

此命令：
+ 從 `customers` 資料表匯出資料
+ 將輸出儲存至 `/home/user/customers.txt`
+ 使用字元格式 (`-c`)
+ 使用管道 (\$1) 做為欄位分隔符號 (`-t "|"`)
+ 使用新行做為資料列分隔符號 (`-r "\n"`)

## 將資料匯入至 RDS for SQL Server
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing"></a>

您可以使用 BCP，將資料從 Linux 系統上的檔案匯入至您的 RDS for SQL Server 資料庫執行個體。這對於資料遷移、載入測試資料或定期資料更新，都有其效用。

### 基本匯入語法
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic"></a>

使用 BCP 匯入資料的基本語法為：

```
bcp database.schema.table in input_file -S server_name -U username -P password [options]
```

其中：
+ `database.schema.table` - 完整目的地資料表名稱
+ `input_file` - 輸入檔案的路徑和名稱
+ `server_name` - 您的 RDS for SQL Server 端點
+ `username` - 您的資料庫使用者名稱
+ `password` - 您的資料庫密碼

### 匯入範例
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Example"></a>

下列範例會將資料從檔案匯入名為 `customers` 的資料表中：

```
bcp sales.dbo.customers in /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n" \
    -b 1000
```

此命令：
+ 將資料匯入 `customers` 資料表中
+ 從 `/home/user/customers.txt` 中讀取資料
+ 使用字元格式 (`-c`)
+ 使用管道 (\$1) 做為欄位分隔符號 (`-t "|"`)
+ 使用新行做為資料列分隔符號 (`-r "\n"`)
+ 分批處理 1000 個資料列的資料 (`-b 1000`)

## 常用 BCP 選項
<a name="SQLServer.Procedural.Importing.BCP.Linux.Options"></a>

BCP 提供多種選項來控制資料格式化和傳輸行為。下表說明常用的選項：


| 選項 | 描述 | 
| --- | --- | 
| -c | 對所有資料欄使用字元資料類型 | 
| -n | 使用原生資料庫資料類型 | 
| -t | 指定欄位分隔符號 (預設為 Tab) | 
| -r | 指定資料列分隔符號 (預設為新行) | 
| -b | 指定大量操作的批次大小 | 
| -F | 指定要匯出或匯入的第一列 | 
| -L | 指定要匯出或匯入的最後一列 | 
| -e | 指定錯誤檔案以擷取遭拒的資料列 | 
| -f | 指定資料格式化的格式檔案 | 
| -q | 使用引號識別符做為物件名稱 | 

## 最佳實務和考量
<a name="SQLServer.Procedural.Importing.BCP.Linux.BestPractices"></a>

從 Linux 將 BCP 用於 RDS for SQL Server 時，請考量下列最佳實務：
+ **使用批次處理** – 對於大型資料集，請使用 `-b` 選項分批處理資料。這可以改善效能，並實現更好的錯誤復原效能。
+ **正常處理錯誤** – 使用 `-e` 選項擷取個別檔案中的錯誤資訊和遭拒的資料列，以進行分析。
+ **選擇適當的資料格式** – 在來源和目的地皆為 SQL Server 時，可使用字元格式 (`-c`) 實現跨平台相容性，或使用原生格式 (`-n`) 以獲得更好的效能。
+ **保護您的憑證** – 避免將密碼直接放入命令列中。請考慮使用具有適當許可的環境變數或組態檔。
+ **使用小型資料集進行測試** – 處理大量資料之前，請先使用較小的資料集來測試 BCP 命令，以驗證格式和連線。
+ **監控網路連線** – 確保穩定的網路連線，特別是對大型資料傳輸。請考慮使用 `screen` 或 `tmux` 等工具進行長時間執行的操作。
+ **驗證資料完整性** – 資料傳輸後，請驗證資料列計數和範例資料，以確保操作能順利完成。

## 排解常見問題
<a name="SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting"></a>

下表說明從 Linux 使用 BCP 及其解決方案時可能會遇到的常見問題：


| 問題 | 解決方案 | 
| --- | --- | 
| 連線逾時或網路錯誤 | 驗證您的 Amazon RDS 端點、安全群組設定和網路連線。確定可從 Linux 系統存取 SQL Server 連接埠 (通常是 1433)。 | 
| 身分驗證失敗 | 驗證您的使用者名稱和密碼。請確定資料庫使用者對您正在執行的操作具有適當許可。 | 
| 資料格式錯誤 | 檢查您的欄位和資料列分隔符號。請確定資料格式符合 BCP 的預期。對複雜的資料結構使用格式檔案。 | 
| 拒絕許可錯誤 | 確定您的資料庫使用者具有匯入的 INSERT 許可，或在目標資料表上匯出的 SELECT 許可。 | 
| 大型檔案處理問題 | 搭配 -b 選項使用批次處理。請考慮將大型檔案分割成較小的區塊，以提升效能和進行錯誤後的復原。 | 
| 字元編碼問題 | 確定您的資料檔案使用相容的字元編碼。針對字元格式使用 -c 選項，或指定適當的程式碼頁面。 | 