

# Microsoft SQL Server DB エンジンのアップグレード
<a name="USER_UpgradeDBInstance.SQLServer"></a>

新しいバージョンのデータベースエンジンが Amazon RDS でサポートされている場合は、DB インスタンスをその新しいバージョンにアップグレードできます。SQL Server DB インスタンスのアップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類あります。

*メジャーバージョンのアップグレード*には、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。そのため、DB インスタンスのメジャーバージョンアップグレードは*手動*で実行する必要があります。メジャーバージョンアップグレードを開始するには、DB インスタンスを変更します。ただし、メジャーバージョンアップグレードを実行する前に、「[RDS for SQL Server のアップグレードのテスト](USER_UpgradeDBInstance.SQLServer.UpgradeTesting.md)」に記載されているステップに従ってアップグレードをテストすることをお勧めします。

*マイナーバージョンアップグレード*には、既存のアプリケーションとの下位互換性がある変更のみが含まれます。DB インスタンスのマイナーバージョンは、次の 2 つの方法でアップグレードできます。
+ *手動* – DB インスタンスを変更してアップグレードを開始する
+ *自動* – DB インスタンスのマイナーバージョン自動アップグレードを有効にする

マイナーバージョン自動アップグレードを有効にすると、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` (Triple 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 DB インスタンスをアップグレードする](#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 DB インスタンスをアップグレードする](#USER_UpgradeDBInstance.SQLServer.Upgrading)
+ [サポート終了前に非推奨の DB インスタンスをアップグレードする](#USER_UpgradeDBInstance.SQLServer.DeprecatedVersions)

# RDS for SQL Server のメジャーバージョンアップグレード
<a name="USER_UpgradeDBInstance.SQLServer.Major"></a>

Amazon RDS は、現在次のメジャーバージョンの Microsoft SQL Server DB インスタンスへのアップグレードをサポートしています。

SQL Server 2008 を除く任意のバージョンから既存の DB インスタンスを 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)」を参照してください。DB インスタンスをアップグレードしても、既存のすべてのデータベースは元の互換性レベルのままとなります。

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 によってアップグレードプロセス中に 2 つの DB スナップショットが作成されます。初期の DB スナップショットは、アップグレードの変更が行われる前の DB インスタンスから作成されます。アップグレード完了後に、2 番目の DB スナップショットが取得されます。

**注記**  
DB インスタンスのバックアップ保持期間を 0 より大きく設定した場合にのみ、Amazon RDS は DB スナップショットを作成します。バックアップ保持期間を変更するには、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

アップグレード完了後は、データベースエンジンを前のバージョンに戻すことはできません。前のバージョンに戻す必要がある場合は、アップグレード前に取得された DB スナップショットを復元して、新しい DB インスタンスを作成します。

SQL Server のマイナーバージョンアップグレードまたはメジャーバージョンアップグレード中、[**Free Storage Space**] と [**Disk Queue Depth**] のメトリクスに [`-1`] が表示されます。アップグレード完了後は、両方のメトリクスが [normal (ノーマル)] に戻ります。

SQL Server インスタンスをアップグレードする前に、次の情報を確認してください。

**Topics**
+ [アップグレードを開始する前のベストプラクティス](#USER_UpgradeDBInstance.SQLServer.BestPractices)
+ [マルチ AZ の考慮事項](#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>

アップグレードプロセスを開始する前に、次の準備手順を実装して、最適なアップグレードパフォーマンスを実現し、潜在的な問題を最小限に抑えます。

タイミングとワークロードの管理  
+ トランザクション量が少ない期間にアップグレードをスケジュールします。
+ アップグレードウィンドウ中の書き込み操作を最小限に抑えます。
これにより、Amazon RDS はセカンダリからプライマリへのペアリング中に RDS が復元する必要があるトランザクションログファイルの数を減らすことで、アップグレードを迅速に完了できます。

トランザクション管理  
+ 長時間実行されるトランザクションを特定してモニタリングします。
+ アップグレードを開始する前に、すべての重要なトランザクションがコミットされていることを確認します。
+ アップグレードウィンドウ中に長時間実行されるトランザクションを防止します。

ログファイルの最適化  
トランザクションログファイルを確認して最適化します。  
+ サイズが大きすぎるログファイルを縮小します。
+ 高いログ消費パターンを減らします。
+ 仮想ログファイル (VLF) を管理します。
+ 通常のオペレーションに十分な空き領域を維持します。

## マルチ AZ の考慮事項
<a name="USER_UpgradeDBInstance.SQLServer.MAZ"></a>

Amazon RDS は、Microsoft SQL Server を実行する DB インスタンスで SQL Server データベースミラーリング (DBM) または Always On 可用性グループ (AG) によるマルチ AZ 配置をサポートしています。詳細については、「[Amazon RDS for Microsoft SQL Server のマルチ AZ 配置](USER_SQLServerMultiAZ.md)」を参照してください。

マルチ AZ 配置 (ミラーリング/AlwaysOn) では、アップグレードをリクエストすると、RDS はプライマリインスタンスとセカンダリインスタンスでローリングアップグレード戦略に従います。ローリングアップグレードでは、セカンダリインスタンスのアップグレード中に少なくとも 1 つのインスタンスをトランザクションに使用できます。停止はフェイルオーバー時に限定されると予想されます。

アップグレード中、RDS はマルチ AZ 設定からセカンダリインスタンスを削除して、セカンダリインスタンスのアップグレードを実行し、切断中にプライマリから取得したトランザクションログのバックアップを復元します。すべてのログバックアップを復元すると、RDS はアップグレードしたセカンダリをプライマリに結合します。すべてのデータベースが同期状態になると、RDS はアップグレードしたセカンダリインスタンスへのフェイルオーバーを実行します。フェイルオーバーが完了すると、RDS は古いプライマリインスタンスのアップグレードに進み、トランザクションログのバックアップを復元して、新しいプライマリとペアリングします。

このフェイルオーバー期間を最小限に抑えるために、接続文字列で `MultiSubnetFailover` 接続オプションをサポートするクライアントライブラリを使用する場合は、AlwaysOn AG 可用性グループリスナーのエンドポイントを使用することをお勧めします。可用性グループリスナーのエンドポイントを使用する場合、フェイルオーバー時間は通常 10 秒未満ですが、この時間には追加のクラッシュ復旧時間は含まれません。

## リードレプリカに関する考慮事項
<a name="USER_UpgradeDBInstance.SQLServer.readreplica"></a>

データベースバージョンのアップグレード中に、Amazon RDS はプライマリ DB インスタンスと共にすべてのリードレプリカをアップグレードします。Amazon RDS では、リードレプリカのデータベースバージョンのアップグレードを個別にサポートしていません。リードレプリカの詳細については、「[Amazon RDS での Microsoft SQL Server 用のリードレプリカの使用](SQLServer.ReadReplicas.md)」を参照してください。

プライマリ DB インスタンスのデータベースバージョンのアップグレードを実行すると、そのすべてのリードレプリカも自動的にアップグレードされます。Amazon RDS は、プライマリ DB インスタンスをアップグレードする前に、すべてのリードレプリカを同時にアップグレードします。リードレプリカは、プライマリ DB インスタンスのデータベースバージョンのアップグレードが完了するまで使用できない場合があります。

## オプショングループに関する考慮事項
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.OG"></a>

DB インスタンスでカスタム DB オプショングループを使用している場合、Amazon RDS で DB インスタンスに新しいオプショングループを自動的に割り当てられないことがあります。例えば、新しいメジャーバージョンにアップグレードする場合、新しいオプショングループを指定する必要があります。新しいオプショングループを作成し、このオプショングループに既存のカスタムオプショングループと同じオプションを追加することをお勧めします。

詳細については、「[オプショングループを作成する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」または「[オプショングループをコピーする](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Copy)」を参照してください。

## パラメータグループに関する考慮事項
<a name="USER_UpgradeDBInstance.SQLServer.OGPG.PG"></a>

DB インスタンスがカスタム DB パラメータグループを使用している場合:
+ Amazon RDS は、アップグレード後に DB インスタンスを自動的に再起動します。
+ 場合によっては、RDS が新しいパラメータグループを DB インスタンスに自動的に割り当てられないことがあります。

  例えば、新しいメジャーバージョンにアップグレードする場合、新しいパラメータグループを指定する必要があります。新しいパラメータグループを作成し、そのパラメータの設定を既存のカスタムパラメータグループと同じにすることをお勧めします。

詳細については、「[Amazon RDS での DB パラメータグループの作成](USER_WorkingWithParamGroups.Creating.md)」または「[Amazon RDS での DB パラメータグループのコピー](USER_WorkingWithParamGroups.Copying.md)」を参照してください。

# RDS for SQL Server のアップグレードのテスト
<a name="USER_UpgradeDBInstance.SQLServer.UpgradeTesting"></a>

DB インスタンスのメジャーバージョンのアップグレードを実行する前に、データベースとそのデータベースにアクセスするすべてのアプリケーションについて、新しいバージョンとの互換性を綿密にテストする必要があります。以下の手順を実行することをお勧めします。

**メジャーバージョンのアップグレードをテストするには**

1. Microsoft ドキュメントで、新しいバージョンのデータベースエンジンに関する「[SQL Server をアップグレードする](https://docs.microsoft.com/en-us/sql/database-engine/install-windows/upgrade-sql-server)」を参照し、データベースやアプリケーションに影響する可能性がある互換性の問題があるかどうかを確認します。

1. DB インスタンスでカスタムオプショングループを使用している場合は、アップグレード先の新しいバージョンと互換性がある新しいオプショングループを作成します。詳細については、「[オプショングループに関する考慮事項](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.OG)」を参照してください。

1. DB インスタンスでカスタムパラメータグループを使用している場合は、アップグレード先の新しいバージョンと互換性がある新しいパラメータグループを作成します。詳細については、「[パラメータグループに関する考慮事項](USER_UpgradeDBInstance.SQLServer.Considerations.md#USER_UpgradeDBInstance.SQLServer.OGPG.PG)」を参照してください。

1. アップグレードする DB インスタンスの DB スナップショットを作成します。詳細については、「[Amazon RDS のシングル AZ DB インスタンスの DB スナップショットの作成](USER_CreateSnapshot.md)」を参照してください。

1. DB スナップショットを復元して、新しいテスト DB インスタンスを作成します。詳細については、「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。

1. この新しいテスト DB インスタンスを変更して新しいバージョンにアップグレードするには、次に説明するいずれかの方法を使用します。
   + [コンソール](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. データベースとアプリケーションが新しいバージョンで正常に動作することが確認されるまで、アップグレードした DB インスタンスに対する品質保証テストを必要な回数だけ実行します。手順 1 で特定した互換性の問題の影響を評価するための新しいテストを実行します。すべてのストアドプロシージャと関数をテストします。アプリケーションのテストバージョンを、アップグレードした DB インスタンスに割り振ります。

1. すべてのテストに合格したら、本稼働 DB インスタンスのアップグレードを実行します。すべてが正常に動作していることを確認するまでは、DB インスタンスへの書き込みオペレーションは許可しないことをお勧めします。

## SQL Server DB インスタンスをアップグレードする
<a name="USER_UpgradeDBInstance.SQLServer.Upgrading"></a>

SQL Server DB インスタンスの手動または自動アップグレードについては、以下を参照してください。
+ [DB インスタンスのエンジンバージョンのアップグレード](USER_UpgradeDBInstance.Upgrading.md)
+ [Best practices for upgrading SQL Server 2008 R2 to SQL Server 2016 on Amazon RDS for SQL Server](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 を使用して暗号化されたスナップショットがある場合は、サポートが終了する前にアップグレードを開始することをお勧めします。

## サポート終了前に非推奨の DB インスタンスをアップグレードする
<a name="USER_UpgradeDBInstance.SQLServer.DeprecatedVersions"></a>

メジャーバージョンの廃止後は、新しい DB インスタンスにインストールすることはできません。RDS では、既存のすべての DB インスタンスが自動的にアップグレードされます。

廃止予定の DB インスタンスを復元する必要がある場合、ポイントインタイムリカバリ (PITR) を実行するか、スナップショットを復元することができます。こうすることで、廃止予定のバージョンを使用する DB インスタンスに一時的にアクセスできます。ただし、メジャーバージョンが完全に廃止されると、これらの DB インスタンスも自動的にサポートされているバージョンにアップグレードされます。