

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

# Amazon RDS for Microsoft SQL Server 的異地同步備份部署
<a name="USER_SQLServerMultiAZ"></a>

「異地同步備份部署」可提高資料庫執行個體的可用性、資料耐用性和容錯能力。在進行已規劃的資料庫維護或發生意外的服務中斷時，Amazon RDS 會自動容錯移轉到最新的次要資料庫執行個體。此功能可讓資料庫操作迅速恢復，而不需要手動介入。主要和待命執行個體使用相同的端點，而此端點的實體網路地址在容錯移轉過程中會轉移到次要複本。當容錯移轉發生時，您不必重新設定應用程式。

Amazon RDS 使用 SQL Server 資料庫鏡像 (DBM)、 Always On 可用性群組 (AGs異地同步備份部署。Amazon RDS 會監控和維護異地同步備份部署的運作狀態。如果發生問題，RDS 會自動修復運作不良的資料庫執行個體、重新建立同步處理，以及啟動容錯移轉。只有當待命和主要執行個體完全同步時，容錯移轉才會發生。您什麼都不必管理。

當您設定 SQL Server Multi-AZ 時，RDS 會自動將執行個體上的所有資料庫設定為使用 DBM、AGs或區塊層級複寫。當您設定 DBM 或 AGs 時，Amazon RDS 會為您處理主要、見證和次要資料庫執行個體。對於區塊層級複寫，RDS 會處理主要和次要資料庫執行個體。由於組態是自動的，RDS 會根據您部署的 SQL Server 版本，選取 DBM、AGs 或區塊層級複寫。

Amazon RDS 支援下列 SQL Server 版本和版次使用異地同步備份搭配 Always On AG：
+ SQL Server 2022：
  + 標準版本
  + 企業版本
+ SQL Server 2019：
  + Standard Edition 15.00.4073.23 版和更高版本
  + 企業版本
+ SQL Server 2017：
  + Standard Edition 14.00.3401.7 版和更高版本
  + Enterprise Edition 14.00.3049.1 版和更高版本
+ SQL Server 2016：企業版 13.00.5216.0 版和更新版本

Amazon RDS 支援下列 SQL Server 版本使用異地同步備份搭配 DBM，但先前提到的版本除外：
+ SQL Server 2019：標準版 15.00.4043.16 版
+ SQL Server 2017︰Standard 和 Enterprise Edition
+ SQL Server 2016︰Standard 和 Enterprise Edition 

Amazon RDS 支援具有 SQL Server 2022 Web Edition 16.00.4215.2 及更高版本的區塊層級複寫的異地同步備份。

**注意**  
只有使用 16.00.4215.2 或更高版本建立的新資料庫執行個體支援具有區塊層級複寫的異地同步備份部署。下列限制適用於現有的 SQL Server 2022 Web Edition 執行個體：  
對於 16.00.4215.2 版上的現有執行個體，您必須將快照還原至具有相同或更高次要版本的新執行個體，才能啟用區塊層級複寫。
具有較舊次要版本的 SQL Server 2022 Web 執行個體可以升級至次要版本 16.00.4215.2 或更新版本，以啟用區塊層級複寫。

您可以使用下列 SQL 查詢來判斷 SQL Server 資料庫執行個體是單一可用區、採用 DBM 的多可用區域，或是採用 Always On AG 的多可用區域。此查詢不適用於 SQL Server Web Edition 上的異地同步備份部署。

```
SELECT CASE WHEN dm.mirroring_state_desc IS NOT NULL THEN 'Multi-AZ (Mirroring)'
    WHEN dhdrs.group_database_id IS NOT NULL THEN 'Multi-AZ (AlwaysOn)'
    ELSE 'Single-AZ'
    END 'high_availability'
FROM sys.databases sd
LEFT JOIN sys.database_mirroring dm ON sd.database_id = dm.database_id
LEFT JOIN sys.dm_hadr_database_replica_states dhdrs ON sd.database_id = dhdrs.database_id AND dhdrs.is_local = 1
WHERE DB_NAME(sd.database_id) = 'rdsadmin';
```

輸出看起來會與以下內容相似：

```
high_availability
Multi-AZ (AlwaysOn)
```

## 將多可用區域新增至 Microsoft SQL Server 資料庫執行個體
<a name="USER_SQLServerMultiAZ.Adding"></a>

當您使用 建立新的 SQL Server 資料庫執行個體時 AWS 管理主控台，您可以新增具有資料庫鏡像 (DBM)、 Always On AGs或區塊層級複寫的異地同步備份。您可以透過選擇**異地同步備份部署**中的**是 （鏡像/永遠開啟/區塊層級複寫） **來執行此操作。如需詳細資訊，請參閱[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

當您使用主控台修改現有的 SQL Server 資料庫執行個體時，您可以從**修改資料庫執行個體**頁面上的異地同步備份部署中選擇是 （鏡射/永遠開啟/區塊層級複寫），以 DBM、AGs 或區塊層級複寫新增異地同步備份。 **** ****如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

**注意**  
如果您的資料庫執行個體正在執行資料庫鏡像 (DBM) —並非 Always On 可用性群組 (AG)，則—可能需要先停用記憶體內最佳化，再新增異地同步備份。如果您的資料庫執行個體執行 SQL Server 2016 或 2017 Enterprise Edition，並啟用記憶體內最佳化，請在新增多可用區域之前停用 DBM 的記憶體內最佳化。  
如果您的資料庫執行個體正在執行 SQL Server Web Edition AGs 或區塊層級複寫，則不需要此步驟。

## 從 Microsoft SQL Server 資料庫執行個體移除多可用區域
<a name="USER_SQLServerMultiAZ.Removing"></a>

當您使用 修改現有的 SQL Server 資料庫執行個體時 AWS 管理主控台，您可以使用 DBM、AGs或區塊層級複寫來移除異地同步備份。您可以在**修改資料庫執行個體**頁面上，從**異地同步備份部署**中選擇**否 （鏡射/永遠開啟/區塊層級複寫）**。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# Microsoft SQL Server 異地同步備份部署限制、備註和建議
<a name="USER_SQLServerMultiAZ.Recommendations"></a>

下列是對 RDS for SQL Server 資料庫執行個體使用多可用區部署的一些限制：
+ 不支援跨區域的多可用區域。
+ 不支援停止多可用區部署中的 RDS for SQL Server 資料庫執行個體。
+ 您無法設定次要資料庫執行個體來接受資料庫讀取活動。
+ 多可用區域搭配 Always On 可用區 (AG) 支援記憶體內最佳化。
+ 具有 Always On 可用性群組 (AG) 的異地同步備份不支援可用性群組接聽程式的 Kerberos 驗證。這是因為接聽程式沒有服務委託人名稱 (SPN)。
+ 具有區塊層級複寫的異地同步備份目前僅支援 SQL Server Web Edition 執行個體。
+ 在 SQL Server 異地同步備份部署中的 SQL Server 資料庫執行個體上，您無法重新命名資料庫。如果您需要在這類執行個體上重新命名資料庫，請先對資料庫執行個體關閉多可用區域，再重新命名資料庫。最後，對資料庫執行個體重新開啟多可用區域。
+ 您只能還原使用完整還原模型備份的多可用區域資料庫執行個體。
+ 多可用區域部署有 10,000 個 SQL Server Agent 任務的限制。

  如果您需要更高的限制，請聯絡 請求提高限制 支援。開啟 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)頁面，如有必要請登入，然後選擇 **Create case** (建立案例)。選擇 **Service limit increase (提高服務限制)**。填妥並提交表格。
+ 在 SQL Server 多可用區域部署中的 SQL Server 資料庫執行個體上，不可以有離線資料庫。
+ RDS for SQL Server 不會將 MSDB 資料庫許可複寫至次要執行個體。如果您在次要執行個體上需要這些許可，必須手動重新建立這些許可。
+ 磁碟區指標不適用於使用區塊層級複寫的執行個體次要主機。

下列是對 RDS for SQL Server 資料庫執行個體使用多可用區域部署的一些相關備註：
+ Amazon RDS 公開 Always On AG [可用性群組接聽程式端點](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover)。此端點會出現在主控台，而且由 `DescribeDBInstances` API 作業在端點欄位中傳回。
+ Amazon RDS 支援[可用性群組多重子網路容錯移轉](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/listeners-client-connectivity-application-failover)。
+ 若要對虛擬私有雲端 (VPC) 中的 SQL Server 資料庫執行個體使用 SQL Server 多可用區域，首先請建立在至少兩個不同可用區域中有子網路的資料庫子網路群組。然後，將該資料庫子網路群組指派給 SQL Server 資料庫執行個體的主要複本。
+ 當資料庫執行個體修改為異地同步備份部署時，其在修改期間的狀態為 **modifying** (修改中)。Amazon RDS 會建立待命執行個體，並建立主要資料庫執行個體的備份。在程序完成之後，主要資料庫執行個體的狀態會變成 **available (可用)**。
+ 異地同步備份部署會在相同節點上維護所有資料庫。如果主要主機上的資料庫容錯移轉，您的所有 SQL Server 資料庫會以一個不可分割的單位容錯移轉至您的待命主機。Amazon RDS 會佈建運作狀態良好的新主機，並取代狀況不良的主機。
+ 具有 DBM、AGs異地同步備份支援單一待命複本。
+ 使用者、登入和許可會自動複寫到次要主機。您不需要重新建立這些資料。使用者定義的伺服器角色會在資料庫執行個體中複寫，這些執行個體使用 Always On AGs或多可用區部署的區塊層級複寫。
+ 在多可用區域部署中，RDS for SQL Server 會建立 SQL Server 登入，以允許 Always On AG 或資料庫鏡像。RDS 會使用下列模式建立登入：`db_<dbiResourceId>_node1_login`、`db_<dbiResourceId>_node2_login` 和 `db_<dbiResourceId>_witness_login`。
+ RDS for SQL Server 會建立 SQL Server 登入以允許存取僅供讀取複本。RDS 會使用下列模式建立登入：`db_<readreplica_dbiResourceId>_node_login`。
+ 在多可用區域部署中，當任務複寫功能開啟時，SQL Server Agent 任務從主要主機複製至次要主機。如需詳細資訊，請參閱[開啟 SQL Server Agent 任務複寫](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate)。
+ 由於同步資料複寫，相較於標準資料庫執行個體部署 (在單一可用區域中)，您可能會發現延遲增加情形。
+ 容錯移轉時間會受到完成復原程序所需的時間影響。大型交易會增加此容錯移轉時間。
+ 於 SQL Server 異地同步備份部署中，透過容錯移轉重新啟動只會重新啟動主要資料庫執行個體。在容錯移轉之後，主要資料庫執行個體會成為新的次要資料庫執行個體。多可用區域執行個體的參數可能無法更新。若要在無容錯移轉的情況下重新啟動，主要和次要資料庫執行個體會在重新啟動後更新參數。若資料庫執行個體沒有回應，建議您重新開機，不要進行容錯移轉。

下列是對 RDS for Microsoft SQL Server 資料庫執行個體使用異地同步備份部署的一些建議：
+ 針對生產階段或生產前階段所用的資料庫，建議您使用下列選項：
  + 針對高可用性的異地同步備份部署
  + 「佈建 IOPS」可取得快速一致的績效
  + 「最佳化記憶體」而非「一般用途」
+ 您無法為次要執行個體選取可用區域 (AZ)，因此，當您部署應用程式主機時，請將此納入考量。您的資料庫可能容錯移轉至其他 AZ，而且應用程式主機和資料庫可能不是在相同的 AZ 中。因此，我們建議您在指定 AWS 區域的所有 AZs 之間平衡應用程式主機。
+ 為了獲得最佳效能，請勿在大型資料載入操作期間啟用資料庫鏡像、 Always On AGs或區塊層級複寫。如果要盡快載入您的資料，請在將您的資料庫執行個體轉換為異地同步備份部署之前完成載入資料。
+ 存取 SQL Server 資料庫的應用程式應該具有例外處理能力可捕捉連接錯誤。下列程式碼範例示範捕捉通訊錯誤的 try/catch 區塊。在這個範例中，如果連線成功，`break` 陳述式會結束 `while` 迴圈，但如果擲回例外狀況，則重試最多 10 次。

  ```
  int RetryMaxAttempts = 10;
  int RetryIntervalPeriodInSeconds = 1;
  int iRetryCount = 0;
  while (iRetryCount < RetryMaxAttempts)
  {
     using (SqlConnection connection = new SqlConnection(DatabaseConnString))
     {
        using (SqlCommand command = connection.CreateCommand())
        {
           command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');";
           try
           {
              connection.Open();
              command.ExecuteNonQuery();
              break;
           }
           catch (Exception ex) 
           {
              Logger(ex.Message);
              iRetryCount++;
           }
           finally {
              connection.Close();
           }
        }
     }
     Thread.Sleep(RetryIntervalPeriodInSeconds * 1000);
  }
  ```
+ 使用 DBM 或 AGs 處理多可用區域執行個體時，請勿使用 `Set Partner Off`命令。使用區塊層級複寫的執行個體不支援此命令。例如，請勿執行以下操作。

  ```
  --Don't do this
  ALTER DATABASE db1 SET PARTNER off
  ```
+ 請勿將復原模式設為 `simple`。例如，請勿執行以下操作。

  ```
  --Don't do this
  ALTER DATABASE db1 SET RECOVERY simple
  ```
+ 除非使用區塊層級複寫以獲得高可用性，否則在多可用區域資料庫執行個體上建立新的登入時請勿使用 `DEFAULT_DATABASE` 參數，因為這些設定無法套用至待命鏡像。例如，請勿執行以下操作。

  ```
  --Don't do this
  CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]
  ```

  也請勿執行以下操作。

  ```
  --Don't do this
  ALTER LOGIN [test_dba] WITH DEFAULT_DATABASE=[db3]
  ```

# 查明次要複本的位置
<a name="USER_SQLServerMultiAZ.Location"></a>

您可以使用 AWS 管理主控台來查明次要複本的位置。如果是在 VPC 中設定您的主要資料庫執行個體，您需要知道次要複本的位置。

![\[Secondary AZ (次要 AZ)\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/SQLSvr-MultiAZ.png)


您也可以使用 AWS CLI 命令`describe-db-instances`或 RDS API 操作 來檢視次要 的可用區域`DescribeDBInstances`。輸出會顯示待命鏡像所在的次要 AZ。

# 從資料庫鏡像遷移到 Always On 可用性群組 (AG)
<a name="USER_SQLServerMultiAZ.Migration"></a>

Microsoft SQL Server 企業版本的 14.00.3049.1 版中，依預設可啟用 Always On 可用性群組 (AG)。

若要從資料庫鏡像 (DBM) 遷移到可用性群組 (AG)，請先檢查您的版本。如果您使用的資料庫執行個體是企業版 13.00.5216.0 以前的版本，請修改執行個體來修補為 13.00.5216.0 或更新版本。如果您使用的資料庫執行個體是企業版 14.00.3049.1 以前的版本，請修改執行個體來修補為 14.00.3049.1 或更新版本。

如果您想要升級鏡像資料庫執行個體以使用可用性群組，請先升級、修改執行個體以移除多可用區域，然後再次修改以新增多可用區域。這樣會將您的執行個體轉換為使用 Always On 可用性群組。