

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

# 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]
  ```