

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

# Microsoft SQL Server 資料庫引擎的升級
<a name="USER_UpgradeDBInstance.SQLServer"></a>

當 Amazon RDS 支援新版本的資料庫引擎時，您可以將資料庫執行個體升級為新版本。SQL Server 資料庫執行個體有兩種升級︰主要版本升級和次要版本升級。

*主要版本升級* 可能包含與現有應用程式回溯不相容的資料庫變更。因此，您必須*手動*執行資料庫執行個體的主要版本升級。您可以修改資料庫執行個體，啟動主要版本升級。然而，在您執行主要的版本升級之前，建議您遵循[測試 RDS for SQL Server 升級](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)中描述的步驟來測試升級。

*次要版本升級*僅包含與現有應用程式回溯相容的變更。您可以透過兩種方式升級資料庫執行個體的次要版本：
+ *手動* – 修改資料庫執行個體以起始升級
+ *自動* – 為您的資料庫執行個體啟用自動次要版本升級

啟用自動次要版本升級時，RDS for SQL Server 會在較新的次要版本有可用的重大安全性更新時，在排程的維護時段內自動升級您的資料庫執行個體。

對於 `16.00.4120.1`、`15.00.4365.2`、`14.00.3465.1`、`13.00.6435.1` 之後的次要引擎版本，依預設會停用下列安全通訊協定：
+ `rds.tls10` (TLS 1.0 通訊協定)
+ `rds.tls11` (TLS 1.1 通訊協定)
+ `rds.rc4` (RC4 通訊協定)
+ `rds.curve25519` (Curve25519 通訊協定)
+ `rds.3des168` (三重 DES 加密)

對於較早的引擎版本，Amazon RDS 依預設會啟用這些安全通訊協定。

```
...

"ValidUpgradeTarget": [
    {
        "Engine": "sqlserver-se",
        "EngineVersion": "14.00.3281.6.v1",
        "Description": "SQL Server 2017 14.00.3281.6.v1",
        "AutoUpgrade": false,
        "IsMajorVersionUpgrade": false
    }
...
```

如需執行升級的詳細資訊，請參閱[升級 SQL Server 資料庫執行個體](#USER_UpgradeDBInstance.SQLServer.Upgrading)。如需 Amazon RDS 上提供的 SQL Server 版本相關資訊，請參閱 [Amazon RDS for Microsoft SQL Server](CHAP_SQLServer.md)。

Amazon RDS 也支援升級推展政策，以管理跨多個資料庫資源和 的自動次要版本升級 AWS 帳戶。如需詳細資訊，請參閱[使用 AWS Organizations 升級推展政策進行自動次要版本升級](RDS.Maintenance.AMVU.UpgradeRollout.md)。

**Topics**
+ [RDS for SQL Server 的主要版本升級](USER_UpgradeDBInstance.SQLServer.Major.md)
+ [SQL Server 升級考量](USER_UpgradeDBInstance.SQLServer.Considerations.md)
+ [測試 RDS for SQL Server 升級](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)
+ [升級 SQL Server 資料庫執行個體](#USER_UpgradeDBInstance.SQLServer.Upgrading)
+ [在支援結束之前升級已取代的資料庫執行個體](#USER_UpgradeDBInstance.SQLServer.DeprecatedVersions)

# RDS for SQL Server 的主要版本升級
<a name="USER_UpgradeDBInstance.SQLServer.Major"></a>

Amazon RDS 目前支援透過以下的主要版本升級升級為 Microsoft SQL Server 資料庫執行個體。

除了 SQL Server 2008 之外，您可以將任意版本的現有資料庫執行個體升級至 SQL Server 2017 或 2019。若要升級 SQL Server 2008 的資料庫執行個體，請先將其升級為其他版本。


****  

| 目前版本 | 支援的升級版本 | 
| --- | --- | 
|  SQL Server 2019  |  SQL Server 2022  | 
|  SQL Server 2017  |  SQL Server 2022 SQL Server 2019  | 
|  SQL Server 2016  |  SQL Server 2022 SQL Server 2019 SQL Server 2017  | 

您可以使用 AWS CLI 查詢，例如下列範例，以尋找特定資料庫引擎版本可用的升級。

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds describe-db-engine-versions \
    --engine sqlserver-se \
    --engine-version 14.00.3281.6.v1 \
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" \
    --output table
```
針對 Windows：  

```
aws rds describe-db-engine-versions ^
    --engine sqlserver-se ^
    --engine-version 14.00.3281.6.v1 ^
    --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" ^
    --output table
```
輸出顯示您可以將 14.00.3281.6 版本升級至最新可用的 SQL Server 2017 或 2019 版本。  

```
--------------------------
|DescribeDBEngineVersions|
+------------------------+
|      EngineVersion     |
+------------------------+
|  14.00.3294.2.v1       |
|  14.00.3356.20.v1      |
|  14.00.3381.3.v1       |
|  14.00.3401.7.v1       | 
|  14.00.3421.10.v1      |
|  14.00.3451.2.v1       |
|  15.00.4043.16.v1      |
|  15.00.4073.23.v1      |
|  15.00.4153.1.v1       |
|  15.00.4198.2.v1       |
|  15.00.4236.7.v1       |
+------------------------+
```

## 資料庫相容性等級
<a name="USER_UpgradeDBInstance.SQLServer.Major.Compatibility"></a>

您可以使用 Microsoft SQL Server 資料庫相容性等級來調整某些資料庫行為，以模仿舊版的 SQL Server。如需詳細資訊，請參閱 Microsoft 文件中的[相容性等級](https://msdn.microsoft.com/en-us/library/bb510680.aspx)。升級資料庫執行個體時，所有現有的資料庫都會保持其原來的相容性等級。

您可以使用 ALTER DATABASE 命令來變更資料庫的相容性等級。例如，若要將名為 `customeracct` 的資料庫變更為與 SQL Server 2016 相容，可使用下列命令：

```
1. ALTER DATABASE customeracct SET COMPATIBILITY_LEVEL = 130
```

# SQL Server 升級考量
<a name="USER_UpgradeDBInstance.SQLServer.Considerations"></a>

Amazon RDS 在升級程序中會建立兩個資料庫快照。第一個資料庫快照是完成任何升級變更之前的資料庫執行個體。升級完成後會建立第二個資料庫快照。

**注意**  
只在您將資料庫執行個體的備份保留期設為大於 0 的數字時，Amazon RDS 才會建立資料庫快照。若要變更備份保留期，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

升級完成之後，您就無法回復至前一版的資料庫引擎。若您想要恢復前一版本，請從升級前建立的資料庫快照進行還原，以建立新的資料庫執行個體。

在 SQL Server 的次要或主要版本升級期間，**Free Storage Space (可用儲存空間)** 和 **Disk Queue Depth (磁碟佇列深度)** 指標會顯示 `-1`。升級完成後，兩個指標都會恢復正常。

升級 SQL Server 執行個體前，請先檢閱下列資訊。

**Topics**
+ [起始升級前的最佳實務](#USER_UpgradeDBInstance.SQLServer.BestPractices)
+ [異地同步備份考量](#USER_UpgradeDBInstance.SQLServer.MAZ)
+ [僅供讀取複本考量](#USER_UpgradeDBInstance.SQLServer.readreplica)
+ [選項群組考量](#USER_UpgradeDBInstance.SQLServer.OGPG.OG)
+ [參數群組考量](#USER_UpgradeDBInstance.SQLServer.OGPG.PG)

## 起始升級前的最佳實務
<a name="USER_UpgradeDBInstance.SQLServer.BestPractices"></a>

開始進行升級程序前，請先實作下列準備步驟，以達成最佳升級效能，並盡可能減少潛在問題：

時間和工作負載管理  
+ 將升級排程在低交易量期間。
+ 盡可能減少升級時段期間的寫入操作。
這樣可以減少 RDS 在「主要-次要」配對期間所需還原的交易日誌備份檔案數量，而讓 Amazon RDS 更快完成升級。

交易管理  
+ 識別和監控長時間執行的交易。
+ 開始升級之前，請確定所有重要交易都已提交。
+ 避免升級時段期間的長時間執行交易。

日誌檔案最佳化  
檢閱和最佳化交易日誌檔案：  
+ 縮減過大的日誌檔案。
+ 減少高日誌耗用模式。
+ 管理虛擬日誌檔案 (VLF)。
+ 維持足夠的可用空間供一般操作使用。

## 異地同步備份考量
<a name="USER_UpgradeDBInstance.SQLServer.MAZ"></a>

Amazon RDS 會透過使用 SQL Server Database Mirroring (DBM) 或 Always On 可用性群組 (AG)，支援在執行 Microsoft SQL Server 的資料庫執行個體上進行異地同步備份部署。如需詳細資訊，請參閱[Amazon RDS for Microsoft SQL Server 的異地同步備份部署](USER_SQLServerMultiAZ.md)。

在多可用區域部署 (鏡像/AlwaysOn) 中，RDS 在應要求升級時，將會遵循主要和次要執行個體的滾動升級策略。滾動升級可確保在次要執行個體升級時，至少有一個執行個體可供交易使用。中斷應該只會在容錯移轉期間發生。

在升級期間，RDS 會從多可用區域組態中移除次要執行個體、執行次要執行個體的升級，以及從主要執行個體還原在中斷連線期間進行的任何交易日誌備份。所有日誌備份都還原後，RDS 會將升級的次要執行個體加入主要執行個體。當所有資料庫都處於同步狀態時，RDS 會容錯移轉至升級的次要執行個體。容錯移轉完成後，RDS 會繼續升級舊的主要執行個體、還原任何交易日誌備份，並將其與新的主要執行個體配對。

為了盡可能縮短此容錯移轉持續時間，建議您在使用的用戶端程式庫支援連接字串中的 `MultiSubnetFailover` 連線選項時，使用 AlwaysOn AG 可用性群組接聽程式端點。使用可用性群組接聽程式端點時，容錯移轉時間通常少於 10 秒，不過，此持續時間不包含任何額外的損毀復原時間。

## 僅供讀取複本考量
<a name="USER_UpgradeDBInstance.SQLServer.readreplica"></a>

在資料庫版本升級期間，Amazon RDS 也會升級所有僅供讀取複本以及主要資料庫執行個體。Amazon RDS 不支援個別僅供讀取複本上的資料庫版本升級。如需僅供讀取複本的詳細資訊，請參閱 [使用 Amazon RDS 中的 Microsoft SQL Server 的僅供讀取複本](SQLServer.ReadReplicas.md)。

升級主要資料庫執行個體的資料庫版本時，也會自動升級所有僅供讀取複本。Amazon RDS 在升級主要資料庫執行個體之前，會先同時升級所有僅供讀取複本。在主要資料庫執行個體上的資料庫版本升級完成之前，僅供讀取複本可能無法使用。

## 選項群組考量
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.OG"></a>

如果您的資料庫執行個體使用自訂資料庫選項群組，在某些狀況下，Amazon RDS 無法自動為資料庫執行個體指派新的選項群組。例如，升級至新的主要版本時，您必須指定新的選項群組。建議您建立新的選項群組，並在其中新增和現有自訂選項群組中相同的選項。

如需詳細資訊，請參閱「[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」或「[刪除選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Copy)」。

## 參數群組考量
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.PG"></a>

若您的資料庫執行個體使用自訂的資料庫參數群組：
+ Amazon RDS 會在升級後自動重新啟動資料庫執行個體。
+ 在某些狀況下，RDS 無法將新的參數群組自動指派至您的資料庫執行個體。

  例如，升級至新的主要版本時，您必須指定新的參數群組。建議您建立新的參數群組，並在其中設定和現有自訂參數群組中相同的參數。

如需詳細資訊，請參閱「[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)」或「[在 Amazon RDS 中複製資料庫參數群組](USER_WorkingWithParamGroups.Copying.md)」。

# 測試 RDS for SQL Server 升級
<a name="USER_UpgradeDBInstance.SQLServer.UpgradeTesting"></a>

對資料庫執行個體進行主要版本升級之前，請完整測試資料庫，以及會存取該資料庫的所有應用程式，了解是否與新版本相容。建議您採用下列程序。

**測試主要版本升級**

1. 針對新版本的資料庫引擎，檢閱 Microsoft 文件中的[升級 SQL Server](https://docs.microsoft.com/en-us/sql/database-engine/install-windows/upgrade-sql-server)，了解是否有可能影響資料庫或應用程式的相容性問題。

1. 如果您的資料庫執行個體使用自訂選項群組，請建立與升級後新版本相容的新選項群組。如需更多詳細資訊，請參閱 [選項群組考量](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.OG)。

1. 如果您的資料庫執行個體使用自訂參數群組，請建立與升級後新版本相容的新參數群組。如需更多詳細資訊，請參閱 [參數群組考量](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.PG)。

1. 針對要升級的資料庫執行個體建立資料庫快照。如需詳細資訊，請參閱 [為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。

1. 還原資料庫快照，以建立新的測試資料庫執行個體。如需更多詳細資訊，請參閱 [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

1. 使用下列其中一種方法，修改這個新的測試資料庫執行個體，以升級到新版本：
   + [主控台](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.Console)
   + [AWS CLI](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.CLI)
   + [RDS API](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.Manual.API)

1. 評估升級的執行個體所使用的儲存體，以決定升級是否需要更多儲存體。

1. 對升級的資料庫執行個體儘可能進行越多次品質保證測試，以確保資料庫和應用程式搭配新版本可以正常運作。實作任何必要的新測試，以評估您在步驟 1 發現的任何相容性問題所帶來的影響。測試所有預存程序和函數。將應用程式的測試版本指向升級的資料庫執行個體。

1. 如果通過所有測試，就可以對生產資料庫執行個體進行升級。在確認一切都沒問題之前，建議您在資料庫執行個體上不要允許寫入操作。

## 升級 SQL Server 資料庫執行個體
<a name="USER_UpgradeDBInstance.SQLServer.Upgrading"></a>

如需有關手動或自動升級 SQL Server 資料庫執行個體的資訊，請參閱以下內容：
+ [升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)
+ [在 Amazon RDS for SQL Server 上將 SQL Server 2008 R2 升級到 SQL Server 2016 的最佳實務](https://aws.amazon.com/blogs/database/best-practices-for-upgrading-sql-server-2008-r2-to-sql-server-2016-on-amazon-rds-for-sql-server/)

**重要**  
如果您有任何使用 加密的快照 AWS KMS，建議您在支援結束之前啟動升級。

## 在支援結束之前升級已取代的資料庫執行個體
<a name="USER_UpgradeDBInstance.SQLServer.DeprecatedVersions"></a>

主要版本已取代後，您無法將其安裝在新資料庫執行個體上。RDS 將嘗試自動升級所有現有資料庫執行個體。

如果您需要還原已取代的資料庫執行個體，您可以執行 point-in-time 恢復 (PITR) 或還原快照。這可讓您暫時存取使用已廢除版本的資料庫執行個體。但是，在主要版本完全作廢後，這些資料庫執行個體也將同時自動升級到支援的版本。