

# Amazon RDS for Microsoft SQL Server
<a name="CHAP_SQLServer"></a>

Amazon RDS は、複数のバージョンやエディションの Microsoft SQL Server をサポートします。以下の表は、メジャーバージョンごとのサポートされている最新のマイナーバージョンを示しています。サポートされているバージョン、エディション、および RDS エンジンのバージョンの詳細なリストについては、「[Amazon RDS での Microsoft SQL Server バージョン](SQLServer.Concepts.General.VersionSupport.md)」を参照してください。




| メジャーバージョン | サービスパック/ GDR | 累積更新 | マイナーバージョン | ナレッジベース記事 | リリース日 | 
| --- | --- | --- | --- | --- | --- | 
| SQL Server 2022 | 該当しない | CU23 |  16.0.4236.2  | [KB5078297](https://learn.microsoft.com/en-us/troubleshoot/sql/releases/sqlserver-2022/cumulativeupdate23) | 2026 年 1 月 29 日 | 
| SQL Server 2019 | GDR | CU32 GDR |  15.0.4455.2  | [KB5068404](https://support.microsoft.com/en-us/topic/kb5068404-description-of-the-security-update-for-sql-server-2019-cu32-november-11-2025-c203bfbf-036e-46d2-bc10-6c01200dc48a) | 2025 年 11 月 11 日 | 
| SQL Server 2017 | GDR | CU31 GDR |  14.0.3515.1  | [KB5068402](https://support.microsoft.com/en-us/topic/kb5068402-description-of-the-security-update-for-sql-server-2017-cu31-november-11-2025-1be08efe-ad14-4b95-a0de-ecbbf2703114) | 2025 年 11 月 11 日 | 
| SQL Server 2016 | SP3 GDR | 該当しない |  13.0.6475.1  | [KB5068401](https://support.microsoft.com/en-us/topic/kb5068401-description-of-the-security-update-for-sql-server-2016-sp3-gdr-november-11-2025-59a59fc0-f673-45c2-b8de-492b95c0e423) | 2025 年 11 月 11 日 | 

SQL Server のライセンスについては、「[Amazon RDS での Microsoft SQL Server のライセンス](SQLServer.Concepts.General.Licensing.md)」を参照してください。SQL Server のビルドの詳細については、「[最新の SQL Server ビルドに関する情報の検索場所](https://support.microsoft.com/en-us/topic/kb957826-where-to-find-information-about-the-latest-sql-server-builds-43994ba5-9aed-2323-ea7c-d29fe9c4fbe8)」に関するこの Microsoft のサポート記事を参照してください。

Amazon RDS では、DB インスタンス、DB スナップショット、ポイントインタイムリカバリ、自動バックアップ、手動バックアップを作成できます。SQL Server を実行する DB インスタンスは VPC 内で使用できます。SQL Server を実行している DB インスタンスへの接続に Secure Sockets Layer (SSL) を使用することもできます。さらに、保管時のデータの暗号化に Transparent Data Encryption (TDE) を使用することも可能です。Amazon RDS は現在、SQL Server データベースミラーリング (DBM) または Always On Availability グループ (AG) を、高可用性フェイルオーバーソリューションとして使用することで、SQL Server 向けのマルチ AZ デプロイをサポートしています。

マネージド型サービスを提供するために、Amazon RDS では DB インスタンスへのシェルアクセスはできないように設定されています。また、高度な権限を必要とする特定のシステムプロシージャやシステムテーブルへのアクセスが制限されています。Amazon RDS では、Microsoft SQL Server Management Studio などの標準的な SQL クライアントアプリケーションを使用しての、DB インスタンス上のデータベースに対するアクセスがサポートされています。Amazon RDS では、Telnet、Secure Shell (SSH)、または Windows のリモートデスクトップ接続を使用した、DB インスタンスへの直接的なホストアクセスは許可されません。DB インスタンスを作成すると、マスターユーザーに対して、そのインスタンス上のすべてのユーザーデータベースに対する *db\$1owner* ロールが割り当てられ、バックアップに使用するアクセス許可を除き、すべてのデータベースレベルのアクセス許可が付与されます。バックアップは、Amazon RDS により自動的に実行されます。

最初の DB インスタンスを作成する前に、このガイドの「セットアップ」セクションの手順を完了してください。詳細については、「[Amazon RDS 環境のセットアップ](CHAP_SettingUp.md)」を参照してください。

**Topics**
+ [Amazon RDS の Microsoft SQL Server 用の一般的な管理タスク](#SQLServer.Concepts.General)
+ [Microsoft SQL Server DB インスタンスの制限](#SQLServer.Concepts.General.FeatureSupport.Limits)
+ [Microsoft SQL Server の DB インスタンスクラスのサポート](SQLServer.Concepts.General.InstanceClasses.md)
+ [RDS for SQL Server ライセンス込みインスタンスの CPU を最適化する](SQLServer.Concepts.General.OptimizeCPU.md)
+ [Microsoft SQL Server のセキュリティ](SQLServer.Concepts.General.FeatureSupport.UnsupportedRoles.md)
+ [Microsoft SQL Server DB インスタンス用のコンプライアンスプログラムサポート](#SQLServer.Concepts.General.Compliance)
+ [Amazon RDS での Microsoft SQL Server バージョン](SQLServer.Concepts.General.VersionSupport.md)
+ [Amazon RDS での Microsoft SQL Server の機能](SQLServer.Concepts.General.FeatureSupport.md)
+ [Microsoft SQL Server のデータベースミラーリングまたは Always On 可用性グループを使用したマルチ AZ 配置](#SQLServer.Concepts.General.Mirroring)
+ [Transparent Data Encryption を使用した保管時のデータの暗号化](#SQLServer.Concepts.General.Options)
+ [Amazon RDS for Microsoft SQL Server 用の関数とストアドプロシージャ](SQLServer.Concepts.General.StoredProcedures.md)
+ [Microsoft SQL Server DB インスタンスのローカルタイムゾーン](SQLServer.Concepts.General.TimeZone.md)
+ [Amazon RDS での Microsoft SQL Server のライセンス](SQLServer.Concepts.General.Licensing.md)
+ [SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)
+ [RDS for SQL Server での SQL Server Developer Edition の使用](sqlserver-dev-edition.md)
+ [RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)
+ [Microsoft SQL Server DB エンジンのアップグレード](USER_UpgradeDBInstance.SQLServer.md)
+ [RDS for SQL Server のストレージの使用](Appendix.SQLServer.CommonDBATasks.DatabaseStorage.md)
+ [ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)
+ [Amazon RDS での Microsoft SQL Server 用のリードレプリカの使用](SQLServer.ReadReplicas.md)
+ [Amazon RDS for Microsoft SQL Server のマルチ AZ 配置](USER_SQLServerMultiAZ.md)
+ [Amazon RDS での Microsoft SQL Server の追加機能](User.SQLServer.AdditionalFeatures.md)
+ [Microsoft SQL Server データベースエンジンのオプション](Appendix.SQLServer.Options.md)
+ [Amazon RDS for Microsoft SQL Server の一般的な DBA タスク](Appendix.SQLServer.CommonDBATasks.md)

## Amazon RDS の Microsoft SQL Server 用の一般的な管理タスク
<a name="SQLServer.Concepts.General"></a>

以下に示しているのは、Amazon RDS for SQL Server DB インスタンスで実行する一般的な管理タスクと、各タスクの関連ドキュメントへのリンクです。


****  

| タスク領域 | 説明 | 関連資料 | 
| --- | --- | --- | 
|  **インスタンスクラス、ストレージ、PIOPS**  |  本稼働用に DB インスタンスを作成する場合、インスタンスクラス、ストレージタイプ、およびプロビジョンド IOPS が Amazon RDS でどのように機能するか理解する必要があります。  |  [Microsoft SQL Server の DB インスタンスクラスのサポート](SQLServer.Concepts.General.InstanceClasses.md) [Amazon RDS ストレージタイプ](CHAP_Storage.md#Concepts.Storage)  | 
|  **マルチ AZ 配置**  |  本稼働 DB インスタンスは、マルチ AZ 配置を使用する必要があります。マルチ AZ 配置は、DB インスタンスの拡張された可用性、データ堅牢性、および耐障害性を提供します。SQL Server のマルチ AZ 配置は、SQL Server ネイティブの DBM または AG テクノロジーを使用して実装されます。  |  [Amazon RDS でのマルチ AZ 配置の設定と管理](Concepts.MultiAZ.md) [Microsoft SQL Server のデータベースミラーリングまたは Always On 可用性グループを使用したマルチ AZ 配置](#SQLServer.Concepts.General.Mirroring)  | 
|  **Amazon Virtual Private Cloud (VPC)**  |  AWS アカウントにデフォルト VPC がある場合、DB インスタンスがデフォルト VPC 内に自動的に作成されます。アカウントにデフォルト VPC がない場合、DB インスタンスを VPC に作成する必要があるときは、DB インスタンスを作成する前に VPC とサブネットグループを作成する必要があります。  |  [VPC 内の DB インスタンスの使用](USER_VPC.WorkingWithRDSInstanceinaVPC.md)  | 
|  **セキュリティグループ**:  |  デフォルトでは、DB インスタンスが作成されると、アクセスを禁止するファイアウォールが設定されます。したがって、DB インスタンスにアクセスするために、正しい IP アドレスとネットワーク構成を備えたセキュリティグループを作成する必要があります。  |  [セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)  | 
|  **パラメータグループ**  |  DB インスタンスに特定のデータベースパラメータが必要になる場合は、DB インスタンスを作成する前にパラメータグループを作成する必要があります。  |  [Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)  | 
|  **オプショングループ**  |  DB インスタンスに特定のデータベースオプションが必要になる場合は、DB インスタンスを作成する前にオプショングループを作成する必要があります。  |  [Microsoft SQL Server データベースエンジンのオプション](Appendix.SQLServer.Options.md)  | 
|  **DB インスタンスへの接続**  |  セキュリティグループを作成し、それを DB インスタンスに関連付けると、Microsoft SQL Server Management Studio などの標準的な SQL クライアントアプリケーションを使用して DB インスタンスに接続できます。  |  [SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)  | 
|  **バックアップと復元**  |  DB インスタンスを作成するとき、自動バックアップが作成されるように設定できます。完全バックアップファイル (.bak ファイル) を使用することで、データベースを手動でバックアップおよび復元することもできます。  |  [バックアップの概要](USER_WorkingWithAutomatedBackups.md) [ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)  | 
|  **モニタリング**  |  CloudWatch Amazon RDS メトリクス、イベント、および拡張モニタリングを使用することで、SQL Server DB インスタンスをモニタリングできます。  |  [Amazon RDS コンソールでのメトリクスの表示](USER_Monitoring.md) [Amazon RDS イベントの表示](USER_ListEvents.md)  | 
|  **ログファイル**  |  SQL Server DB インスタンスのログファイルにアクセスできます。  |  [Amazon RDS ログファイルのモニタリング](USER_LogAccess.md) [Amazon RDS for Microsoft SQL Server データベースのログファイル](USER_LogAccess.Concepts.SQLServer.md)  | 

SQL Server DB インスタンスを使用するための高度な管理タスクがあります。詳細については、次のドキュメントを参照してください。
+ [Amazon RDS for Microsoft SQL Server の一般的な DBA タスク](Appendix.SQLServer.CommonDBATasks.md).
+ [RDS for SQL Server による AWS Managed Active Directory の操作](USER_SQLServerWinAuth.md)
+ [tempdb データベースへのアクセス](SQLServer.TempDB.md)

## Microsoft SQL Server DB インスタンスの制限
<a name="SQLServer.Concepts.General.FeatureSupport.Limits"></a>

DB インスタンスへの Microsoft SQL Server の Amazon RDS 実装には、注意が必要ないくつかの制限があります。
+ DB インスタンスでサポートされるデータベースの最大数は、インスタンスクラスタイプと可用性モードのシングル AZ、マルチ AZ データベースミラーリング (DBM)、またはマルチ AZ 可用性グループ (AG) によって異なります。Microsoft SQL Server システムは、この制限にはカウントされません。

  次の表は、各インスタンスクラスタイプと可用性モードでサポートされるデータベースの最大数を示しています。この表は、あるインスタンスクラスタイプから別のインスタンスクラスタイプに移動するか、ある可用性モードから別の可用性モードに移行することができるのかを判断するのに役立ちます。ソース DB インスタンスに、ターゲットインスタンスのクラスタイプまたは可用性モードがサポートできる数より多いデータベースがある場合、DB インスタンスの変更は失敗します。リクエストのステータスは、[**イベント**] ウィンドウで確認できます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)

  \$1 は、インスタンスクラスの異なるタイプを表します。

  例えば、DB インスタンスが、シングル AZ の db.\$1.16xlarge で実行されており、76 のデータベースを持っているとします。マルチ AZ の Always On AG を使用してアップグレードする DB インスタンスを変更します。DB インスタンスにターゲット設定でサポートできる以上のデータベースが含まれているため、このアップグレードは失敗します。インスタンスクラスタイプを db.\$1.24xlarge にアップグレードする場合には、その変更は成功します。

  アップグレードが失敗すると、次のようなイベントおよびメッセージが表示されます。
  +  データベースインスタンスクラスを変更できません。インスタンスには 76 個のデータベースがありますが、変換後にサポートされるのは 75 個のみです。
  +  DB インスタンスクラスを マルチ AZ に変換できません。インスタンスには 76 のデータベースがありますが、変換後にサポートされるのは 75 のみです。

   ポイントインタイムリストアまたはスナップショットリストアに失敗すると、次のようなイベントやメッセージが表示されます。
  +  データベースインスタンスが互換性のない復元になりました。インスタンスには 76 個のデータベースがありますが、変換後にサポートされるのは 75 個のみです。
+ 以下のポートは、Amazon RDS 用に予約されているため、DB インスタンスの作成時には使用できません: `1234, 1434, 3260, 3343, 3389, 47001,` および `49152-49156`。
+ 169.254.0.0/16 の範囲内の IP アドレスからのクライアント接続は許可されていません。これは、ローカルリンクのアドレス指定に使用される Automatic Private IP Addressing Range (APIPA) です。
+ DB インスタンスにソフトウェアの制限 (24 コア、4 ソケット、128 GB RAM) よりも多くのプロセッサがある場合、SQL Server Standard Edition は使用可能なプロセッサのサブセットのみを使用します。この例は、db.m5.24xlarge および db.r5.24xlarge インスタンスクラスです。

  詳細については、Microsoft のドキュメントの「[Editions and supported features of SQL Server 2019 (15.x)](https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-version-15)」のスケール制限の表を参照してください。
+ Amazon RDS for SQL Server では、msdb データベースへのデータのインポートがサポートされていません。
+ SQL Server マルチ AZ 配置の DB インスタンスにあるデータベースの名前は変更できません。
+ RDS for SQL Server で次の DB パラメータを設定する場合は、必ずこれらのガイドラインを使用してください。
  + `max server memory (mb)` >= 256 MB
  + `max worker threads` >= (論理CPUの数 \$1 7)

  DB パラメータの設定の詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。
+ SQL Server DB インスタンスの最大ストレージのサイズは次のとおりです。
  + 汎用 (SSD) ストレージ – すべてのエディションで 16 TiB 
  + プロビジョンド IOPS ストレージ – すべてのエディションで 64 TiB 
  + マグネティックストレージ – すべてのエディションで 1 TiB 

  さらに大きいサイズのストレージを必要とするシナリオでは、複数の DB インスタンスにまたがるシャーディングを使用することによって制限を回避できます。このアプローチでは、シャーディングされたシステムに接続するアプリケーションに、データに依存するルーティングロジックが必要です。既存のシャーディングフレームワークを使用するか、カスタムコードを記述してシャーディングを有効にできます。既存のフレームワークを使用する場合、このフレームワークは DB インスタンスと同じサーバーのコンポーネントにインストールできません。
+ SQL Server DB インスタンスの最小ストレージサイズは次のとおりです。
  + 汎用 (SSD) ストレージ – Enterprise、Standard、Web および Express Edition 向けは 20 GiB
  + プロビジョンド IOPS ストレージ – Enterprise、Standard、Web および Express Editions 向けは 20 GiB
  + マグネティックストレージ – Enterprise、Standard、Web および Express エディション向けは 20 GiB
+ Amazon RDS では、RDS DB インスタンスと同じサーバー上でのこれらのサービスの実行をサポートしていません。
  + Data Quality Services
  + マスターデータサービス

  これらの機能を使用するには、SQL Server を Amazon EC2 インスタンスにインストールするか、オンプレミスの SQL Server インスタンスを使用します。このような場合、EC2 インスタンスまたは SQL Server インスタンスは、Amazon RDS の SQL Server DB インスタンスのマスターデータサービスサーバーとして機能します。Microsoft のライセンスポリシーに従って、Amazon EBS とともに Amazon EC2 インスタンスに SQL サーバーをインストールできます。
+ Microsoft SQL Server の制限により、`DROP DATABASE` の実行が成功する前の時点に復元した場合、その時点のデータベースの状態が反映されない可能性があります。例えば、削除されたデータベースは通常、`DROP DATABASE` コマンドが発行される前の最大 5 分前の状態に復元されます。このタイプの復元は、削除されたデータベースに数分間に行われたトランザクションを復元できないことを意味します。この問題に対処するには、復元オペレーションが完了してから `DROP DATABASE` コマンドを再発行します。データベースを削除すると、そのデータベースのトランザクションログが削除されます。
+ SQL Server の場合は、DB インスタンスを作成した後、データベースを作成します。データベース名は、通常の SQL Server の命名ルールに従いますが、以下の点が異なります。
  + データベース名を `rdsadmin` で始めることはできません。
  + 先頭や末尾にスペースやタブを含めることはできません。
  + 新しい行を作成する文字を含めることはできません。
  + 一重引用符 (`'`) を含めることはできません。
+ SQL Server Web Edition では、新しい RDS for SQL Server DB インスタンスを作成するときにのみ、**開発/テスト**テンプレートを使用できます。
+ SQL Server Web Edition は、パブリックおよびインターネットにアクセスできるウェブページ、ウェブサイト、ウェブアプリケーション、ウェブサービスをホストするウェブホストおよびウェブ VAP 向けに設計されています。詳細については、「[Amazon RDS での Microsoft SQL Server のライセンス](SQLServer.Concepts.General.Licensing.md)」を参照してください。

# Microsoft SQL Server の DB インスタンスクラスのサポート
<a name="SQLServer.Concepts.General.InstanceClasses"></a>

DB インスタンスの計算とメモリの容量は、DB インスタンスクラスによって決まります。必要な DB インスタンスクラスは、処理能力とメモリの要件によって異なります。詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。

Microsoft SQL Server でサポートされている DB インスタンスクラスの以下のリストは、参考のために示しています。最新のリストについては、RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) でご確認ください。

すべての DB インスタンスクラスが、サポートされているすべての SQL Server マイナーバージョンで使用できるわけではありません。例えば、db.r6i などの新しい DB インスタンスクラスは、古いマイナーバージョンでは使用できません。[describe-orderable-db-instance-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/describe-orderable-db-instance-options.html) AWS CLI コマンドを使用して、SQL Server のエディションとバージョンで使用可能な DB インスタンスクラスを調べることができます。


****  

| SQL Server エディション | 2022 サポートの範囲 | 2019 サポートの範囲 | 2017 および 2016 サポートの範囲 | 
| --- | --- | --- | --- | 
|  Enterprise Edition  | `db.t3.xlarge`–`db.t3.2xlarge``db.r5.xlarge`–`db.r5.24xlarge``db.r5b.xlarge`–`db.r5b.24xlarge``db.r5d.xlarge`–`db.r5d.24xlarge``db.r6i.xlarge`–`db.r6i.32xlarge`db.r7i.xlarge–db.r7i.48xlarge`db.m5.xlarge`–`db.m5.24xlarge``db.m5d.xlarge`–`db.m5d.24xlarge``db.m6i.xlarge`–`db.m6i.32xlarge``db.m7i.xlarge`–`db.m7i.48xlarge``db.x2iedn.xlarge`–`db.x2iedn.32xlarge``db.z1d.xlarge`–`db.z1d.12xlarge` |  `db.t3.xlarge`–`db.t3.2xlarge` `db.r5.xlarge`–`db.r5.24xlarge` `db.r5b.xlarge`–`db.r5b.24xlarge` `db.r5d.xlarge`–`db.r5d.24xlarge` `db.r6i.xlarge`–`db.r6i.32xlarge` `db.r7i.xlarge`–`db.r7i.48xlarge` `db.m5.xlarge`–`db.m5.24xlarge` `db.m5d.xlarge`–`db.m5d.24xlarge` `db.m6i.xlarge`–`db.m6i.32xlarge` `db.m7i.xlarge`–`db.m7i.48xlarge` `db.x2iedn.xlarge`–`db.x2iedn.32xlarge` `db.z1d.xlarge`–`db.z1d.12xlarge`  |  `db.t3.xlarge`–`db.t3.2xlarge` `db.r5.xlarge`–`db.r5.24xlarge` `db.r5b.xlarge`–`db.r5b.24xlarge` `db.r5d.xlarge`–`db.r5d.24xlarge` `db.r6i.xlarge`–`db.r6i.32xlarge` `db.r7i.xlarge`–`db.r7i.48xlarge` `db.m5.xlarge`–`db.m5.24xlarge` `db.m5d.xlarge`–`db.m5d.24xlarge` `db.m6i.xlarge`–`db.m6i.32xlarge` `db.m7i.xlarge`–`db.m7i.48xlarge` `db.x2iedn.xlarge`–`db.x2iedn.32xlarge` `db.z1d.xlarge`–`db.z1d.12xlarge`  | 
|  Standard Edition  | `db.t3.xlarge`–`db.t3.2xlarge``db.r5.large`–`db.r5.24xlarge``db.r5b.large`–`db.r5b.8xlarge``db.r5d.large`–`db.r5d.24xlarge``db.r6i.large`–`db.r6i.8xlarge`db.r7i.large–db.r7i.12xlarge`db.m5.large`–`db.m5.24xlarge``db.m5d.large`–`db.m5d.24xlarge``db.m6i.large`–`db.m6i.8xlarge``db.m7i.large`–`db.m7i.12xlarge``db.x2iedn.xlarge`–`db.x2iedn.8xlarge``db.z1d.large`–`db.z1d.12xlarge` |  `db.t3.xlarge`–`db.t3.2xlarge` `db.r5.large`–`db.r5.24xlarge` `db.r5b.large`–`db.r5b.24xlarge` `db.r5d.large`–`db.r5d.24xlarge` `db.r6i.large`–`db.r6i.8xlarge` `db.r7i.large`–`db.r7i.12xlarge` `db.m5.large`–`db.m5.24xlarge` `db.m5d.large`–`db.m5d.24xlarge` `db.m6i.large`–`db.m6i.8xlarge` `db.m7i.large`–`db.m7i.12xlarge` `db.x2iedn.xlarge`–`db.x2iedn.32xlarge` `db.z1d.large`–`db.z1d.12xlarge`  | `db.t3.xlarge`–`db.t3.2xlarge``db.r5.large`–`db.r5.24xlarge``db.r5b.large`–`db.r5b.24xlarge``db.r5d.large`–`db.r5d.24xlarge``db.r6i.large`–`db.r6i.8xlarge``db.r7i.large`–`db.r7i.12xlarge``db.m5.large`–`db.m5.24xlarge``db.m5d.large`–`db.m5d.24xlarge``db.m6i.large`–`db.m6i.8xlarge`db.m7i.large–db.m7i.12xlarge`db.x2iedn.xlarge`–`db.x2iedn.32xlarge``db.z1d.large`–`db.z1d.12xlarge` | 
|  Web Edition  | `db.t3.small`–`db.t3.xlarge``db.r5.large`–`db.r5.4xlarge``db.r5b.large`–`db.r5b.4xlarge``db.r5d.large`–`db.r5d.4xlarge`db.r6i.large–db.r6i.4xlarge`db.r7i.large`–`db.r7i.4xlarge``db.m5.large`–`db.m5.4xlarge``db.m5d.large`–`db.m5d.4xlarge``db.m6i.large`–`db.m6i.4xlarge``db.m7i.large`–`db.m7i.4xlarge``db.z1d.large`–`db.z1d.13xlarge` | `db.t3.small`–`db.t3.2xlarge``db.r5.large`–`db.r5.4xlarge``db.r5b.large`–`db.r5b.4xlarge``db.r5d.large`–`db.r5d.4xlarge``db.r6i.large`–`db.r6i.4xlarge`db.r7i.large–db.r7i.4xlarge`db.m5.large`–`db.m5.4xlarge``db.m5d.large`–`db.m5d.4xlarge``db.m6i.large`–`db.m6i.4xlarge`db.m7i.large–db.m7i.4xlarge`db.z1d.large`–`db.z1d.3xlarge` | `db.t3.small`–`db.t3.2xlarge``db.r5.large`–`db.r5.4xlarge``db.r5b.large`–`db.r5b.4xlarge``db.r5d.large`–`db.r5d.4xlarge``db.r6i.large`–`db.r6i.4xlarge`db.r7i.large–db.r7i.4xlarge`db.m5.large`–`db.m5.4xlarge``db.m5d.large`–`db.m5d.4xlarge``db.m6i.large`–`db.m6i.4xlarge`db.m7i.large–db.m7i.4xlarge`db.z1d.large`–`db.z1d.3xlarge` | 
|  Express Edition  |  `db.t3.micro`–`db.t3.xlarge`  |  `db.t3.micro`–`db.t3.xlarge`  |  `db.t3.micro`–`db.t3.xlarge`  | 
| Developer Edition | `db.m6i.xlarge`–`db.m6i.32xlarge``db.r6i.xlarge`–`db.r6i.32xlarge` |  |  | 

**注記**  
 第 7 世代のインスタンスクラス以降、インスタンスサイズが 2xlarge 以上の RDS SQL Server ではハイパースレッディングは無効になっています。これにより、使用可能な vCPU の総数は、[対応する EC2 インスタンス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html)でサポートされている数の半分になります。例えば、EC2 インスタンスタイプ `m7i.2xlarge` はデフォルトで 4 つのコアと threadsPerCore 2 をサポートしているため、合計 8 つの vCPU になります。これとは対照的に、ハイパースレッディングが無効になっている RDS for SQL Server `db.m7i.2xlarge` インスタンスでは、4 つのコアと threadsPerCore 1 で、合計 4 つの vCPU になります。
第 7 世代インスタンス以降、請求では RDS DB インスタンスとサードパーティーのライセンス料金の詳細な内訳が提供されます。詳細については、「[RDS SQL Server の料金](https://aws.amazon.com/rds/sqlserver/pricing/)」を参照してください。

# RDS for SQL Server ライセンス込みインスタンスの CPU を最適化する
<a name="SQLServer.Concepts.General.OptimizeCPU"></a>

RDS for SQL Server では、プロセッサ機能を指定して CPU を最適化し、同じメモリと IOPS を維持しながら DB インスタンスの vCPU 数を設定できます。特定のデータベースワークロード要件に必要なメモリ対 CPU 比を実現し、vCPU 数に基づく Microsoft Windows OS と SQL Server のライセンスコストを削減できます。

プロセッサ機能を指定するには、次のパラメータを使用します。

```
--processor-features "Name=coreCount,Value=value" \ 
	"Name=threadsPerCore,Value=value"
```
+ **coreCount** – DB インスタンスのライセンスコストを最適化するために、DB インスタンスの CPU コア数を指定します。選択したインスタンスタイプのコア数の許容値を確認するには、「[CPU の最適化をサポートする DB インスタンスクラスDB インスタンスクラスのサポート](SQLServer.Concepts.General.OptimizeCPU.Support.md)」を参照してください。
+ **threadsPerCore** – CPU コアあたりのスレッド数を定義するには、コアあたりのスレッドを指定します。選択したインスタンスタイプのコアあたりのスレッドの許容値を確認するには、「[CPU の最適化をサポートする DB インスタンスクラスDB インスタンスクラスのサポート](SQLServer.Concepts.General.OptimizeCPU.Support.md)」を参照してください。

CPU 設定を最適化して RDS for SQL Server インスタンスを作成するためのサンプルコマンド:

```
aws rds create-db-instance \
    --engine sqlserver-ee \
    --engine-version 16.00 \
    --license-model license-included \
    --allocated-storage 300 \
    --master-username myuser \
    --master-user-password xxxxx \
    --no-multi-az \
    --vpc-security-group-ids myvpcsecuritygroup \
    --db-subnet-group-name mydbsubnetgroup \
    --db-instance-identifier my-rds-instance \
    --db-instance-class db.m7i.8xlarge \
    --processor-features "Name=coreCount,Value=8" "Name=threadsPerCore,Value=1"
```

この例では、デフォルトで coreCount が 16 の `db.m7i.8xlarge` インスタンスを作成します。CPU の最適化を使用すると、coreCount が 8 になり、有効な vCPU 数が 8 になります。

`--processor-features` パラメータなしでインスタンスを作成する場合、コア数は 16 に設定され、コアあたりのスレッド数はデフォルトで 1 に設定されるため、デフォルトの vCPU 数は 16 になります。

プロセッサ機能を指定する際に留意すべき考慮事項は次のとおりです。
+ **作成** – 許可された値から `processor-features` パラメータに `coreCount` と `threadsPerCore` の両方を指定します。「[CPU の最適化をサポートする DB インスタンスクラスDB インスタンスクラスのサポート](SQLServer.Concepts.General.OptimizeCPU.Support.md)」を参照してください。
+ **変更** – CPU 設定の最適化で設定されたインスタンスクラスから CPU 設定の最適化をサポートするインスタンスクラスに変更する場合は、`--use-default-processor-features` パラメータを使用してデフォルトのプロセッサ設定を指定するか、変更リクエスト中にオプションを明示的に定義する必要があります。
**注記**  
vCPU 数を変更すると、DB インスタンスに関連するライセンス料金に影響する可能性があります。
+ **スナップショットの復元** – スナップショットをソースと同じインスタンスタイプに復元する場合、復元された DB インスタンスはスナップショットから CPU 設定の最適化を継承します。別のインスタンスタイプに復元する場合は、ターゲットインスタンスの CPU 設定の最適化を定義するか、`--use-default-processor-features` パラメータを指定する必要があります。
+ **ポイントインタイムリストア** – ポイントインタイムリストア (PITR) では、PITR の指定された時間に基づいて特定のスナップショットを復元し、その後、すべてのトランザクションログバックアップをそのスナップショットに適用して、インスタンスを指定されたポイントインタイムに移行します。PITR の場合、CPU 設定の最適化、`coreCount` および `threadsPerCore` は、PITR リクエスト中にカスタム値が指定されている場合を除き、ソーススナップショット (ポイントインタイムではない) から取得されます。使用されているソーススナップショットが CPU 設定の最適化で有効になっており、PITR に別のインスタンスタイプを使用している場合は、ターゲットインスタンスの CPU 設定の最適化を定義するか、`—-use-default-processor-features` パラメータを指定する必要があります。

## 制限
<a name="SQLServer.Concepts.General.OptimizeCPU.Limitations"></a>

CPU の最適化を使用する際は、次の制限が適用されます。
+ CPU の最適化は、Enterprise、Standard、および Web Edition でのみサポートされています。
+ CPU の最適化は、一部のインスタンスで使用できます。「[CPU の最適化をサポートする DB インスタンスクラスDB インスタンスクラスのサポート](SQLServer.Concepts.General.OptimizeCPU.Support.md)」を参照してください。
+ CPU コアの数のカスタマイズは、`2xlarge` 以上のインスタンスサイズでサポートされています。これらのインスタンスタイプでは、CPU の最適化でサポートされる vCPCU の最小数は 4 です。
+ CPU の最適化では、CPU の最適化をサポートする第 7 世代以降のインスタンスでハイパースレッディングが無効になるため、コアあたり 1 つのスレッドしか許可されません。

# CPU の最適化をサポートする DB インスタンスクラス
<a name="SQLServer.Concepts.General.OptimizeCPU.Support"></a>

RDS for SQL Server は、第 7 世代のインスタンスクラスタイプで始まる CPU の最適化をサポートしています。さらに、RDS は、CPU の最適化機能が有効になっているかどうかにかかわらず、第 7 世代インスタンスクラスタイプから RDS DB インスタンスとサードパーティーライセンス料金の詳細な請求内訳を提供します。

RDS for SQL Server では、特定のインスタンスサイズで CPU の最適化がサポートされ、サポートされている最小インスタンスサイズは `2xlarge` です。サポートされている最小設定は 4 vCPU です。次の表は、CPU コアのデフォルト値と有効な値、コアあたりの CPU スレッド、vCPU など、CPU の最適化をサポートする DB インスタンスクラスの概要を示しています。


**汎用インスタンス**  

| インスタンスタイプ | デフォルト vCPU | デフォルトの CPU コア | 有効な CPU コア | コアあたりの有効なスレッド | 
| --- | --- | --- | --- | --- | 
| `m7i.large` | 2 | 1 | 1 | 2 | 
| `m7i.xlarge` | 4 | 2 | 2 | 2 | 
| `m7i.2xlarge` | 4 | 4 | 1、2、3、4 | 1 | 
| `m7i.4xlarge` | 8 | 8 | 1、2、3、4、5、6、7、8 | 1 | 
| `m7i.8xlarge` | 16 | 16 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16 | 1 | 
| `m7i.12xlarge` | 24 | 24 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24 | 1 | 
| `m7i.16xlarge` | 32 | 32 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32 | 1 | 


**メモリ最適化インスタンス**  

| インスタンスタイプ | デフォルト vCPU | デフォルトの CPU コア | 有効な CPU コア | コアあたりの有効なスレッド | 
| --- | --- | --- | --- | --- | 
| `r7i.large` | 2 | 1 | 1 | 2 | 
| `r7i.xlarge` | 4 | 2 | 2 | 2 | 
| `r7i.2xlarge` | 4 | 4 | 1、2、3、4 | 1 | 
| `r7i.4xlarge` | 8 | 8 | 1、2、3、4、5、6、7、8 | 1 | 
| `r7i.8xlarge` | 16 | 16 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16 | 1 | 
| `r7i.12xlarge` | 24 | 24 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24 | 1 | 
| `r7i.16xlarge` | 32 | 32 | 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32 | 1 | 

# DB インスタンスクラスの CPU コア数と CPU コアあたりのスレッド数の設定
<a name="SQLServer.Concepts.General.OptimizeCPU.Enabling"></a>

次のオペレーションを実行するときに、DB インスタンスクラスの CPU コア数とコアあたりのスレッド数を設定できます。
+ [Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)
+ [Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)
+ [DB インスタンスへの復元](USER_RestoreFromSnapshot.md)
+ [Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)

**注記**  
DB インスタンスを変更してコアごとの CPU 数とスレッド数を指定する際に、インスタンスクラスを変更したときと同様に、短時間の停止が発生します。

AWS マネジメントコンソール、AWS CLI または RDS API を使用して CPU コアを設定します。

## コンソール
<a name="SQLServer.Concepts.General.OptimizeCPU.Enabling.CON"></a>

**コアを設定するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. [**データベースの作成**] を選択します。

1. **[インスタンス設定]** オプションを設定する場合:

   1. **[CPU を最適化]** オプションを選択します。

   1. コア数を選択して **[vCPU]** オプションを設定します。  
![\[OCPU 設定時のデータベース作成ページ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/OCPU-screenshot.png)

1. 他の選択が完了したら、**[データベースの作成]** を選択します。

## AWS CLI
<a name="SQLServer.Concepts.General.OptimizeCPU.Enabling.CLI"></a>

**コアを設定するには**

1. AWS CLI を使用して CPU の最適化を設定するには、コマンドに `--processor-features` オプションを含めます。`coreCount` および `threadsPerCore` を `1` にして、CPU コアの数を指定します。

1. 次の構文を使用します。

   ```
   aws rds create-db-instance \
       --engine sqlserver-ee \
       --engine-version 16.00 \
       --license-model license-included \
       --allocated-storage 300 \
       --master-username myuser \
       --master-user-password xxxxx \
       --no-multi-az \
       --vpc-security-group-ids myvpcsecuritygroup \
       --db-subnet-group-name mydbsubnetgroup \
       --db-instance-identifier my-rds-instance \
       --db-instance-class db.m7i.4xlarge \
       --processor-features "Name=coreCount,Value=6" "Name=threadsPerCore,Value=1"
   ```

**Example DB インスタンスクラスの有効なプロセッサ値を確認する**  
`describe-orderable-db-instance-options` コマンドを使用して、デフォルトの vCPU、コア、コアあたりのスレッドを表示します。例えば、次のコマンドの出力は db.r7i.2xlarge インスタンスクラスのプロセッサオプションを示します。  

```
aws rds describe-orderable-db-instance-options --engine sqlserver-ee \
--db-instance-class db.r7i.2xlarge

Sample output: 
-------------------------------------------------------------
|            DescribeOrderableDBInstanceOptions             |
+-----------------------------------------------------------+
||               OrderableDBInstanceOptions                ||
|+------------------------------------+--------------------+|
||  DBInstanceClass                   |  db.r7i.2xlarge    ||
||  Engine                            |  sqlserver-ee      ||
||  EngineVersion                     |  13.00.6300.2.v1   ||
||  LicenseModel                      |  license-included  ||
||  MaxIopsPerDbInstance              |                    ||
||  MaxIopsPerGib                     |                    ||
||  MaxStorageSize                    |  64000             ||
||  MinIopsPerDbInstance              |                    ||
||  MinIopsPerGib                     |                    ||
||  MinStorageSize                    |  20                ||
||  MultiAZCapable                    |  True              ||
||  OutpostCapable                    |  False             ||
||  ReadReplicaCapable                |  True              ||
||  StorageType                       |  gp2               ||
||  SupportsClusters                  |  False             ||
||  SupportsDedicatedLogVolume        |  False             ||
||  SupportsEnhancedMonitoring        |  True              ||
||  SupportsGlobalDatabases           |  False             ||
||  SupportsIAMDatabaseAuthentication |  False             ||
||  SupportsIops                      |  False             ||
||  SupportsKerberosAuthentication    |  True              ||
||  SupportsPerformanceInsights       |  True              ||
||  SupportsStorageAutoscaling        |  True              ||
||  SupportsStorageEncryption         |  True              ||
||  SupportsStorageThroughput         |  False             ||
||  Vpc                               |  True              ||
|+------------------------------------+--------------------+|
|||                   AvailabilityZones                   |||
||+-------------------------------------------------------+||
|||                         Name                          |||
||+-------------------------------------------------------+||
|||  us-west-2a                                           |||
|||  us-west-2b                                           |||
|||  us-west-2c                                           |||
||+-------------------------------------------------------+||
|||              AvailableProcessorFeatures               |||
||+-----------------+-----------------+-------------------+||
|||  AllowedValues  |  DefaultValue   |       Name        |||
||+-----------------+-----------------+-------------------+||
|||  1,2,3,4        |  4              |  coreCount        |||
|||  1              |  1              |  threadsPerCore   |||
||+-----------------+-----------------+-------------------+||
```
さらに、次のコマンドを実行して DB インスタンスのクラスのプロセッサ情報を取得できます。  
+ `describe-db-instances` - 指定された DB インスタンスのプロセッサ情報を示します
+ `describe-db-snapshots` - 指定された DB スナップショットのプロセッサ情報を示します
+ `describe-valid-db-instance-modifications` - 指定された DB インスタンスのプロセッサに対する有効な変更を示します
前述のコマンドの出力では、CPU の最適化が設定されていない場合、プロセッサ機能の値は `null` になります。

**Example DB インスタンスの CPU コア数の設定**  
次の例では、CPU コアの数を 4、threadsPerCore を 1 に設定して *mydbinstance* を変更します。`--apply-immediately` を使用して変更をすぐに適用します。変更を次の予定されるメンテナンスウィンドウ中に適用するには、`--apply-immediately option` を省略します。  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.r7i.8xlarge \
    --processor-features "Name=coreCount,Value=4" "Name=threadsPerCore,Value=1" \
    --apply-immediately
```

**Example DB インスタンスのデフォルトのプロセッサ設定に戻す**  
次の例では、*mydbinstance* をデフォルトのプロセッサ値に戻すことで変更します。  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --db-instance-class db.r7i.8xlarge \
    --use-default-processor-features \
    --apply-immediately
```

# Microsoft SQL Server のセキュリティ
<a name="SQLServer.Concepts.General.FeatureSupport.UnsupportedRoles"></a>

Microsoft SQL Server データベースエンジンではロールベースのセキュリティを使用します。DB インスタンスを作成する際に指定するマスターユーザー名は、`processadmin`、`public`、および `setupadmin` 固定サーバーロールのメンバーである SQL Server 認証のログインです。

データベースを作成するユーザーには、そのデータベースの db\$1owner ロールが割り当てられ、バックアップに使用されるものを除き、データベースレベルのアクセス許可がすべて付与されます。バックアップは、Amazon RDS により自動的に実行されます。

次のサーバーレベルのロールは、Amazon RDS for SQL Server では使用できません。
+ bulkadmin
+ dbcreator
+ diskadmin
+ securityadmin
+ serveradmin
+ sysadmin

RDS for SQL Server DB インスタンスでは、次のサーバーレベルの許可は使用できません。
+ ALTER ANY DATABASE (任意のデータベースの変更)
+ ALTER ANY EVENT NOTIFICATION (すべてのイベント通知の変更)
+ ALTER RESOURCES (リソースの変更)
+ ALTER SETTINGS (設定の変更。DB パラメータグループ API オペレーションを使用してパラメータを変更できます。詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照) 
+ AUTHENTICATE SERVER (サーバーの認証)
+ CONTROL\$1SERVER (コントロールサーバー)
+ CREATE DDL EVENT NOTIFICATION (DDL イベントの通知の作成)
+ CREATE ENDPOINT (エンドポイントの作成)
+ CREATE SERVER ROLE
+ CREATE TRACE EVENT NOTIFICATION (追跡イベント通知の作成)
+ DROP ANY DATABASE (任意のデータベースのドロップ)
+ EXTERNAL ACCESS ASSEMBLY (外部アクセスアセンブリ)
+ SHUTDOWN (代わりに RDS 起動オプションを使用できます)
+ UNSAFE ASSEMBLY (安全ではないアセンブリ)
+ 任意の可用性グループの変更
+ 可用性グループを作成する

## Microsoft SQL Server DB インスタンスの SSL サポート
<a name="SQLServer.Concepts.General.SSL"></a>

アプリケーションと Microsoft SQL Server を実行する Amazon RDS DB インスタンス間の接続は、SSL を使用して暗号化できます。また、DB インスタンスへのすべての接続に SSL の使用を強制することができます。接続に SSL の使用を強制する場合、これはクライアントに対して透過的に行われ、クライアントは SSL を使用するための作業を行う必要はありません。

SSL は、すべての AWS リージョンおよび対応しているすべての SQL Server エディションでサポートされています。詳細については、「[Microsoft SQL Server DB インスタンスでの SSL の使用](SQLServer.Concepts.General.SSL.Using.md)」を参照してください。

# Microsoft SQL Server DB インスタンスでの SSL の使用
<a name="SQLServer.Concepts.General.SSL.Using"></a>

クライアントアプリケーションと Microsoft SQL Server を実行する Amazon RDS DB インスタンス間の接続は、Secure Sockets Layer (SSL) を使用して暗号化できます。SSL サポートは、AWS のすべてのリージョンで、サポート対象の SQL Server のすべてのエディションでご利用いただけます。

SQL Server DB インスタンスを作成する際、Amazon RDS はそのインスタンスの SSL 証明書を作成します。SSL 証明書には、なりすまし攻撃から保護するために、SSL 証明書の共通名（CN）として DB インスタンスのエンドポイントが含まれています。

SSL を使用して SQL Server DB インスタンスに接続する方法は 2 とおりあります。
+ すべての接続に SSL を強制する — これはクライアントに対して透過的に行われ、クライアントは SSL を使用するための作業を行う必要はありません。
**注記**  
`rds.force_ssl` を `1` に設定して SSMS バージョン 19.3、20.0、および 20.2 を使用する場合は、以下を確認します。  
SSMS で **[信頼サーバー証明書]** を有効にします。
システムに証明書をインポートします。
+ 特定の接続を暗号化する — 特定のクライアントコンピュータから SSL 接続を確立します。接続を暗号化するためにクライアントで作業を行う必要があります。

SQL Server での Transport Layer Security (TLS) サポートについては、「[Microsoft SQL Server 用の TLS 1.2 のサポート](https://support.microsoft.com/en-ca/help/3135244/tls-1-2-support-for-microsoft-sql-server)」を参照してください。

## DB インスタンスへの接続に SSL を使用させる
<a name="SQLServer.Concepts.General.SSL.Forcing"></a>

DB インスタンスへのすべての接続に SSL の使用を強制することができます。接続に SSL の使用を強制する場合、これはクライアントに対して透過的に行われ、クライアントは SSL を使用するための作業を行う必要はありません。

SSL の使用を強制する場合、`rds.force_ssl` パラメータを使用します。デフォルトでは、`rds.force_ssl` パラメータが `0 (off)` に設定されています。接続での SSL の使用を強制するには、`rds.force_ssl` パラメータを `1 (on)` に設定します。`rds.force_ssl` パラメーターは静的であるため、値を変更した後にその変更を有効にするには、DB インスタンスを再起動する必要があります。

**DB インスタンスへの接続で SSL の使用を強制するには**

1. DB インスタンスにアタッチされているパラメータグループを決定します。

   1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

   1. Amazon RDS コンソールの右上で、DB インスタンスの AWS リージョンを選択します。

   1. ナビゲーションペインで、[**データベース**] を選択し、詳細を表示する DB インスタンスの名前を選択します。

   1. [**設定**] タブを選択します。セクションで [**パラメータグループ**] を見つけます。

1. 必要に応じて、新しいパラメーターグループを作成します。DB インスタンスでデフォルトのパラメーターグループが使用されている場合は、新しいパラメーターグループを作成する必要があります。DB インスタンスでデフォルト以外のパラメーターグループが使用されている場合は、既存のパラメーターグループを編集するか、新しいパラメーターグループを作成するかを選択できます。既存のパラメーターグループを編集する場合、その変更は、そのパラメーターグループを使用するすべての DB インスタンスに適用されます。

   新しいパラメーターグループを作成するには、「[Amazon RDS での DB パラメータグループの作成](USER_WorkingWithParamGroups.Creating.md)」の手順に従います。

1. 新規または既存のパラメーターグループを編集して、`rds.force_ssl` パラメーターを `true` に設定します。パラメーターグループを編集するには、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」の手順に従います。

1. 新しいパラメーターグループを作成した場合は、そのパラメーターグループがアタッチされるように DB インスタンスを変更します。DB インスタンスの [**DB Parameter Group**] 設定を変更します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

1. DB インスタンスを再起動します。詳細については、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。

## 特定の接続の暗号化
<a name="SQLServer.Concepts.General.SSL.Client"></a>

DB インスタンスへのすべての接続で SSL を使用するように強制することも、特定のクライアントコンピュータからの接続のみを暗号化することもできます。特定のクライアントからの接続に SSL を使用するには、クライアントコンピュータの証明書を取得し、クライアントコンピュータで証明書をインポートしてから、クライアントコンピュータからの接続を暗号化する必要があります。

**注記**  
2014 年 8 月 5 日以降に作成されたすべての SQL Server インスタンスは、SSL 証明書の共通名 (CN) フィールドで DB インスタンスのエンドポイントを使用します。2014 年 8 月 5 日より前は、VPC ベースの SQL Server のインスタンスで SSL 証明書を利用できませんでした。2014 年 8 月 5 日より前に作成された VPC ベースの SQL Server DB インスタンスの場合、SSL 証明書認証を使用し、そのインスタンスのエンドポイントを CN としてその DB インスタンスの SSL 証明書に含めるには、インスタンスの名前を変更します。DB インスタンスの名前を変更すると、新しい証明書がデプロイされ、新しい証明書を有効にするためにインスタンスは再起動されます。

### クライアントコンピュータの証明書の取得
<a name="SQLServer.Concepts.General.SSL.Certificates"></a>

クライアントコンピュータから、Microsoft SQL Server を実行する Amazon RDS DB インスタンスへの接続を暗号化するには、クライアントコンピュータに証明書が必要です。

その証明書を取得するには、クライアントコンピュータに証明書をダウンロードします。すべてのリージョンで使用できるルート証明書は、ダウンロードできます。また、古いルート証明書と新しいルート証明書の両方を含む証明書バンドルもダウンロードできます。さらに、リージョン固有の中間証明書をダウンロードすることもできます。証明書のダウンロードの詳細については、[SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化](UsingWithRDS.SSL.md) を参照してください。

適切な証明書をダウンロードしたら、以下のセクションの手順に従って Microsoft Windows オペレーティングシステムに証明書をインポートします。

### クライアントコンピュータでの証明書のインポート
<a name="SQLServer.Concepts.General.SSL.Importing"></a>

以下の手順を使用して、クライアントコンピュータの Microsoft Windows オペレーティングシステムに証明書をインポートできます。

**Windows オペレーティングシステムに証明書をインポートするには:**

1. [**Start**] メニューで、検索ボックスに「**Run**」と入力し、**Enter** キーを押します。

1. [**Open**] ボックスに「**MMC**」と入力し、[**OK**] をクリックします。

1. MMC コンソールの [**File**] メニューで、[**Add/Remove Snap-in**] を選択します。

1. [**Add or Remove Snap-ins**] ダイアログボックスの [**Available snap-ins**] で [**Certificates**]、[**Add**] の順に選択します。

1. [**Certificates snap-in**] ダイアログボックスで、[**Computer account**]、[**Next**] の順に選択します。

1. [**Select computer**] ダイアログボックスで、[**Finish**] を選択します。

1. [**Add or Remove Snap-ins**] ダイアログボックスで、[**OK**] を選択します。

1. MMC コンソールで、[**Certificates**] を展開し、[**Trusted Root Certification Authorities**] のコンテキスト (右クリック) メニューを開いて、[**All Tasks**]、[**Import**] の順に選択します。

1. Certificate Import Wizard の最初のページで、[**Next**] を選択します。

1. Certificate Import Wizard の 2 番目のページで、[**Browse**] を選択します。参照ウィンドウで、ファイルタイプを [**All files (\$1.\$1)**] に変更する必要があります。.pem は証明書の標準の拡張子ではないためです。先ほどダウンロードした .pem ファイルを見つけます。
**注記**  
SQL Server Management Studio (SSMS) などの Windows クライアントから接続する場合は、global-bundle.pem ファイルの代わりに PKCS\$17 (.p7b) 証明書形式を使用することをお勧めします。.p7b 形式により、ルートおよび中間認証機関 (CA) を含む完全な証明書チェーンが Windows 証明書ストアに正しくインポートされます。これにより、.pem インポートでチェーン全体が正しくインストールされない可能性があるため、必須の暗号化が有効になっている場合に接続エラーが発生するのを防ぐことができます。

1. [**Open**] を選択して証明書ファイルを選択したら、[**Next**] を選択します。

1. Certificate Import Wizard の 3 番目のページで、[**Next**] を選択します。

1. Certificate Import Wizard の 4 番目のページで、[**Finish**] を選択します。インポートが成功したことを示すダイアログボックスが表示されます。

1. MMC コンソールで、[**Certificates**]、[**Trusted Root Certification Authorities**] の順に展開し、[**Certificates**] を選択します。次に示すように、証明書を探してそれが存在することを確認します。  
![\[MMC コンソールのナビゲーションペインで、証明書フォルダがコンソールルート、証明書 (ローカルコンピュータ)、および Trusted Root Certification Authority からドリルダウンされて選択されます。メインページで、必要な CA 証明書を選択します。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/rds_sql_ssl_cert.png)

### Microsoft SQL Server を実行している Amazon RDS DB インスタンスへの接続の暗号化
<a name="SQLServer.Concepts.General.SSL.Encrypting"></a>

クライアントコンピュータに証明書をインポートした後、クライアントコンピュータから、Microsoft SQL Server を実行する Amazon RDS DB インスタンスへの接続を暗号化できます。

SQL Server Management Studio では、以下の手順を使用します。SQL Server Management Studio の詳細については、「[SQL Server Management Studio の使用](http://msdn.microsoft.com/en-us/library/ms174173.aspx)」を参照してください。

**SQL Server Management Studio からの接続を暗号化するには**

1. SQL Server Management Studio を起動します。

1. [**Connect to server**] で、サーバー情報、ログインユーザー名、パスワードを入力します。

1. [**Options**] を選択します。

1. [**Encrypt connection**] を選択します。

1. [**接続**] を選択します。

1. 次のクエリを実行して接続が暗号化されていることを確認します。クエリが `true` を `encrypt_option` に対して返すことを確認します。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

その他の SQL クライアントの場合は、以下の手順を実行します。

**他の SQL クライアントからの接続を暗号化するには**

1. 接続文字列に `encrypt=true` を追加します。この文字列はオプションとして、または GUI ツールの接続ページのプロパティとして使用できます。
**注記**  
JDBC を使用して接続するクライアントの SSL 暗号化を有効にするには、Java CA 証明書 (cacerts) ストアへの Amazon RDS SQL 証明書の追加が必要になる場合があります。これは、[キーツール](http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html)ユーティリティを使用して行うことができます。

1. 次のクエリを実行して接続が暗号化されていることを確認します。クエリが `true` を `encrypt_option` に対して返すことを確認します。

   ```
   select ENCRYPT_OPTION from SYS.DM_EXEC_CONNECTIONS where SESSION_ID = @@SPID
   ```

# SQL Server のセキュリティプロトコルおよび暗号の設定
<a name="SQLServer.Ciphers"></a>

DB パラメータを使用して、特定のセキュリティプロトコルと暗号のオン/オフを切り替えることができます。設定できるセキュリティパラメータ (TLS バージョン 1.2 を除く) を次の表に示します。


****  

| DB パラメータ | 許可される値 (デフォルトは太字) | 説明 | 
| --- | --- | --- | 
| rds.tls10 | デフォルト、有効、無効 | TLS 1.0. | 
| rds.tls11 | デフォルト、有効、無効 | TLS 1.1. | 
| rds.tls12 | default | TLS 1.2. この値は変更できません。 | 
| rds.fips | 0、1 |  パラメータを 1 に設定すると、RDS は連邦情報処理規格 (FIPS) 140-2 標準に準拠したモジュールの使用を強制します。 詳細については、Microsoft のドキュメントの [Use SQL Server 2016 in FIPS 140-2-compliant mode](https://docs.microsoft.com/en-us/troubleshoot/sql/security/sql-2016-fips-140-2-compliant-mode) を参照してください。  | 
| rds.rc4 | デフォルト、有効、無効 | RC4 ストリーム暗号です。 | 
| rds.diffie-hellman | デフォルト、有効、無効 | Diffie-Hellman キー交換暗号化。 | 
| rds.diffie-hellman-min-key-bit-length | デフォルト、1024、2048、3072、4096 | Diffie-Hellman キーの最小ビット長。 | 
| rds.curve25519 | デフォルト、有効、無効 | Curve25519 elliptic-curve 暗号化暗号。このパラメータは、すべてのエンジンバージョンでサポートされているわけではありません。 | 
| rds.3des168 | デフォルト、有効、無効 | 168 ビットのキー長を持つトリプルデータ暗号化標準 (DES) 暗号化暗号。 | 

**注記**  
16.00.4120.1、15.00.4365.2、14.00.3465.1、13.00.6435.1、および 12.00.6449.1 以降のマイナーエンジンバージョンでは、DB パラメータ `rds.tls10`、`rds.tls11`、`rds.rc4`、`rds.curve25519`、`rds.3des168` のデフォルト設定は*無効*になっています。それ以外の場合、デフォルト設定は*有効*です。  
16.00.4120.1、15.00.4365.2、14.00.3465.1、13.00.6435.1、および 12.00.6449.1 以降のマイナーエンジンバージョンでは、`rds.diffie-hellman-min-key-bit-length` のデフォルト設定は 3072 です。それ以外の場合、デフォルト設定は 2048 です。

セキュリティプロトコルと暗号を設定するには、次のプロセスを使用します。

1. カスタム DB パラメータグループを作成します。

1. パラメータグループのパラメータを変更します。

1. DB パラメータグループを DB インスタンスに関連付けます。

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

## セキュリティ関連のパラメータグループの作成
<a name="CreateParamGroup.Ciphers"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応するセキュリティ関連パラメータのパラメータグループを作成します。

### コンソール
<a name="CreateParamGroup.Ciphers.Console"></a>

以下の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[パラメータグループ]** を選択します。

1. **[パラメータグループの作成]** を選択します。

1. [**パラメータグループの作成**] ペインで、次の操作を行います。

   1. [**パラメータグループファミリー**] で、[**sqlserver-se-13.0**] を選択します。

   1. [**グループ名**] に、パラメータグループの識別子 (**sqlserver-ciphers-se-13** など) を入力します。

   1. [**説明**] に「**Parameter group for security protocols and ciphers**」と入力します。

1. [**Create**] (作成) を選択します。

### CLI
<a name="CreateParamGroup.Ciphers.CLI"></a>

以下の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Parameter group for security protocols and ciphers"
  ```

  Windows の場合:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Parameter group for security protocols and ciphers"
  ```

## セキュリティ関連のパラメータの変更
<a name="ModifyParams.Ciphers"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループのセキュリティ関連のパラメータを変更します。

### コンソール
<a name="ModifyParams.Ciphers.Console"></a>

以下の手順では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。この例では、TLS バージョン 1.0 をオフにします。

**パラメータグループを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**パラメータグループ**] を選択します。

1. [**sqlserver-ciphers-se-13**] などのパラメータグループを選択します。

1. [**パラメータ**] で、パラメータのリストを **rds** でフィルタ処理します。

1. [**Edit parameters**] を選択します。

1. [**rds.tls10**] を選択します。

1. [**値**] で、[**無効**] を選択します。

1. [**Save changes**] (変更の保存) をクリックします。

### CLI
<a name="ModifyParams.Ciphers.CLI"></a>

以下の手順では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。この例では、TLS バージョン 1.0 をオフにします。

**パラメータグループを変更するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --parameters "ParameterName='rds.tls10',ParameterValue='disabled',ApplyMethod=pending-reboot"
  ```

  Windows の場合:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --parameters "ParameterName='rds.tls10',ParameterValue='disabled',ApplyMethod=pending-reboot"
  ```

## セキュリティ関連のパラメータグループと DB インスタンスの関連付け
<a name="AssocParamGroup.Ciphers"></a>

パラメータグループを DB インスタンスに関連付けるには、AWS マネジメントコンソール または AWS CLI を使用します。

### コンソール
<a name="AssocParamGroup.Ciphers.Console"></a>

パラメータグループを新規または既存の DB インスタンスに関連付けることができます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれを関連付けます。詳しくは、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

### CLI
<a name="AssocParamGroup.Ciphers.CLI"></a>

パラメータグループを新規または既存の DB インスタンスに関連付けることができます。

**パラメータグループを使用して DB インスタンスを作成するには**
+ パラメータグループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --master-user-password secret123 \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --db-parameter-group-name sqlserver-ciphers-se-13
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --master-user-password secret123 ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name sqlserver-ciphers-se-13
  ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

**DB インスタンスを変更し、パラメータグループを関連付けるには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name sqlserver-ciphers-se-13 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name sqlserver-ciphers-se-13 ^
      --apply-immediately
  ```

# 新しい SSL/TLS 証明書を使用して Microsoft SQL Server DB インスタンスに接続するようにアプリケーションを更新する
<a name="ssl-certificate-rotation-sqlserver"></a>

2023 年 1 月 13 日に Amazon RDS は、Secure Socket Layer または Transport Layer Security (SSL/TLS) を使用して RDS DB インスタンスに接続するための新しい認証局 (CA) 証明書を公開しました。ここでは、新しい証明書を使用するためのアプリケーションの更新について説明します。

このトピックでは、クライアントアプリケーションが SSL/TLS を使用して DB インスタンスに接続されているかどうかを判断できます。該当する場合はさらに、それらのアプリケーションの接続に証明書の検証が必要かどうかを確認できます。

**注記**  
一部のアプリケーションは、サーバー上の証明書を正常に検証できる場合にのみ、SQL Server DB インスタンスに接続されるように設定されています。  
そのようなアプリケーションの場合は、新しい CA 証明書を含むように、クライアントアプリケーションの信頼ストアを更新する必要があります。

クライアントアプリケーションの信頼ストアで CA 証明書を更新した後、DB インスタンスで証明書をローテーションできます。これらの手順を開発環境またはステージング環境でテストしてから、本番環境で実装することを強くお勧めします。

証明書のローテーションの詳細については、「[SSL/TLS 証明書のローテーション](UsingWithRDS.SSL-certificate-rotation.md)」を参照してください。証明書のダウンロードの詳細については、[SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化](UsingWithRDS.SSL.md) を参照してください。Microsoft SQL Server DB インスタンスで SSL/TLS を使用する方法については、「[Microsoft SQL Server DB インスタンスでの SSL の使用](SQLServer.Concepts.General.SSL.Using.md)」を参照してください。

**Topics**
+ [アプリケーションが SSL を使用して Microsoft SQL Server DB インスタンスに接続しているかどうかの確認](#ssl-certificate-rotation-sqlserver.determining-server)
+ [クライアントが接続するために証明書の検証を必要とするかどうかの確認](#ssl-certificate-rotation-sqlserver.determining-client)
+ [アプリケーション信頼ストアの更新](#ssl-certificate-rotation-sqlserver.updating-trust-store)

## アプリケーションが SSL を使用して Microsoft SQL Server DB インスタンスに接続しているかどうかの確認
<a name="ssl-certificate-rotation-sqlserver.determining-server"></a>

DB インスタンスの設定で `rds.force_ssl` パラメータの値を確認します。デフォルトでは、`rds.force_ssl` パラメータが 0 (オフ) に設定されています。`rds.force_ssl` パラメータが 1 (オン) に設定されている場合、クライアントは接続に SSL/TLS を使用する必要があります。パラメータグループの詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

次のクエリを実行して、DB インスタンスへのすべての開いている接続に対する現在の暗号化オプションを取得します。接続が暗号化されている場合、列 `ENCRYPT_OPTION` は `TRUE` を返します。

```
select SESSION_ID,
    ENCRYPT_OPTION,
    NET_TRANSPORT,
    AUTH_SCHEME
    from SYS.DM_EXEC_CONNECTIONS
```

このクエリは現在の接続のみを表示します。過去に接続および切断したアプリケーションが SSL を使用したかどうかは表示しません。

## クライアントが接続するために証明書の検証を必要とするかどうかの確認
<a name="ssl-certificate-rotation-sqlserver.determining-client"></a>

異なるタイプのクライアントは、接続するために証明書の検証が必要かどうかを確認できます。

**注記**  
リストにあるもの以外のコネクタを使用する場合、暗号化接続を強制する方法については、具体的なコネクタのドキュメントを参照してください。詳細については、Microsoft SQL Server のドキュメントの「[Connection modules for Microsoft SQL databases](https://docs.microsoft.com/en-us/sql/connect/sql-connection-libraries?view=sql-server-ver15)」を参照してください。

### SQL Server Management Studio
<a name="ssl-certificate-rotation-sqlserver.determining-client.management-studio"></a>

SQL Server Management Studio 接続に暗号化が実行されているかどうかを確認します。

1. SQL Server Management Studio を起動します。

1. [**サーバーに接続**] に、サーバー情報、ログインユーザー名、パスワードを入力します。

1. [**Options**] を選択します。

1. 接続ページで [**暗号化接続**] が選択されているかどうかを確認します。

SQL Server Management Studio の詳細については、「[SQL Server Management Studio の使用](http://msdn.microsoft.com/en-us/library/ms174173.aspx)」を参照してください。

### Sqlcmd
<a name="ssl-certificate-rotation-sqlserver.determining-client.sqlcmd"></a>

次の `sqlcmd` クライアントの例では、スクリプトの SQL Server 接続をチェックして、正常な接続に有効な証明書が必要かどうかを確認する方法を示します。詳細については、Microsoft SQL Server のドキュメントの「[Connecting with sqlcmd](https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-sqlcmd?view=sql-server-ver15)」を参照してください。

`sqlcmd` を使用するとき、次の例のように、接続を暗号化するために `-N` コマンドを使用する場合、SSL 接続にはサーバー証明書に対する検証が必要です。

```
$ sqlcmd -N -S dbinstance.rds.amazon.com -d ExampleDB                     
```

**注記**  
`sqlcmd` が `-C` オプションで呼び出される場合、クライアント側の信頼ストアと一致しない場合でも、サーバー証明書を信頼します。

### ADO.NET
<a name="ssl-certificate-rotation-sqlserver.determining-client.adonet"></a>

次の例では、アプリケーションは SSL を使用して接続し、サーバー証明書の検証が必要です。

```
using SQLC = Microsoft.Data.SqlClient;
 
...
 
    static public void Main()  
    {  
        using (var connection = new SQLC.SqlConnection(
            "Server=tcp:dbinstance.rds.amazon.com;" +
            "Database=ExampleDB;User ID=LOGIN_NAME;" +
            "Password=YOUR_PASSWORD;" + 
            "Encrypt=True;TrustServerCertificate=False;"
            ))
        {  
            connection.Open();  
            ...
        }
```

### Java
<a name="ssl-certificate-rotation-sqlserver.determining-client.java"></a>

次の例では、アプリケーションは SSL を使用して接続し、サーバー証明書の検証が必要です。

```
String connectionUrl =   
    "jdbc:sqlserver://dbinstance.rds.amazon.com;" +  
    "databaseName=ExampleDB;integratedSecurity=true;" +  
    "encrypt=true;trustServerCertificate=false";
```

JDBC を使用して接続するクライアントの SSL 暗号化を有効にするには、Java CA 証明書ストアへの Amazon RDS 証明書の追加が必要になる場合があります。手順については、Microsoft SQL Server ドキュメントの「[暗号化のためのクライアントの構成](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)」を参照してください。`trustStore=path-to-certificate-trust-store-file` を接続文字列に追加して、信頼された CA 証明書ファイル名を直接入力することもできます。

**注記**  
接続文字列で `TrustServerCertificate=true` (または同等のもの) を使用する場合、接続プロセスでは、信頼チェーンの検証をスキップします。この場合、証明書が確認できない場合でも、アプリケーションは接続します。`TrustServerCertificate=false` を使用すると、証明書の検証が強制され、これはベストプラクティスです。

## アプリケーション信頼ストアの更新
<a name="ssl-certificate-rotation-sqlserver.updating-trust-store"></a>

Microsoft SQL Server を使用するアプリケーションの信頼ストアを更新できます。手順については、[特定の接続の暗号化](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Client) を参照してください。また、Microsoft SQL Server ドキュメントの「[暗号化のためのクライアントの構成](https://docs.microsoft.com/en-us/SQL/connect/jdbc/configuring-the-client-for-ssl-encryption?view=sql-server-2017)」を参照してください。

Microsoft Windows 以外のオペレーティングシステムを使用している場合、新しいルート CA 証明書の追加については、SSL/TLS 実装のためのソフトウェアディストリビューションのドキュメントを参照してください。例えば、OpenSSL や GnuTLS は人気のあるオプションです。この実装方法を使用して、RDS ルート CA 証明書に信頼を追加します。Microsoft では、一部のシステムで証明書を設定する手順を提供しています。

ルート証明書のダウンロードについては、[SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化](UsingWithRDS.SSL.md) を参照してください。

証明書をインポートするサンプルスクリプトについては、[証明書を信頼ストアにインポートするためのサンプルスクリプト](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script) を参照してください。

**注記**  
信頼ストアを更新するとき、新しい証明書を追加できるだけでなく、古い証明書を保持できます。

## Microsoft SQL Server DB インスタンス用のコンプライアンスプログラムサポート
<a name="SQLServer.Concepts.General.Compliance"></a>

AWS対象範囲内の のサービスは、サードパーティーの監査人によって十分に評価され、認定、コンプライアンスの証明、または Authority to Operate (ATO) が与えられます。詳細については、[コンプライアンスプログラムによる対象範囲内の AWS のサービス](https://aws.amazon.com/compliance/services-in-scope/)を参照してください。

### Microsoft SQL Server の DB インスタンス用の HIPAA サポート
<a name="SQLServer.Concepts.General.HIPAA"></a>

Amazon RDS for Microsoft SQL Server データベースを使用して、HIPAA 準拠アプリケーションを構築できます。AWS との事業提携契約 (BAA) に基づいて、保護されるべき医療情報 (PHI) を含め、医療関連の情報を保存できます。詳細については、「[HIPAA コンプライアンス](https://aws.amazon.com/compliance/hipaa-compliance/)」を参照してください。

Amazon RDS for SQL Server では、以下のバージョンおよびエディションの HIPAA をサポートしています。
+ SQL Server 2022 Enterprise、Standard、および Web Edition
+ SQL Server 2019 Enterprise、Standard、および Web Edition
+ SQL Server 2017 Enterprise、Standard、および Web Edition
+ SQL Server 2016 Enterprise、Standard、および Web Edition

DB インスタンスで HIPAA サポートを有効にするには、次の 3 つのコンポーネントを設定します。


****  

| コンポーネント | 詳細 | 
| --- | --- | 
|  監査  |  監査を設定するには、`rds.sqlserver_audit` パラメータを `fedramp_hipaa` の値に設定します。DB インスタンスがカスタム DB パラメータグループを使用していない場合は、`rds.sqlserver_audit` パラメータを変更する前に、カスタムパラメータグループを作成し、DB インスタンスにアタッチする必要があります。詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。  | 
|  送信の暗号化  |  送信の暗号化を設定するには、DB インスタンスへのすべての接続で Secure Sockets Layer (SSL) を強制的に使用するようにします。詳細については、「[DB インスタンスへの接続に SSL を使用させる](SQLServer.Concepts.General.SSL.Using.md#SQLServer.Concepts.General.SSL.Forcing)」を参照してください。  | 
|  保管時の暗号化  |  保管時の暗号化を設定するには、2 つのオプションがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)  | 

# Amazon RDS での Microsoft SQL Server バージョン
<a name="SQLServer.Concepts.General.VersionSupport"></a>

新しい DB インスタンスを作成するときは、現在サポートされているいずれかの Microsoft SQL Server バージョンを指定できます。Microsoft SQL Server メジャーバージョン (Microsoft SQL Server 14.00 など) と、指定したメジャーバージョンでサポートされている任意のマイナーバージョンを指定できます。バージョンを指定しない場合、Amazon RDS では、サポートされているいずれかのバージョン (通常最新のバージョン) がデフォルトで設定されます。マイナーバージョンではなく、メジャーバージョンを指定した場合は、Amazon RDS では、お客様が指定したメジャーバージョンの最新リリースにデフォルトで設定されます。

次の表は、すべてのエディションおよびすべての AWS リージョンでサポートされている SQL Server バージョンを示しています (例外については特記します)。

**注記**  
また、[describe-db-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI コマンドを使用して、サポートされているバージョンのリストと、新しく作成された DB インスタンスのデフォルトを表示することもできます。[describe-db-major-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-major-engine-versions.html) AWS CLI コマンドを実行するか、[DescribeDBMajorEngineVersions](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBMajorEngineVersions.html) RDS API オペレーションを使用して、SQL Server データベースのメジャーバージョンを表示できます。


| メジャーバージョン | マイナーバージョン | RDS API `EngineVersion` および CLI `engine-version` | 
| --- | --- | --- | 
| SQL Server 2022 |  16.00.4236.2 (CU23) 16.00.4230.2 (CU22 GDR) 16.00.4225.2 (CU22) 16.00.4215.2 (CU21) 16.00.4210.1 (CU20 GDR) 16.00.4205.1 (CU20) 16.00.4195.2 (CU19) 16.00.4185.3 (CU18) 16.00.4175.1 (CU17) 16.00.4165.4 (CU16) 16.00.4150.1 (CU15) 16.00.4140.3 (CU14 GDR) 16.00.4135.4 (CU14) 16.00.4131.2 (CU13) 16.00.4125.3 (CU13) 16.00.4120.1 (CU12 GDR) 16.00.4115.5 (CU12) 16.00.4105.2 (CU11) 16.00.4095.4 (CU10) 16.00.4085.2 (CU9)  |  `16.00.4236.2.v1` `16.00.4230.2.v1` `16.00.4225.2.v1` `16.00.4215.2.v1` `16.00.4210.1.v1` `16.00.4205.1.v1` `16.00.4195.2.v1` `16.00.4185.3.v1` `16.00.4175.1.v1` `16.00.4165.4.v1` `16.00.4150.1.v1` `16.00.4140.3.v1` `16.00.4135.4.v1` `16.00.4131.2.v1` `16.00.4125.3.v1` `16.00.4120.1.v1` `16.00.4115.5.v1` `16.00.4105.2.v1` `16.00.4095.4.v1` `16.00.4085.2.v1`  | 
| SQL Server 2019 |  15.00.4455.2 (CU32 GDR) 15.00.4445.1 (CU32 GDR) 15.00.4440.1 (CU32 GDR) 15.00.4435.7 (CU32) 15.00.4430.1 (CU32) 15.00.4420.2 (CU31) 15.00.4415.2 (CU30) 15.00.4410.1 (CU29 GDR) 15.00.4395.2 (CU28) 15.00.4390.2 (CU28) 15.00.4385.2 (CU28) 15.00.4382.1 (CU27) 15.00.4375.4 (CU27) 15.00.4365.2 (CU26) 15.00.4355.3 (CU25) 15.00.4345.5 (CU24) 15.00.4335.1 (CU23) 15.00.4322.2 (CU22) 15.00.4316.3 (CU21) 15.00.4312.2 (CU20) 15.00.4236.7 (CU16) 15.00.4198.2 (CU15) 15.00.4153.1 (CU12) 15.00.4073.23 (CU8) 15.00.4043.16 (CU5)  |  `15.00.4455.2.v1` `15.00.4445.1.v1` `15.00.4440.1.v1` `15.00.4435.7.v1` `15.00.4430.1.v1` `15.00.4420.2.v1` `15.00.4415.2.v1` `15.00.4410.1.v1` `15.00.4395.2.v1` `15.00.4390.2.v1` `15.00.4385.2.v1` `15.00.4382.1.v1` `15.00.4375.4.v1` `15.00.4365.2.v1` `15.00.4355.3.v1` `15.00.4345.5.v1` `15.00.4335.1.v1` `15.00.4322.2.v1` `15.00.4316.3.v1` `15.00.4312.2.v1` `15.00.4236.7.v1` `15.00.4198.2.v1` `15.00.4153.1.v1` `15.00.4073.23.v1` `15.00.4043.16.v1`  | 
| SQL Server 2017 |  14.00.3515.1 (CU31 GDR) 14.00.3505.1 (CU31 GDR) 14.00.3500.1.(CU31 GDR) 14.00.3495.9 (CU31 GDR) 14.00.3485.1 (CU31 GDR) 14.00.3480.1 (CU31) 14.00.3475.1 (CU31) 14.00.3471.2 (CU31) 14.00.3465.1 (CU31) 14.00.3460.9 (CU31) 14.00.3451.2 (CU30) 14.00.3421.10 (CU27) 14.00.3401.7 (CU25) 14.00.3381.3 (CU23) 14.00.3356.20 (CU22) 14.00.3294.2 (CU20) 14.00.3281.6 (CU19)  |  `14.00.3515.1.v1` `14.00.3505.1.v1` `14.00.3500.1.v1` `14.00.3495.9.v1` `14.00.3485.1.v1` `14.00.3480.1.v1` `14.00.3475.1.v1` `14.00.3471.2.v1` `14.00.3465.1.v1` `14.00.3460.9.v1` `14.00.3451.2.v1` `14.00.3421.10.v1` `14.00.3401.7.v1` `14.00.3381.3.v1` `14.00.3356.20.v1` `14.00.3294.2.v1` `14.00.3281.6.v1`  | 
| SQL Server 2016 |  13.00.6475.1 (GDR) 13.00.6470.1 (GDR) 13.00.6465.1 (GDR) 13.00.6460.7 (GDR) 13.00.6455.2 (GDR) 13.00.6450.1 (GDR) 13.00.6445.1 (GDR) 13.00.6441.1 (GDR) 13.00.6435.1 (GDR) 13.00.6430.49 (GDR) 13.00.6419.1 (SP3 \$1 修正プログラム) 11.00.6020.0 (SP3)  |  `14.00.6475.1.v1` `14.00.6470.1.v1` `13.00.6465.1.v1` `13.00.6460.7.v1` `13.00.6455.2.v1` `13.00.6450.1.v1` `13.00.6445.1.v1` `13.00.6441.1.v1` `13.00.6435.1.v1` `13.00.6430.49.v1` `13.00.6419.1.v1` `13.00.6300.2.v1`  | 

## Amazon RDS でのバージョン管理
<a name="SQLServer.Concepts.General.Version-Management"></a>

Amazon RDS には、柔軟なバージョン管理機能があります。この機能を使用して、DB インスタンスでのパッチの適用やアップグレードのタイミングと方法を制御できます。そのため、DB エンジンに対して以下の操作を行うことができます。
+ データベースエンジンのパッチバージョンとの互換性を維持する。
+ 本番稼働環境にデプロイする前に、新しいパッチバージョンをテストして、アプリケーションで動作することを確認する。
+ サービスレベルアグリーメント (SLA) とタイミング要件を満たすようにバージョンアップグレードを計画して実行する。

### Amazon RDS での Microsoft SQL Server DB エンジンのパッチ適用
<a name="SQLServer.Concepts.General.Patching"></a>

Amazon RDS では、Amazon RDS に固有の DB インスタンスエンジンバージョンに、Microsoft SQL Server データベースの公式パッチを定期的に統合します。各エンジンバージョンの Microsoft SQL Server パッチの詳細については、「[Amazon RDS のバージョンと機能のサポート](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport)」を参照してください。

現在、エンジンのアップグレードはすべて、DB インスタンスで手動で実行しています。詳細については、「[Microsoft SQL Server DB エンジンのアップグレード](USER_UpgradeDBInstance.SQLServer.md)」を参照してください。

### Amazon RDS の Microsoft SQL Server のメジャーエンジンバージョンの非推奨スケジュール
<a name="SQLServer.Concepts.General.Deprecated-Versions"></a>

次の表は、Microsoft SQL Server のメジャーエンジンバージョンの計画された非推奨スケジュールを示しています。


| 日付 | 情報 | 
| --- | --- | 
| 2026 年 7 月 14 日 |  Microsoft は、SQL Server 2016 の重要なパッチの更新を停止します。詳細については、Microsoft ドキュメントの [Microsoft SQL Server 2016](https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2016)を参照してください。  | 
| 2026 年 7 月 14 日 |  Amazon RDS は、SQL Server 用 RDS での Microsoft SQL Server 2016 のサポートを終了する予定です。その時点で、残りのインスタンスは SQL Server 2017 (利用可能な最新のマイナーバージョン) に移行される予定です。詳細については、「[Announcement: Amazon RDS for SQL Server ending support for Microsoft SQL Server 2016](https://repost.aws/articles/ARGkeWligDSU-MQgBwUQj0nA/announcement-amazon-rds-for-sql-server-ending-support-for-microsoft-sql-server-2016)」を参照してください。 Microsoft SQL Server 2016 から自動的にアップグレードされないように、都合の良いときに一度にアップグレードしてください。詳細については、「[DB インスタンスのエンジンバージョンのアップグレード](USER_UpgradeDBInstance.Upgrading.md)」を参照してください。  | 
| 2026 年 1 月 15 日 | Amazon RDS は、Microsoft SQL Server 2016 を使用する、SQL Server DB インスタンス用の新規 RDS 作成の無効化を開始します。詳細については、「[Announcement: Amazon RDS for SQL Server ending support for Microsoft SQL Server 2016](https://repost.aws/articles/ARGkeWligDSU-MQgBwUQj0nA/announcement-amazon-rds-for-sql-server-ending-support-for-microsoft-sql-server-2016)」を参照してください。 | 
| 2024 年 7 月 9 日 |  Microsoft は、SQL Server 2014 の重要なパッチの更新を停止します。詳細については、Microsoft ドキュメントの [Microsoft SQL Server 2014](https://learn.microsoft.com/en-us/lifecycle/products/sql-server-2014) を参照してください。  | 
|  2024 年 6 月 1 日 |  Amazon RDS は、SQL Server 用 RDS での Microsoft SQL Server 2014 のサポートを終了する予定です。その時点で、残りのインスタンスは SQL Server 2016 (利用可能な最新のマイナーバージョン) に移行される予定です。詳細については、「[Announcement: Amazon RDS for SQL Server ending of support for SQL Server 2014 major versions](https://repost.aws/articles/AR-eyAH1PSSuevuZRUE9FV3A)」を参照してください。 Microsoft SQL Server 2014 から自動的にアップグレードされないように、都合の良いときに一度にアップグレードしてください。詳細については、「[DB インスタンスのエンジンバージョンのアップグレード](USER_UpgradeDBInstance.Upgrading.md)」を参照してください。  | 
| 2022 年 7 月 12 日 |  Microsoft は、SQL Server 2012 の重要なパッチの更新を停止します。詳細については、Microsoft ドキュメントの [Microsoft SQL Server 2012](https://docs.microsoft.com/en-us/lifecycle/products/microsoft-sql-server-2012)を参照してください。  | 
| 2022 年 6 月 1 日 |  Amazon RDS は、SQL Server 用 RDS での Microsoft SQL Server 2012 のサポートを終了する予定です。その時点で、残りのインスタンスは SQL Server 2014 (利用可能な最新のマイナーバージョン) に移行される予定です。詳細については、[Announcement: Amazon RDS for SQL Server ending of support for SQL Server 2012 major versions](https://repost.aws/questions/QUFNiETqrMQ_WT_AXSxOYNOA) を参照してください。 Microsoft SQL Server 2012 から自動的にアップグレードされないように、都合の良いときに一度にアップグレードしてください。(詳しくは、「[DB インスタンスのエンジンバージョンのアップグレード](USER_UpgradeDBInstance.Upgrading.md)」を参照してください。)  | 
| 2021 年 9 月 1 日 | Amazon RDS は、Microsoft SQL Server 2012 を使用する、SQL Server DB インスタンス用の新規 RDS 作成の無効化を開始します。詳細については、[Announcement: Amazon RDS for SQL Server ending of support for SQL Server 2012 major versions](https://repost.aws/questions/QUFNiETqrMQ_WT_AXSxOYNOA) を参照してください。 | 
| 2019 年 7 月 12 日 |  Amazon RDS チームは、2019 年 6 月に Microsoft SQL Server 2008 R2 のサポートを廃止しました。Microsoft SQL Server 2008 R2 の残りのインスタンスは、SQL Server 2012 (利用可能な最新のマイナーバージョン) に移行されます。 Microsoft SQL Server 2008 R2 から自動的にアップグレードされないように、都合の良いときに一度にアップグレードします。詳細については、「[DB インスタンスのエンジンバージョンのアップグレード](USER_UpgradeDBInstance.Upgrading.md)」を参照してください。  | 
| 2019 年 4 月 25 日 | 2019 年 4 月末、Microsoft SQL Server 2008R2 を使用して新しい Amazon RDS for SQL Server データベースインスタンスを作成することはできなくなります。 | 

# Amazon RDS での Microsoft SQL Server の機能
<a name="SQLServer.Concepts.General.FeatureSupport"></a>

Amazon RDS でサポートされる SQL Server バージョンには、以下の機能が含まれます。一般に、Microsoft のドキュメントで特に明記されていない限り、バージョンには以前のバージョンの機能も含まれます。

**Topics**
+ [Microsoft SQL Server 2022 の機能](#SQLServer.Concepts.General.FeatureSupport.2022)
+ [Microsoft SQL Server 2019 の機能](#SQLServer.Concepts.General.FeatureSupport.2019)
+ [Microsoft SQL Server 2017 の機能](#SQLServer.Concepts.General.FeatureSupport.2017)
+ [Microsoft SQL Server 2016 の機能](#SQLServer.Concepts.General.FeatureSupport.2016)
+ [Microsoft SQL Server 2014 が Amazon RDS でのサポートを終了](#SQLServer.Concepts.General.FeatureSupport.2014)
+ [Microsoft SQL Server 2012 が Amazon RDS でのサポートを終了](#SQLServer.Concepts.General.FeatureSupport.2012)
+ [Microsoft SQL Server 2008 R2 が Amazon RDS でのサポートを終了](#SQLServer.Concepts.General.FeatureSupport.2008)
+ [Microsoft SQL Server DB インスタンスの変更データキャプチャのサポート](SQLServer.Concepts.General.CDC.md)
+ [サポート対象外の機能とサポートが制限されている機能](SQLServer.Concepts.General.FeatureNonSupport.md)

## Microsoft SQL Server 2022 の機能
<a name="SQLServer.Concepts.General.FeatureSupport.2022"></a>

SQL Server 2022 には以下のような多数の新機能があります。
+ パラメータに依存するプランの最適化 — 1 つのパラメータ化されたステートメントに対して複数のキャッシュされたプランを使用できるため、パラメータのスニッフィングの問題が軽減される可能性があります。
+ SQL Server Ledger – データが承認なしで変更されていないことを暗号的に証明する機能を提供します。
+ トランザクションログファイルの拡張イベントのファイルの瞬時初期化 – TDE が有効になっているデータベースの場合を含め、最大 64MB までのログ拡張イベントをより速く実行できます。
+ システムページラッチのコンカレンシーの機能強化 — データページとエクステントの割り当てと割り当て解除中のページのラッチの競合が軽減され、`tempdb` の負荷の高いワークロードのパフォーマンスが大幅に強化されます。

SQL Server 2022 のすべての機能のリストについては、Microsoft のドキュメントの「[SQL Server 2022 (16.x) の新機能](https://learn.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2022?view=sql-server-ver16)」を参照してください。

サポートされない機能の一覧については、「[サポート対象外の機能とサポートが制限されている機能](SQLServer.Concepts.General.FeatureNonSupport.md)」を参照してください。

## Microsoft SQL Server 2019 の機能
<a name="SQLServer.Concepts.General.FeatureSupport.2019"></a>

SQL Server 2019 には以下のような多数の新機能があります。
+ 高速データベース復旧 (ADR) – 再起動後または長時間実行されているトランザクションロールバック後のクラッシュ復旧時間が短くなります。
+ インテリジェントクエリ処理 (IQP):
  + 行モードメモリ許可フィードバック – 過剰な許可が自動的に修正されます。これにより、無駄なメモリ使用や同時実行が減ります。
  + 行ストアバッチモード – 列ストアインデックスを必要とせずに、分析ワークロードのバッチモード実行が可能になります。
  + テーブル変数の遅延コンパイル – テーブル変数を参照するクエリのプラン品質と全体的なパフォーマンスが向上します。
+ インテリジェントなパフォーマンス:
  + `OPTIMIZE_FOR_SEQUENTIAL_KEY` インデックスオプション – インデックスへの同時実行挿入のスループットが向上します。
  + 間接チェックポイントのスケーラビリティの向上 – DML ワークロードが高いデータベースに役立ちます。
  + Concurrent Page Free Space (PFS) の更新 – 排他的ラッチではなく共有ラッチとしての処理が可能になります。
+ モニタリングの改善点:
  + `WAIT_ON_SYNC_STATISTICS_REFRESH` 待機タイプ – 同期統計更新オペレーションにかかったインスタンスレベルの累積時間を示します。
  + データベーススコープの設定 – `LIGHTWEIGHT_QUERY_PROFILING` と `LAST_QUERY_PLAN_STATS` が含まれます。
  + 動的管理機能 (DMF) – `sys.dm_exec_query_plan_stats` と `sys.dm_db_page_info` が含まれます。
+ 詳細な切り捨て警告 – データの切り捨てエラーメッセージに、デフォルトでテーブル名と列名、切り捨てられた値が含まれます。
+ 再開可能なオンラインインデックスの作成 – SQL Server 2017 では、再開可能なオンラインインデックスの再構築のみがサポートされています。

SQL Server 2019 のすべての機能のリストについては、Microsoft のドキュメントの「[SQL Server 2019 (15.x) の新機能](https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-ver15)」を参照してください。

サポートされない機能の一覧については、「[サポート対象外の機能とサポートが制限されている機能](SQLServer.Concepts.General.FeatureNonSupport.md)」を参照してください。

## Microsoft SQL Server 2017 の機能
<a name="SQLServer.Concepts.General.FeatureSupport.2017"></a>

SQL Server 2017 には次のような多数の新機能があります。
+ 適応型クエリ処理
+ 自動計画修正 (自動チューニング機能)
+ GraphDB
+ 再開可能なインデックスの再構築

SQL Server 2017 のすべての機能のリストについては、Microsoft のドキュメントの「[SQL Server 2017 の新機能](https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2017)」を参照してください。

サポートされない機能の一覧については、「[サポート対象外の機能とサポートが制限されている機能](SQLServer.Concepts.General.FeatureNonSupport.md)」を参照してください。

## Microsoft SQL Server 2016 の機能
<a name="SQLServer.Concepts.General.FeatureSupport.2016"></a>

Amazon RDS は、SQL Server 2016 の以下の機能をサポートしています。
+ 常時暗号化
+ JSON サポート
+ 運用の分析
+ クエリの保存
+ 一時テーブル

SQL Server 2016 の機能の詳細なリストについては、Microsoft ドキュメントの「[SQL Server 2016 の新機能](https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2016)」を参照してください。

## Microsoft SQL Server 2014 が Amazon RDS でのサポートを終了
<a name="SQLServer.Concepts.General.FeatureSupport.2014"></a>

SQL Server 2014 は Amazon RDS でのサポートが終了しました。

RDS では、SQL Server 2014 を使用している既存のインスタンスはすべて、最新のマイナーバージョンの SQL Server 2016 にアップグレードされます。詳細については、「[Amazon RDS でのバージョン管理](SQLServer.Concepts.General.VersionSupport.md#SQLServer.Concepts.General.Version-Management)」を参照してください。

## Microsoft SQL Server 2012 が Amazon RDS でのサポートを終了
<a name="SQLServer.Concepts.General.FeatureSupport.2012"></a>

SQL Server 2012 は Amazon RDS でのサポートが終了しました。

RDS では、SQL Server 2012 を使用している既存のインスタンスはすべて、最新のマイナーバージョンの SQL Server 2016 にアップグレードされます。詳細については、「[Amazon RDS でのバージョン管理](SQLServer.Concepts.General.VersionSupport.md#SQLServer.Concepts.General.Version-Management)」を参照してください。

## Microsoft SQL Server 2008 R2 が Amazon RDS でのサポートを終了
<a name="SQLServer.Concepts.General.FeatureSupport.2008"></a>

SQL Server 2008 R2 は Amazon RDS でのサポートが終了しました。

RDS では、SQL Server 2008 R2 を使用している既存のインスタンスはすべて、最新のマイナーバージョンの SQL Server 2012 にアップグレードされます。詳細については、「[Amazon RDS でのバージョン管理](SQLServer.Concepts.General.VersionSupport.md#SQLServer.Concepts.General.Version-Management)」を参照してください。

# Microsoft SQL Server DB インスタンスの変更データキャプチャのサポート
<a name="SQLServer.Concepts.General.CDC"></a>

Amazon RDS は、Microsoft SQL Server で実行されている DB インスタンスの変更データキャプチャをサポートします。CDC は、テーブル内のデータに加えられた変更を取得し、後からアクセスできる各変更に関するメタデータを格納します。詳細については、Microsoft ドキュメントの「[変更データキャプチャ](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#Capture)」を参照してください。

Amazon RDS は、次の SQL Server のエディションおよびバージョンの CDC をサポートしています。
+ Microsoft SQL Server Enterprise Edition (すべてのバージョン) 
+ Microsoft SQL Server Standard Edition: 
  + 2022
  + 2019
  + 2017 年
  + 2016 バージョン 13.00.4422.0 SP1 CU2 以降

Amazon RDS DB インスタンスで CDC を使用するには、まず RDS 提供のストアドプロシージャを使用してデータベースレベルで CDC を有効または無効にします。その後で、そのデータベースの `db_owner` ロールを持つユーザーは、ネイティブの Microsoft ストアドプロシージャを使用して、そのデータベースの CDC を制御できます。詳細については、「[Amazon RDS for SQL Server の変更データキャプチャの使用](Appendix.SQLServer.CommonDBATasks.CDC.md)」を参照してください。

CDC および AWS Database Migration Service を使用すると、SQL Server DB インスタンスからの継続的なレプリケーションを有効にできます。​ 

# サポート対象外の機能とサポートが制限されている機能
<a name="SQLServer.Concepts.General.FeatureNonSupport"></a>

次の Microsoft SQL Server 機能は、Amazon RDS でサポートされていません。
+ Microsoft Azure Blob ストレージへのバックアップ
+ バッファプールの拡張
+ カスタムパスワードポリシー
+ Data Quality Services
+ データベースのログ配布
+ データベーススナップショット (Amazon RDS は DB インスタンスナップショットのみをサポートします)
+ 拡張ストアドプロシージャ (xp\$1cmdshell を含む)
+ FILESTREAM のサポート
+ ファイルテーブル
+ 機械学習と R サービス (インストールするための OS アクセス許可が必要です)
+ メンテナンスプラン
+ パフォーマンスデータコレクター
+ ポリシーベースの管理
+ PolyBase
+ レプリケーション
+ サーバーレベルのトリガー
+ サービスブローカーエンドポイント
+ Stretch database
+ 信頼できるデータベースプロパティ (sysadmin ロールが必要)
+ T-SQL エンドポイント (CREATE ENDPOINT を使用するオペレーションはいずれも使用できません)
+ WCF Data Services

以下の Microsoft SQL Server 機能は、Amazon RDS でのサポートが制限されています。
+ 分散クエリ/リンクサーバー。詳細については、[Amazon RDS for Microsoft SQL Server を使用してリンクされたサーバーを実装する](https://aws.amazon.com/blogs/database/implement-linked-servers-with-amazon-rds-for-microsoft-sql-server/)を参照してください。
+ 共通ランタイム言語 (CLR)。RDS for SQL Server 2016 以前のバージョンでは、CLR は`SAFE` モードでサポートされ、アセンブリビットだけを使用しています。CLR は、RDS for SQL Server 2017 以降のバージョンでサポートされていません。詳細については、Microsoft のドキュメントの「[Common Runtime Language Integration](https://docs.microsoft.com/en-us/sql/relational-databases/clr-integration/common-language-runtime-integration-overview)」を参照してください。
+ Amazon RDS for SQL Server での Oracle OLEDB によるリンクされたサーバー 詳細については、「[Amazon RDS for SQL Server での Oracle OLEDB によるリンクされたサーバーのサポート](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)」を参照してください。

次の機能は、Amazon RDS with SQL Server 2022 でサポートされていません。
+ スナップショット作成のためのデータベースの一時停止
+ 外部データソース
+ S3 互換オブジェクトストレージへのバックアップと復元
+ オブジェクトストアの統合
+ TLS 1.3 および MS-TDS 8.0
+ QAT によるバックアップ圧縮オフロード
+ SQL Server Analysis Services (SSAS)
+ マルチ AZ 配置によるデータベースミラーリング。SQL Server Always On は、マルチ AZ 配置でサポートされている唯一の方法です。

## Microsoft SQL Server のデータベースミラーリングまたは Always On 可用性グループを使用したマルチ AZ 配置
<a name="SQLServer.Concepts.General.Mirroring"></a>

Amazon RDS は、Microsoft SQL Server を実行する DB インスタンスで SQL Server データベースミラーリング (DBM) または Always On 可用性グループ (AG) によるマルチ AZ 配置をサポートしています。マルチ AZ 配置は、DB インスタンスの拡張された可用性、データ堅牢性、および耐障害性を提供します。予定されたデータベースメンテナンスまたは予期しないサービス障害時に、Amazon RDS は自動的に最新のセカンダリレプリカにフェイルオーバーするため、データベースオペレーションを手動の介入なしで速やかに再開できます。プライマリインスタンスおよびセカンダリインスタンスは、同じエンドポイントを使用します。このエンドポイントの物理的なネットワークアドレスは、フェイルオーバープロセスの一環としてパッシブなセカンダリレプリカに移行します。フェイルオーバーが発生した場合、アプリケーションを再構成する必要はありません。

Amazon RDS は、アクティブにマルチ AZ をモニタリングして、プライマリで問題が発生したときにフェイルオーバーを開始することで、フェイルオーバーを管理します。スタンバイとプライマリが完全に同期しない限り、フェイルオーバーが開始することはありません。Amazon RDS は、異常のある DB インスタンスを自動的に修正し、同期レプリケーションを再確立することで、マルチ AZ デプロイをアクティブに維持します。何も管理する必要はありません。Amazon RDS がプライマリインスタンス、監視インスタンス、およびスタンバイインスタンスを処理します。SQL Server マルチ AZ をセットアップすると、RDS はインスタンスのすべてのデータベースに対してパッシブなセカンダリインスタンスを設定します。

詳細については、「[Amazon RDS for Microsoft SQL Server のマルチ AZ 配置](USER_SQLServerMultiAZ.md)」を参照してください。

## Transparent Data Encryption を使用した保管時のデータの暗号化
<a name="SQLServer.Concepts.General.Options"></a>

Amazon RDS は、格納されているデータを透過的に暗号化する Microsoft SQL Server の透過的なデータ暗号化 (TDE) をサポートしています。Amazon RDS は、オプショングループを使用してこれらの機能の有効化と設定を行います。TDE オプションの詳細については、「[SQL サーバーの透過的なデータの暗号化サポート](Appendix.SQLServer.Options.TDE.md)」を参照してください。

# Amazon RDS for Microsoft SQL Server 用の関数とストアドプロシージャ
<a name="SQLServer.Concepts.General.StoredProcedures"></a>

次の表に、SQL Server タスクの自動化に役立つ Amazon RDS 関数とストアドプロシージャの一覧を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.StoredProcedures.html)

# Microsoft SQL Server DB インスタンスのローカルタイムゾーン
<a name="SQLServer.Concepts.General.TimeZone"></a>

Microsoft SQL Server を実行している Amazon RDS DB インスタンスのタイムゾーンは、デフォルトに設定されています。現在のデフォルトは協定世界時 (UTC) です。DB インスタンスのタイムゾーンをローカルタイムゾーンに設定して、アプリケーションのタイムゾーンと一致させることも可能です。

DB インスタンスを最初に作成するときにタイムゾーンを設定します。[AWS マネジメントコンソール](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)、Amazon RDS API の [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html.html) アクション、または AWS CLI の [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) コマンドを使用して、DB インスタンスを作成できます。

DB インスタンスがマルチ AZ 配置 (SQL Server の DBM または AG を使用) の一部である場合にフェイルオーバーが行われても、タイムゾーンは設定したローカルタイムゾーンを維持します。詳細については、「[Microsoft SQL Server のデータベースミラーリングまたは Always On 可用性グループを使用したマルチ AZ 配置](CHAP_SQLServer.md#SQLServer.Concepts.General.Mirroring)」を参照してください。

特定の時点への復元をリクエストする場合には、復元を行う時間を指定します。時間は、ローカルタイムゾーンで表示されます。詳細については、「[Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)」を参照してください。

DB インスタンスにローカルタイムゾーンを設定する際の制限事項を以下に示します。
+ SQL Server の既存の DB インスタンスのタイムゾーンを変更することはできません。
+ あるタイムゾーンの DB インスタンスのスナップショットを、タイムゾーンの異なる DB インスタンスに復元することはできません。
+ あるタイムゾーンのバックアップファイルを、別のタイムゾーンに復元しないことを強くお勧めします。バックアップファイルを別のタイムゾーンに復元した場合は、タイムゾーンの変更によるクエリとアプリケーションへの影響を精査する必要があります。詳細については、「[ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)」を参照してください。

## サポートされているタイムゾーン
<a name="SQLServer.Concepts.General.TimeZone.Zones"></a>

ローカルタイムゾーンは以下の表に示されているいずれかの値に設定できます。


| タイムゾーン | 標準の時間オフセット | 説明 | コメント | 
| --- | --- | --- | --- | 
| アフガニスタン標準時 | (UTC\$104:30) | カブール | このタイムゾーンは夏時間を考慮しません。 | 
| アラスカ標準時 | (UTC–09:00) | アラスカ |  | 
| アリューシャン標準時 | (UTC–10:00) | アリューシャン列島 |  | 
| アルタイ標準時 | (UTC\$107:00) | バルナウル (ゴルノ＝アルタイスク) |  | 
| アラブ標準時 | (UTC\$103:00) | クウェート (リヤド) | このタイムゾーンは夏時間を考慮しません。 | 
| アラビア標準時 | (UTC\$104:00) | アブダビ、マスカット |  | 
| アラビア標準時 | (UTC\$103:00) | バグダッド | このタイムゾーンは夏時間を考慮しません。 | 
| アルゼンチン標準時 | (UTC–03:00) | ブエノスアイレス市 | このタイムゾーンは夏時間を考慮しません。 | 
| アストラハン標準時 | (UTC\$104:00) | アストラハン (ウリヤノフスク州) |  | 
| 大西洋標準時 | (UTC–04:00) | 大西洋標準時 (カナダ) |  | 
| 中部オーストラリア標準時 | (UTC\$109:30) | ダーウィン | このタイムゾーンは夏時間を考慮しません。 | 
| オーストラリア中西部標準時 | (UTC\$108:45) | ユークラ |  | 
| 東部オーストラリア標準時 | (UTC\$110:00) | キャンベラ、メルボルン、シドニー |  | 
| アゼルバイジャン標準時 | (UTC\$104:00) | バクー |  | 
| アゾレス諸島標準時 | (UTC–01:00) | アゾレス諸島 |  | 
| バイア州標準時 | (UTC–03:00) | サルバドル |  | 
| バングラデシュ標準時 | (UTC\$106:00) | ダッカ | このタイムゾーンは夏時間を考慮しません。 | 
| ベラルーシ標準時 | (UTC\$103:00) | ミンスク | このタイムゾーンは夏時間を考慮しません。 | 
| ブーゲンビル標準時 | (UTC\$111:00) | ブーゲンビル島 |  | 
| 中部カナダ標準時 | (UTC–06:00) | サスカチュワン | このタイムゾーンは夏時間を考慮しません。 | 
| カーボベルデ標準時 | (UTC–01:00) | カーボベルデ島 | このタイムゾーンは夏時間を考慮しません。 | 
| コーカサス標準時 | (UTC\$104:00) | エレバン |  | 
| 中部 オーストラリア標準時 | (UTC\$109:30) | アデレード |  | 
| アメリカ中部標準時 | (UTC–06:00) | 中米 | このタイムゾーンは夏時間を考慮しません。 | 
| 中央アジア標準時 | (UTC\$106:00) | アスターナ | このタイムゾーンは夏時間を考慮しません。 | 
| 中部ブラジル標準時 | (UTC–04:00) | クヤバ |  | 
| 中央ヨーロッパ標準時 | (UTC\$101:00) | ベオグラード、ブラティスラヴァ、ブダペスト、リュブヤナ、プラハ |  | 
| 中央ヨーロッパ標準時 | (UTC\$101:00) | サラエボ、スコピエ、ワルシャワ、ザグレブ |  | 
| 中央太平洋標準時 | (UTC\$111:00) | ソロモン諸島、ニューカレドニア | このタイムゾーンは夏時間を考慮しません。 | 
| 中部標準時 | (UTC–06:00) | 中部標準時 (米国およびカナダ) |  | 
| 中部標準時 (メキシコ) | (UTC–06:00) | グアダラハラ、メキシコシティ、モンテレイ |  | 
| チャタム諸島標準時 | (UTC\$112:45) | チャタム諸島 |  | 
| 中国標準時 | (UTC\$108:00) | 北京、重慶、香港特別行政区、ウルムチ | このタイムゾーンは夏時間を考慮しません。 | 
| キューバ標準時 | (UTC–05:00) | ハバナ |  | 
| 日付変更線標準時 | (UTC–12:00) | 国際日付変更線西 | このタイムゾーンは夏時間を考慮しません。 | 
| アフリカ東部標準時 | (UTC\$103:00) | ナイロビ | このタイムゾーンは夏時間を考慮しません。 | 
| オーストラリア東部標準時 | (UTC\$110:00) | ブリスベン | このタイムゾーンは夏時間を考慮しません。 | 
| 欧州東部標準時 | (UTC\$102:00) | キシナウ |  | 
| 南米東部標準時 | (UTC–03:00) | ブラジリア |  | 
| イースター島標準時 | (UTC–06:00) | イースター島 |  | 
| 東部標準時 | (UTC–05:00) | 東部標準時 (米国およびカナダ) |  | 
| 東部標準時 (メキシコ) | (UTC–05:00) | チェトゥマル |  | 
| エジプト標準時 | (UTC\$102:00) | カイロ |  | 
| エカテリンブルク標準時 | (UTC\$105:00) | エカテリンブルク |  | 
| フィジー標準時 | (UTC\$112:00) | フィジー |  | 
| FLE 標準時 | (UTC\$102:00) | ヘルシンキ、キエフ、リガ、ソフィア、タリン、ビリニュス |  | 
| ジョージア標準時 | (UTC\$104:00) | トビリシ | このタイムゾーンは夏時間を考慮しません。 | 
| GMT 標準時 | (UTC) | ダブリン エジンバラ、リスボン、ロンドン |  このタイムゾーンはグリニッジ標準時と同じではありません。このタイムゾーンは夏時間を考慮します。 | 
| グリーンランド標準時 | (UTC–03:00) | グリーンランド |  | 
| グリニッジ標準時 | (UTC) | モンロビア、レイキャビク | このタイムゾーンは夏時間を考慮しません。 | 
| GTB 標準時 | (UTC\$102:00) | アテネ、ブカレスト |  | 
| ハイチ標準時 | (UTC–05:00) | ハイチ |  | 
| ハワイ標準時 | (UTC–10:00) | ハワイ |  | 
| インド標準時 | (UTC\$105:30) | チェンナイ、カルカッタ、ムンバイ、ニューデリー | このタイムゾーンは夏時間を考慮しません。 | 
| イラン標準時 | (UTC\$103:30) | テヘラン |  | 
| イスラエル標準時 | (UTC\$102:00) | エルサレム |  | 
| ヨルダン標準時 | (UTC\$102:00) | アンマン |  | 
| カリーニングラード標準時 | (UTC\$102:00) | カリーニングラード |  | 
| カムチャツカ標準時 | (UTC\$112:00) | ペトロパブロフスク・カムチャツキー – オールド |  | 
| 韓国標準時 | (UTC\$109:00) | ソウル | このタイムゾーンは夏時間を考慮しません。 | 
| リビア標準時 | (UTC\$102:00) | トリポリ |  | 
| ライン諸島標準時 | (UTC\$114:00) | キリティマティ島 |  | 
| ロード・ハウ標準時 | (UTC\$110:30) | ロード・ハウ島 |  | 
| マガダン標準時 | (UTC\$111:00) | マガダン | このタイムゾーンは夏時間を考慮しません。 | 
| マガジャネス標準時 | (UTC–03:00) | プンタ・アレーナス |  | 
| マルケサス標準時 | (UTC–09:30) | マルケサス諸島 |  | 
| モーリシャス標準時 | (UTC\$104:00) | ポートルイス | このタイムゾーンは夏時間を考慮しません。 | 
| 中東標準時 | (UTC\$102:00) | ベイルート |  | 
| モンテビデオ標準時 | (UTC–03:00) | モンテビデオ |  | 
| モロッコ標準時 | (UTC\$101:00) | カサブランカ |  | 
| 山岳部標準時 | (UTC–07:00) | 山地標準時 (米国およびカナダ) |  | 
| 山岳部標準時 (メキシコ) | (UTC–07:00) | チワワ、ラパス、マサトラン |  | 
| ミャンマー標準時 | (UTC\$106:30) | ヤンゴン (ラングーン) | このタイムゾーンは夏時間を考慮しません。 | 
| 中央アジア北部標準時 | (UTC\$107:00) | ノヴォシビルスク |  | 
| ナミビア標準時 | (UTC\$102:00) | ウィントフック |  | 
| ネパール標準時 | (UTC\$105:45) | カトマンズ | このタイムゾーンは夏時間を考慮しません。 | 
| ニュージーランド標準時 | (UTC\$112:00) | オークランド、ウェリントン |  | 
| ニューファンドランド標準時 | (UTC–03:30) | ニューファンドランド |  | 
| ノーフォーク標準時 | (UTC\$111:00) | ノーフォーク島 |  | 
| 北アジア東部標準時 | (UTC\$108:00) | イルクーツク |  | 
| 北アジア標準時 | (UTC\$107:00) | クラスノヤルスク |  | 
| 北朝鮮標準時 | (UTC\$109:00) | 平壌 |  | 
| オムスク標準時 | (UTC\$106:00) | オムスク |  | 
| 太平洋南アメリカ標準時 | (UTC–03:00) | サンティアゴ |  | 
| 太平洋標準時 | (UTC–08:00) | 太平洋標準時 (米国およびカナダ) |  | 
| 太平洋標準時 (メキシコ) | (UTC–08:00) | バハ・カリフォルニア |  | 
| パキスタン標準時 | (UTC\$105:00) | イスラマバード (カラチ) | このタイムゾーンは夏時間を考慮しません。 | 
| パラグアイ標準時 | (UTC–04:00) | アスンシオン |  | 
| ロマンス標準時 | (UTC\$101:00) | ブリュッセル、コペンハーゲン、マドリード、パリ |  | 
| ロシアタイムゾーン 10 | (UTC\$111:00) | チョクルダフ |  | 
| ロシアタイムゾーン 11 | (UTC\$112:00) | ペトロパブロフスク・カムチャツキー・アナディル |  | 
| ロシアタイムゾーン 3 | (UTC\$104:00) | イジェフスク |  | 
| ロシア標準時 | (UTC\$103:00) | モスクワ、サンクト・ペテルブルク、ヴォルゴグラード | このタイムゾーンは夏時間を考慮しません。 | 
| SA 東部標準時 | (UTC–03:00) | フォルタレザカイエンヌ | このタイムゾーンは夏時間を考慮しません。 | 
| 南アメリカ太平洋標準時 | (UTC–05:00) | ボゴタ、リマ、キト、リオブランコ |  このタイムゾーンは夏時間を考慮しません。 | 
| SA 西部標準時 | (UTC–04:00) | ジョージタウン、ラパス、マナウス、サンフアン | このタイムゾーンは夏時間を考慮しません。 | 
| サンピエール標準時 | (UTC–03:00) | サンピエール・ミクロン |  | 
| サハリン標準時 | (UTC\$111:00) | サハリン |  | 
| サモア標準時 | (UTC\$113:00) | サモア |  | 
| サントメ標準時 | (UTC\$101:00) | サントメ |  | 
| サラトフ標準時 | (UTC\$104:00) | サラトフ |  | 
| 東南アジア標準時 | (UTC\$107:00) | バンコク、ハノイ、ジャカルタ | このタイムゾーンは夏時間を考慮しません。 | 
| シンガポール標準時 | (UTC\$108:00) | クアラルンプール、シンガポール | このタイムゾーンは夏時間を考慮しません。 | 
| 南アフリカ標準時 | (UTC\$102:00) | ハラレ (プレトリア) | このタイムゾーンは夏時間を考慮しません。 | 
| スリランカ標準時 | (UTC\$105:30) | スリ・ジャヤワルデネプラ | このタイムゾーンは夏時間を考慮しません。 | 
| スーダン標準時 | (UTC\$102:00) | ハルツーム |  | 
| シリア標準時 | (UTC\$102:00) | ダマスカス |  | 
| 台北標準時 | (UTC\$108:00) | 台北 | このタイムゾーンは夏時間を考慮しません。 | 
| タスマニア標準時 | (UTC\$110:00) | ホバート |  | 
| トカンティンス標準時 | (UTC–03:00) | アラグアイナ |  | 
| 日本標準時 | (UTC\$109:00) | 大阪、札幌、東京 | このタイムゾーンは夏時間を考慮しません。 | 
| トムスク標準時 | (UTC\$107:00) | トムスク |  | 
| トンガ標準時 | (UTC\$113:00) | ヌクアロファ | このタイムゾーンは夏時間を考慮しません。 | 
| トランスバイカル標準時 | (UTC\$109:00) | チタ |  | 
| トルコ標準時 | (UTC\$103:00) | イスタンブール |  | 
| タークス・カイコス標準時 | (UTC–05:00) | タークス・カイコス島 |  | 
| ウランバートル標準時 | (UTC\$108:00) | ウランバートル | このタイムゾーンは夏時間を考慮しません。 | 
| 米国東部標準時 | (UTC–05:00) | インディアナ東部 |  | 
| 山地標準時 (米国) | (UTC–07:00) | アリゾナ | このタイムゾーンは夏時間を考慮しません。 | 
| UTC | UTC | 協定世界時 | このタイムゾーンは夏時間を考慮しません。 | 
| UTC–02 | (UTC–02:00) | 協定世界時–02 | このタイムゾーンは夏時間を考慮しません。 | 
| UTC–08 | (UTC–08:00) | 協定世界時–08 |  | 
| UTC–09 | (UTC–09:00) | 協定世界時–09 |  | 
| UTC–11 | (UTC–11:00) | 協定世界時–11 | このタイムゾーンは夏時間を考慮しません。 | 
| UTC\$112 | (UTC\$112:00) | 協定世界時\$112 | このタイムゾーンは夏時間を考慮しません。 | 
| UTC\$113 | (UTC\$113:00) | 協定世界時\$113 |  | 
| ベネズエラ標準時 | (UTC–04:00) | カラカス | このタイムゾーンは夏時間を考慮しません。 | 
| ウラジオストク標準時 | (UTC\$110:00) | ウラジオストク |  | 
| ヴォルゴグラード標準時 | (UTC\$104:00) | ヴォルゴグラード |  | 
| オーストラリア西部標準時 | (UTC\$108:00) | パース | このタイムゾーンは夏時間を考慮しません。 | 
| 中部アフリカ西部標準時 | (UTC\$101:00) | 西部・中部アフリカ | このタイムゾーンは夏時間を考慮しません。 | 
| ヨーロッパ西部標準時 | (UTC\$101:00) | アムステルダム、ベルリン、ベルン、ローマ、ストックホルム、ウィーン |  | 
| モンゴル西部標準時 | (UTC\$107:00) | ホヴド |  | 
| 西アジア標準時 | (UTC\$105:00) | アシガバート (タシュケント) | このタイムゾーンは夏時間を考慮しません。 | 
| 西岸標準時 | (UTC\$102:00) | ガザ (ヘブロン) |  | 
| 西太平洋標準時 | (UTC\$110:00) | グアム、ポートモレスビー | このタイムゾーンは夏時間を考慮しません。 | 
| ヤクーツク標準時 | (UTC\$109:00) | ヤクーツク |  | 

# Amazon RDS での Microsoft SQL Server のライセンス
<a name="SQLServer.Concepts.General.Licensing"></a>

Microsoft SQL Server 用の Amazon RDS DB インスタンスを設定すると、ソフトウェアライセンス込みのインスタンスとなります。

つまり、SQL Server のライセンスを別途購入する必要はありません。AWS は、SQL Server データベースソフトウェアのライセンスを保持しています。Amazon RDS の料金には、ソフトウェアライセンス、基盤となるハードウェアリソース、および Amazon RDS 管理機能が含まれています。

Amazon RDS は、以下の Microsoft SQL Server エディションをサポートしています。
+ エンタープライズ版
+ Standard
+ Web
+ Express

**注記**  
SQL Server Web Edition は、パブリックおよびインターネットにアクセスできるウェブページ、ウェブサイト、ウェブアプリケーション、ウェブサービスをホストするウェブホストおよびウェブ VAP 向けに設計されています。このレベルのサポートは、Microsoft の使用権限に準拠するために必要です。詳細については、[AWS のサービス条件](https://aws.amazon.com/serviceterms)を参照してください。

Amazon RDS は、Microsoft SQL Server を実行する DB インスタンスで、SQL Server データベースミラーリング (DBM)、Always On 可用性グループ (AG)、SQL Server Web Edition のブロックレベルレプリケーションによるマルチ AZ 配置をサポートしています。マルチ AZ 配置への追加ライセンスは必要ではありません。詳細については、「[Amazon RDS for Microsoft SQL Server のマルチ AZ 配置](USER_SQLServerMultiAZ.md)」を参照してください。

## ライセンス終了した DB インスタンスの復元
<a name="SQLServer.Concepts.General.Licensing.Restoring"></a>

Amazon RDS は、ライセンス終了した DB インスタンスのスナップショットを作成します。インスタンスがライセンスの問題で終了した場合は、スナップショットから新しい DB インスタンスに復元できます。新しい DB インスタンスはライセンス込みとなります。

詳細については、「[Amazon RDS for SQL Server のライセンス終了した DB インスタンスの復元](Appendix.SQLServer.CommonDBATasks.RestoreLTI.md)」を参照してください。

## 開発とテスト
<a name="SQLServer.Concepts.General.Licensing.Development"></a>

開発やテストのシナリオの場合、開発やテストなどの本番稼動以外の多くのニーズには、Express Edition を使用できます。SQL Server Enterprise Edition のすべての機能が含まれている Developer Edition を使用することもできますが、本番稼働用以外の用途にのみライセンスされます。RDS for SQL Server に SQL Server Developer Edition をダウンロードしてインストールできます。詳細については、Bring Your Own Media (BYOM) による Custom Engine Version (CEV) を使用した「[RDS for SQL Server での SQL Server Developer Edition の使用](sqlserver-dev-edition.md)」を参照してください。同じ方法を使用して、RDS Custom for SQL Server に SQL Server Developer Edition をダウンロードしてインストールすることもできます。詳細については、「[Bring Your Own Media (BYOM) を使用した CEV の準備](custom-cev-sqlserver.preparing.md#custom-cev-sqlserver.preparing.byom)」を参照してください。SQL Server エディション間の相違点の詳細については、Microsoft ドキュメントの「[SQL Server 2019 の各エディションとサポートされている機能](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2019?view=sql-server-ver15)」を参照してください。

# SQL Server DB インスタンスへの接続
<a name="USER_ConnectToMicrosoftSQLServerInstance"></a>

Amazon RDS によって DB インスタンスがプロビジョニングされると、標準の SQL クライアントアプリケーションを使用して DB インスタンスに接続できます。このトピックでは、Microsoft SQL Server Management Studio (SSMS) または SQL Workbench/J を使用して DB インスタンスに接続します。

サンプルの DB インスタンスの作成と接続のプロセスを示す手順の例は、「[Microsoft SQL Server DB インスタンスを作成して接続する](CHAP_GettingStarted.CreatingConnecting.SQLServer.md)」を参照してください。

## 接続する前に
<a name="sqlserver-before-connect"></a>

DB インスタンスに接続する前に、そのインスタンスが使用可能かつアクセス可能である必要があります。

1. ステータスが `available` であることを確認してください。これは、AWS マネジメントコンソール のインスタンスの詳細ページで、または [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) AWS CLI コマンドを使用して確認できます。  
![\[DB インスタンスが利用可能であることを確認する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sqlserver-available.png)

1. ソースからアクセスできることを確認してください。シナリオによっては、公開する必要がない場合もあります。詳細については、「[Amazon VPC と Amazon RDS](USER_VPC.md)」を参照してください。

1. VPC セキュリティグループのインバウンドルールで DB インスタンスへのアクセスが許可されていることを確認してください。詳細については、「[Amazon RDS DB インスタンスに接続できない](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)」を参照してください。

## DB インスタンスのエンドポイントとポート番号の検索
<a name="sqlserver-endpoint"></a>

DB インスタンスに接続するには、エンドポイントとポート番号の両方が必要です。

**エンドポイントとポートを検索するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. Amazon RDS コンソールの右上で、DB インスタンスの AWS リージョンを選択します。

1. DB インスタンスのドメインネームシステム (DNS) 名 (エンドポイント) とポート番号を見つけます。

   1. RDS コンソールを開き、[**データベース**] を選択して、DB インスタンスを一覧表示します。

   1. SQL Server DB インスタンスの名前を選択して詳細を表示します。

   1. [**接続とセキュリティ**] タブで、エンドポイントをコピーします。  
![\[DB インスタンスのエンドポイントとポートを確認する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQL-Connect-Endpoint.png)

   1. ポート番号を書き留めます。

# Microsoft SQL Server Management Studio を使用して DB インスタンスに接続する
<a name="USER_ConnectToMicrosoftSQLServerInstance.SSMS"></a>

この手順では、Microsoft SQL Server Management Studio (SSMS) を使用してサンプル DB インスタンスに接続します。このユーティリティのスタンドアロンバージョンをダウンロードするには、Microsoft ドキュメントの「[Download SQL Server Management Studio (SSMS)](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms)」を参照してください。

**SSMS を使用して DB インスタンスに接続するには**

1. SQL Server Management Studio を起動します。

   [**サーバーに接続**] ダイアログボックスが表示されます。  
![\[[サーバーに接続] ダイアログ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/RDSMSFTSQLConnect01.png)

1. DB インスタンスの情報を指定します。

   1. [**サーバーの種類**] で、[**データベース エンジン**] を選択します。

   1. [**サーバー名**] に、DB インスタンスの DNS 名 (エンドポイント) とポート番号をカンマで区切って入力します。
**重要**  
エンドポイントとポート番号の間にあるコロンをカンマに置き換えます。

      サーバー名は次の例のようになります。

      ```
      database-2.cg034itsfake.us-east-1.rds.amazonaws.com,1433
      ```

   1. [**認証**] で、[**SQL Server 認証**] を選択します。

   1. [**ログイン**] に、DB インスタンスのマスターユーザー名を入力します。

   1. [**パスワード**] に、DB インスタンスのパスワードを入力します。

1. [**接続**] を選択します。

   しばらくすると、SSMS が DB インスタンスに接続されます。

   DB インスタンスに接続できない場合は、「[セキュリティグループに関する考慮事項](USER_ConnectToMicrosoftSQLServerInstance.Security.md)」および「[SQL Server DB インスタンスへの接続のトラブルシューティング](USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting.md)」を参照してください。

1. SQL Server DB インスタンスには、SQL Server の標準内蔵システムデータベース (`master`、`model`、`msdb`、`tempdb`) が含まれています。システムデータベースを閲覧するには、次を実行します。

   1. SSMS の [**ビュー**] メニューで、[**オブジェクト エクスプローラー**] を選択します。

   1. DB インスタンスを展開し、[**データベース**] を展開します。その後、[**システムデータベース**] を展開します。  
![\[システムデータベースを表示する Object Explorer\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQL-SSMS-SystemDBs.png)

1. SQL Server DB インスタンスには、`rdsadmin` という名前のデータベースも含まれています。Amazon RDS では、このデータベースを使用して、データベースを管理するために使用するオブジェクトを保存します。`rdsadmin` データベースには、詳細なタスクを実行するために保存された手順も含まれます。詳細については、「[Amazon RDS for Microsoft SQL Server の一般的な DBA タスク](Appendix.SQLServer.CommonDBATasks.md)」を参照してください。

1. 独自のデータベースを作成し、通常のデータベースに加え、DB インスタンスに対しクエリを実行できるようになりました。DB インスタンスに対してテストクエリを実行するには、次を実行します。

   1. SSMS の [**ファイル**] メニューで [**新規**] をポイントし、[**クエリを現在の接続で実行**] を選択します。

   1. 次の SQL クエリを入力します。

      ```
      select @@VERSION
      ```

   1. クエリを実行します。SSMS は、Amazon RDS DB インスタンスの SQL Server のバージョンを返します。  
![\[SQL クエリウィンドウ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQL-Connect-Query.png)

# SQL Workbench/J を使用して DB インスタンスに接続する
<a name="USER_ConnectToMicrosoftSQLServerInstance.JDBC"></a>

この例では、SQL Workbench/J データベースツールを使用して Microsoft SQL Server データベースエンジンを実行する DB インスタンスに接続する方法を示します。SQL Workbench/J をダウンロードするには、「[SQL Workbench/J](http://www.sql-workbench.net/)」を参照してください。

SQL Workbench/J は DB インスタンスの接続に JDBC を使用します。さらに、SQL Server 用の JDBC ドライバーも必要です。このドライバーをダウンロードするには、「[Microsoft SQL Server 用 JDBC Driver のダウンロード](https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver16)」を参照してください。

**SQL Workbench/J を使用して DB インスタンスに接続するには**

1. 次のように [**接続プロファイルの選択**] ダイアログボックスを開きます。  
![\[[Select Connection Profile (接続プロファイルの選択)] ダイアログ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/workbench_profile.png)

1. ダイアログボックス上部の最初のボックスにプロファイルの名前を入力します。

1. [**ドライバー**] で、[**SQL JDBC 4.0**] を選択します。

1. [**URL**] に「**jdbc:sqlserver://**」と入力し、さらに DB インスタンスのエンドポイントを入力します 例えば、URL の値は次のようになります。

   ```
   jdbc:sqlserver://sqlsvr-pdz.abcd12340.us-west-2.rds.amazonaws.com:1433
   ```

1. [**ユーザー名**] に、DB インスタンスのマスターユーザー名を入力します。

1. [**パスワード**] に、マスターユーザーのパスワードを入力します。

1. 以下に示すように、ダイアログのツールバーで保存アイコンを選択します。  
![\[プロファイルを保存する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/save_example.png)

1. [**OK**] を選択します。しばらくすると、SQL Workbench/J が DB インスタンスに接続されます。DB インスタンスに接続できない場合は、「[セキュリティグループに関する考慮事項](USER_ConnectToMicrosoftSQLServerInstance.Security.md)」および「[SQL Server DB インスタンスへの接続のトラブルシューティング](USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting.md)」を参照してください。

1. クエリペインに、次の SQL クエリを入力します。

   ```
   select @@VERSION
   ```

1. 以下に示すように、ツールバーで `Execute` アイコンを選択します。  
![\[クエリを実行します\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/execute_example.png)

   クエリは、次のような DB インスタンスのバージョン情報を返します。

   ```
   Microsoft SQL Server 2017 (RTM-CU22) (KB4577467) - 14.0.3356.20 (X64)
   ```

# セキュリティグループに関する考慮事項
<a name="USER_ConnectToMicrosoftSQLServerInstance.Security"></a>

DB インスタンスに接続するには、DB インスタンスがセキュリティグループに関連付けられている必要があります。このセキュリティグループには、DB インスタンスへのアクセスに使用する IP アドレスとネットワーク設定が含まれています。DB インスタンスを作成する際、DB インスタンスを適切なセキュリティグループと関連付けている可能性があります。DB インスタンスの作成時に、設定されていない、デフォルトのセキュリティグループを割り当てた場合は、DB インスタンスファイアウォールによって接続が禁止されます。

場合によっては、アクセスを可能にするために、新しいセキュリティグループを作成する必要があります。新しいセキュリティグループの作成手順については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。VPC セキュリティグループにルールを設定するプロセスについて順を追って説明するトピックは、「[チュートリアル: DB インスタンスで使用する VPC を作成する (IPv4 専用)](CHAP_Tutorials.WebServerDB.CreateVPC.md)」を参照してください。

新しいセキュリティグループを作成したら、そのセキュリティグループと関連付けるように DB インスタンスを変更します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

SSL を使用して DB インスタンスへの接続を暗号化することで、セキュリティを高めることができます。詳細については、「[Microsoft SQL Server DB インスタンスでの SSL の使用](SQLServer.Concepts.General.SSL.Using.md)」を参照してください。

# SQL Server DB インスタンスへの接続のトラブルシューティング
<a name="USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting"></a>

次の表は、SQL Server DB インスタンスに接続しようとしたときに発生する可能性があるエラーメッセージを示しています。


****  
<a name="rds-sql-server-connection-troubleshooting-guidance"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ConnectToMicrosoftSQLServerInstance.Troubleshooting.html)

**注記**  
接続の問題の詳細については、「[Amazon RDS DB インスタンスに接続できない](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)」を参照してください。

# RDS for SQL Server での SQL Server Developer Edition の使用
<a name="sqlserver-dev-edition"></a>

RDS for SQL Server は SQL Server Developer Edition をサポートとしています。Developer Edition には SQL Server Enterprise Edition のすべての機能が含まれていますが、本番稼働用以外の用途にのみライセンスされます。RDS for SQL Server Developer Edition インスタンスは、カスタムエンジンバージョン (CEV) 機能を使用して独自のインストールメディアを使用して作成できます。

## 利点
<a name="sqlserver-dev-edition.benefits"></a>

RDS for SQL Server Developer Edition を使用すると、次のことができます。
+ 本番環境データベースと同等の機能を維持しながら、開発環境とテスト環境のコストを削減します。
+ 非本番環境の Enterprise Edition 機能には、Enterprise ライセンス料金なしでアクセスできます。
+ バックアップ、パッチ適用、モニタリングなど、Amazon RDS の自動管理機能を使用します。

**注記**  
SQL Server Developer Edition は、開発およびテストのみを目的としてライセンスされており、本番環境では使用できません。

## リージョンの可用性
<a name="sqlserver-dev-edition.regions"></a>

RDS for SQL Server Developer Edition は、次の AWS リージョンで使用できます。
+ 米国東部 (バージニア北部)
+ 米国東部 (オハイオ)
+ 米国西部 (オレゴン)
+ 米国西部 (北カリフォルニア)
+ アジアパシフィック (ムンバイ)
+ アジアパシフィック (ソウル)
+ アジアパシフィック (シンガポール)
+ アジアパシフィック (大阪)
+ アジアパシフィック (シドニー)
+ アジアパシフィック (東京)
+ 欧州 (アイルランド)
+ 欧州 (フランクフルト)
+ 欧州 (ロンドン)
+ 欧州 (ストックホルム)
+ 欧州 (パリ)
+ カナダ (中部)
+ 南米 (サンパウロ)
+ アフリカ (ケープタウン)

## ライセンスと使用
<a name="sqlserver-dev-edition.licensing"></a>

SQL Server Developer Edition は、Microsoft によって開発環境とテスト環境に対してのみライセンスされます。Developer Edition を本番サーバーとして使用することはできません。Amazon RDS で SQL Server Developer Edition を使用する場合、Microsoft の SQL Server Developer Edition ライセンス条項を遵守する責任があります。AWS インフラストラクチャコストに対してのみお支払いいただきます。追加の SQL Server ライセンス料金はかかりません。料金の詳細については、「[RDS for SQL Server の料金](https://aws.amazon.com/rds/sqlserver/pricing/)」を参照してください。

## 前提条件
<a name="sqlserver-dev-edition.prerequisites"></a>

RDS for SQL Server で SQL Server Developer Edition を使用する前に、次の要件が満たされていることを確認してください。
+ インストールバイナリは Microsoft から直接取得し、Microsoft のライセンス条項に準拠していることを確認する必要があります。
+ Developer Edition DB インスタンスを作成するには、次のリソースを使用するためのアクセス権が必要です。
  + `AmazonRDSFullAccess` および `s3:GetObject` アクセス許可を持つ AWS アカウント。
+ インストールメディアを保存するには、Amazon S3 バケットが必要です。CEV 作成の一環として Amazon S3 バケットにアップロードするには、ISO ファイルと累積更新ファイルが必要です。詳細については、「[Amazon S3 バケットへのインストールメディアのアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。
+ すべてのインストールメディアファイルは、カスタムエンジンバージョンが作成される同じリージョン内の同じ Amazon S3 バケット内と、その Amazon S3 バケット内の同じフォルダパス内に存在する必要があります。

### サポートバージョン
<a name="sqlserver-dev-edition.supported-versions"></a>

RDS for SQL Server の Developer Edition は、次のバージョンをサポートしています。
+ SQL Server 2022 CU 21 (16.00.4215.2)
+ SQL Server 2019 CU 32 GDR (15.00.4455.2)

Developer Edition CEV 作成でサポートされているすべてのエンジンバージョンを一覧表示するには、次の AWS CLI コマンドを使用します。

```
aws rds describe-db-engine-versions --engine sqlserver-dev-ee --output json --query "{DBEngineVersions: DBEngineVersions[?Status=='requires-custom-engine-version'].{Engine: Engine, EngineVersion: EngineVersion, Status: Status, DBEngineVersionDescription: DBEngineVersionDescription}}"
```

コマンドは次の例のような出力を返します。

```
{
    "DBEngineVersions": [
        {
            "Engine": "sqlserver-dev-ee",
            "EngineVersion": "16.00.4215.2.v1",
            "Status": "requires-custom-engine-version",
            "DBEngineDescription": "Microsoft SQL Server Enterprise Developer Edition",
            "DBEngineVersionDescription": "SQL Server 2022 16.00.4215.2.v1"
        }
    ]
}
```

エンジンバージョンステータス (`requires_custom_engine_version`) は、サポートされているテンプレートエンジンバージョンを識別します。これらのテンプレートには、インポートできる SQL Server バージョンが表示されます。

## 制限事項
<a name="sqlserver-dev-edition.limitations"></a>

Amazon RDS の Developer Edition には、次の制限が適用されます。
+ 現在、M6i および R6i インスタンスクラスでのみサポートされています。
+ マルチ AZ 配置とリードレプリカはサポートされていません。
+ 独自の SQL Server インストールメディアを提供および管理する必要があります。
+ SQL Server Developer Edition (sqlserver-dev-ee) のカスタムエンジンバージョンは、クロスリージョンまたはクロスアカウントで共有することはできません。

# RDS for SQL Server の CEV の準備
<a name="sqlserver-dev-edition.preparing"></a>

## 前提条件
<a name="sqlserver-dev-prerequisites"></a>

カスタムエンジンバージョンを作成する前に、次の前提条件を満たしていることを確認してください。

### SQL Server Developer Edition インストールメディアを準備する
<a name="sqlserver-dev-prepare-media"></a>

Microsoft から SQL Server Developer Edition インストールメディアを取得し、S3 にアップロードする準備をする必要があります。

**Microsoft からインストールメディアをダウンロードするには**

1. **オプション A:** [Visual Studio サブスクリプション](https://visualstudio.microsoft.com/subscriptions/)を使用して Developer Edition ISO をダウンロードします。英語版のみサポートされています。

1. **オプション B: SQL Server インストーラを使用する**

   1. [SQL Server Developer Edition インストーラ](https://download.microsoft.com/download/c/c/9/cc9c6797-383c-4b24-8920-dc057c1de9d3/SQL2022-SSEI-Dev.exe)をダウンロードします。

   1. インストーラを実行し、**[メディアのダウンロード]** を選択して ISO 全体をダウンロードします。

   1. 優先言語として **[英語]** を選択します。

   1. メディアタイプとして **[ISO]** を選択します。

   1. [**ダウンロード**] を選択します。

**累積更新をダウンロードするには**

1. [Microsoft Catalog Update](https://www.catalog.update.microsoft.com/Home.aspx) ページにアクセスします。

1. RDS for SQL Server でサポートされている SQL Server Developer Edition (例: SQL Server 2022 累積更新) を見つけます。

1. サポートされている最新の CU 実行可能ファイルをダウンロードし、マシンに保存します。

1. ファイル例: `SQLServer2022-KB5065865-x64.exe` (CU21 for SQL Server 2022)

**重要**  
RDS for SQL Server は、特定の累積更新 (CU) バージョンのみをサポートします。次の表に示すバージョンを正確に使用する必要があります。新しい CU バージョンは、RDS と互換性がない可能性があるため、Microsoft から入手できる場合でも使用しないでください。

または、以下から必要な累積更新 (CU) ファイルを直接ダウンロードすることもできます。

次の表に、RDS で使用するためにサポートされている SQL Server Developer Edition のバージョンとそれに対応する累積更新を示します。


| SQL Server バージョン | サポートされている CU | KB Article | ダウンロードファイル名 | 
| --- | --- | --- | --- | 
|  SQL Server 2022  |  `CU21`  |  [KB5065865](https://learn.microsoft.com/en-us/troubleshoot/sql/releases/sqlserver-2022/cumulativeupdate21)  |  `SQLServer2022-KB5065865-x64.exe`  | 
|  SQL Server 2019  |  `CU32 GDR`  |  [KB5068404](https://support.microsoft.com/en-us/topic/kb5068404-description-of-the-security-update-for-sql-server-2019-cu32-november-11-2025-c203bfbf-036e-46d2-bc10-6c01200dc48a)  |  `SQLServer2019-KB5068404-x64.exe`  | 

# RDS for SQL Server のカスタムエンジンバージョンの作成
<a name="sqlserver-dev-edition.creating-cev"></a>

RDS for SQL Server のカスタムエンジンバージョン (CEV) は、Amazon RDS にインポートされた SQL Server Developer Edition インストールメディアで構成されます。ベース ISO インストーラと累積更新ファイル (.exe) を Amazon S3 バケットにアップロードする必要があります。アップロードしたら、Amazon S3 の場所を RDS に提供して、CEV をダウンロード、検証、作成する必要があります。

## 命名に関する制限
<a name="sqlserver-dev-edition.create-cev.naming-limitations"></a>

CEV を作成するときは、特定の命名規則に従う必要があります。
+ CEV 名はパターン `major-version.minor-version.customized-string` に従う必要があります。
+ `customized-string` には、1～50 文字の英数字、アンダースコア、ダッシュ、ピリオドを含めることができます。例: `16.00.4215.2.my-dev-cev` SQL Server 2022 用。

サポートされているすべてのエンジンバージョンを一覧表示するには、次のコマンドを使用します。

```
aws rds describe-db-engine-versions --engine sqlserver-dev-ee --output json --query "{DBEngineVersions: DBEngineVersions[?Status=='requires-custom-engine-version'].{Engine: Engine, EngineVersion: EngineVersion, Status: Status, DBEngineVersionDescription: DBEngineVersionDescription}}" 

{
    "DBEngineVersions": [
        {
            "Engine": "sqlserver-dev-ee",
            "EngineVersion": "16.00.4215.2.v1",
            "Status": "requires-custom-engine-version",
            "DBEngineDescription": "Microsoft SQL Server Enterprise Developer Edition",
            "DBEngineVersionDescription": "SQL Server 2022 16.00.4215.2.v1"
        }
    ]
}
```

## AWS CLI
<a name="sqlserver-dev-edition.create-cev.CLI"></a>

**カスタムエンジンバージョンを作成するには**
+ [create-custom-db-engine-version](https://docs.aws.amazon.com/cli/latest/reference/rds/create-custom-db-engine-version.html) コマンドを使用します。

  以下のオプションは必須です。
  + `--engine`
  + `--engine-version`
  + `--database-installation-files-s3-bucket-name`
  + `--database-installation-files`
  + `--region`

  また、以下のオプションを指定することもできます。
  + `--database-installation-files-s3-prefix`
  + `--description`
  + `--tags`

  ```
  aws rds create-custom-db-engine-version \
  --engine sqlserver-dev-ee \
  --engine-version 16.00.4215.2.cev-dev-ss2022-cu21 \
  --region us-west-2 \
  --database-installation-files-s3-bucket-name my-s3-installation-media-bucket \
  --database-installation-files-s3-prefix sqlserver-dev-media \
  --database-installation-files "SQLServer2022-x64-ENU-Dev.iso" "SQLServer2022-KB5065865-x64.exe"
  ```

CEV の作成には通常 15～30 分かかります。CEV 作成の進行状況をモニタリングするには、次のコマンドを使用します。

```
# Check CEV status
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--region us-west-2
```

## RDS for SQL Server CEV のライフサイクル
<a name="sqlserver-dev-cev-lifecycle"></a>

RDS for SQL Server で SQL Server Developer Edition を使用する場合、カスタムエンジンバージョンはさまざまなライフサイクル状態に移行します。


| ライフサイクル状態 | 説明 | いつ発生するか | 使用可能なアクション | 
| --- | --- | --- | --- | 
|  検証保留中  |  CEV 作成時の初期状態  |  これは、`create-custom-db-engine-version` コマンドを使用して作成した後の最初の状態です。  |  `describe-db-engine-version` を介してステータスをモニタリングします。  | 
|  検証しています  |  CEV 検証状態  |  Amazon RDS はカスタムエンジンバージョン (CEV) を検証しています。この非同期プロセスが完了するまでに時間がかかる場合があります。  |  検証が完了するまでステータスをモニタリングします。  | 
|  利用可能  |  カスタムエンジンバージョン (CEV) の検証が正常に完了しました。  |  カスタムエンジンバージョン (CEV) が利用可能になりました。Amazon RDS は SQL Server ISO と累積更新ファイルの検証に成功しました。この CEV を使用して DB インスタンスを作成できるようになりました。  |  この CEV を使用して DB インスタンスを作成する  | 
|  失敗  |  検証チェックに失敗したため、RDS for SQL Server はカスタムエンジンバージョン (CEV) を作成できません。  |  ISO と累積メディアの検証に失敗しました。   |  ISO 検証に失敗しました。`describe-db-engine-version` で障害の理由を確認し、ハッシュの不一致やコンテンツの破損などのファイルの問題を修正してから、カスタムエンジンバージョン (CEV) を再作成します。  | 
|  削除中  |  カスタムエンジンバージョン (CEV) は削除中です  |  顧客が `delete-custom-db-engine-version` を呼び出した後、削除ワークフローが完了するまで。  |  `describe-db-engine-version` を介してステータスをモニタリングします。  | 
|  incompatible-installation-media  |  Amazon RDS は、カスタムエンジンバージョン (CEV) 用に提供されたインストールメディアを検証できませんでした  |  カスタムエンジンバージョン (CEV) の検証に失敗しました。これは終了状態です。  |  検証が失敗した理由については、`describe-db-engine-versions` の failureReason を参照してください。CEV を削除します。  | 

### CEV ステータスの説明
<a name="sqlserver-dev-cev-status-check"></a>

AWS CLI を使用して CEV の状態を確認できます。

```
1. aws rds describe-db-engine-versions \
2. --engine sqlserver-dev-ee \
3. --engine-version 16.00.4215.2.my-dev-cev \
4. --region us-west-2 \
5. --query 'DBEngineVersions[0].{Version:EngineVersion,Status:Status}'
```

サンプル出力

```
| DescribeDBEngineVersions                     |
+------------+---------------------------------+
| Status | Version                             |
+------------+---------------------------------+
| available | 16.00.4215.2.cev-dev-ss2022-cu21    |
+------------+---------------------------------+
```

CEV が `failed` ステータスを表示している場合、次のコマンドを使用して理由を特定できます。

```
1. aws rds describe-db-engine-versions \
2. --engine sqlserver-dev-ee \
3. --engine-version 16.00.4215.2.my-dev-cev \
4. --region us-west-2 \
5. --query 'DBEngineVersions[0].{Version:EngineVersion,Status:Status,FailureReason:FailureReason}'
```

# RDS for SQL Server Developer Edition DB インスタンスの作成
<a name="sqlserver-dev-edition.creating-instance"></a>

RDS for SQL Server で Developer Edition インスタンスを起動するには、まず `create-custom-db-engine-version` で CEV を作成します。カスタムエンジンバージョンが使用可能な状態になったら、CEV を使用して Amazon RDS データベースインスタンスを作成できます。

**Developer Edition インスタンス作成の主な違い**


| パラメータ | Developer Edition | 
| --- | --- | 
|  `--engine`  |  sqlserver-dev-ee  | 
|  `--engine-version`  |  カスタムエンジンバージョン (例: 16.00.4215.2.cev-dev-ss2022-cu21)  | 
|  `--license-model`  |  自分のライセンス使用  | 

## AWS CLI
<a name="sqlserver-dev-edition.creating-instance.CLI"></a>

SQL Server Developer Edition DB を作成するには、以下のパラメータを指定して [create-db-instance](https://docs.aws.amazon.com//cli/latest/reference/rds/create-db-instance.html) コマンドを使用します。

以下のオプションは必須です。
+ `--db-instance-identifier` 
+ `--db-instance-class` 
+ `--engine` – `sqlserver-dev-ee`
+ `--region`

**例:**

Linux、macOS、Unix の場合:

```
aws rds create-db-instance \
--db-instance-identifier my-dev-sqlserver \
--db-instance-class db.m6i.xlarge \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--allocated-storage 200 \
--master-username admin \
--master-user-password changeThisPassword \
--license-model bring-your-own-license \
--no-multi-az \
--vpc-security-group-ids sg-xxxxxxxxx \
--db-subnet-group-name my-db-subnet-group \
--backup-retention-period 7 \
--region us-west-2
```

Windows の場合:

```
aws rds create-db-instance ^
--db-instance-identifier my-dev-sqlserver ^
--db-instance-class db.m6i.xlarge ^
--engine sqlserver-dev-ee ^
--engine-version 16.00.4215.2.cev-dev-ss2022-cu21 ^
--allocated-storage 200 ^
--master-username admin ^
--master-user-password master_user_password ^
--license-model bring-your-own-license ^
--no-multi-az ^
--vpc-security-group-ids sg-xxxxxxxxx ^
--db-subnet-group-name my-db-subnet-group ^
--backup-retention-period 7 ^
--region us-west-2
```

AWS コンソールを使用して作成する [DB インスタンスの作成](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html#USER_CreateDBInstance.Creating)を参照してください。

# データベースのマイナーバージョンアップグレードの適用
<a name="sqlserver-dev-edition.minor-version-upgrades"></a>

RDS for SQL Server Developer Edition では、データベースのマイナーバージョンアップグレードを適用するために、最新の累積更新を含む新しいカスタムエンジンバージョン (CEV) を作成する必要があります。SQL Server Developer Edition のデータベースマイナーバージョンアップグレードには、次のステップが含まれます。

1. アップグレードする前に、インスタンスの現在のエンジンバージョンを確認し、Amazon RDS でサポートされているバージョンからターゲットデータベースエンジンのバージョンを特定します。Amazon RDS で使用できる SQL Server のバージョンについての詳細は、「[RDS for SQL Server での SQL Server Developer Edition の使用](sqlserver-dev-edition.md)」を参照してください。

1. インストールメディア (ISO および CU) を取得してアップロードし、[新しいカスタムエンジンバージョンを作成します](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/sqlserver-dev-edition.creating-cev.html)。

1. 新しい CEV で Amazon RDS [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) を使用してデータベースのマイナーバージョンアップグレードを適用します。

   ```
   aws rds modify-db-instance \
   --db-instance-identifier <instance-id> \
   --engine-version <new-cev-version> \
   --no-apply-immediately ## use --apply-immediately for immediate update
   ```
**注記**  
`--no-apply-immediately` (デフォルト) を使用して、次のメンテナンスウィンドウ中に変更を適用します。

# カスタムエンジンバージョンの表示と管理
<a name="sqlserver-dev-edition.managing"></a>

すべての RDS for SQL Server Developer Edition CEV を表示するには、`--engine` 入力を `sqlserver-dev-ee` として `describe-db-engine-versions` コマンドを使用します。

```
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--include-all \
--region us-west-2
```

特定の CEV の詳細を表示するには、次のコマンドを使用します。

```
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.cev-dev-ss2022-cu21 \
--region us-west-2
```

**注記**  
このコマンドは、`available` ステータスの CEV のみを返します。検証または他の状態の CEV を表示するには、`--include-all` フラグを含めます。

## カスタムエンジンバージョンの削除
<a name="sqlserver-dev-deleting-cevs"></a>

CEV を削除する前に、CEV が次のいずれかで使用中ではないことを確認してください。
+ Amazon RDS DB インスタンス
+ Amazon RDS DB インスタンスのスナップショット
+ Amazon RDS DB インスタンスの自動バックアップ

**注記**  
関連付けられたリソースがある場合、CEV を削除することはできません。

カスタムエンジンバージョンを削除するには、[delete-custom-db-engine-version](https://docs.aws.amazon.com//cli/latest/reference/rds/delete-custom-db-engine-version.html) コマンドを使用します。
+ `--engine`: Developer Edition に `sqlserver-dev-ee` を指定する
+ `--engine-version`: 削除する正確な CEV バージョン識別子
+ `--region`: CEV が存在する AWS リージョン

```
aws rds delete-custom-db-engine-version \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--region us-west-2
```

CEV 削除プロセスをモニタリングするには、`describe-db-engine-versions` コマンドを使用して RDS for SQL Server CEV エンジンのバージョンを指定します。

```
aws rds describe-db-engine-versions \
--engine sqlserver-dev-ee \
--engine-version 16.00.4215.2.my-dev-cev \
--region us-west-2
```

ステータス値:
+ `deleting`: CEV 削除を実行中
+ 結果は返されません: CEV が正常に削除されました

# RDS for SQL Server の SQL Server Developer Edition のトラブルシューティング
<a name="sqlserver-dev-edition.troubleshooting"></a>

次の表に、SQL Server Developer Edition for RDS for SQL Server を使用する際の一般的なエラーと対応する解決策を示します。


**一般的なエラーと解決策**  

| エラーコード | 説明 | ソリューション | 
| --- | --- | --- | 
| InvalidParameterValue | 無効な CEV パラメータまたはファイル参照 | ファイル名、パス、パラメータ構文を検証する | 
| DBSubnetGroupNotFound | サブネットグループが存在しません | サブネットグループの作成または名前の検証 | 
| InvalidVPCNetworkState | VPC 設定の問題 | VPC、サブネット、ルーティングテーブルを確認する | 
| InvalidEngineVersion | CEV が使用できないか無効です | CEV のステータスと名前を確認する | 
| InvalidDBInstanceClass | インスタンスクラスはサポートされていません | サポートされているインスタンスクラスの選択 | 
| CustomDBEngineVersionQuotaExceededFault | カスタムエンジンバージョンの最大数に達しました | 必要に応じてサービスクォータを引き上げるか、必要に応じて未使用の CEV を削除する | 
| CreateCustomDBEngineVersionFault | Amazon RDS は、Amazon S3 バケット内の指定されたインストーラファイルにアクセスできませんでした。 | Amazon RDS は、指定された Amazon S3 の場所にある SQL Server インストールファイルにアクセスできません。Amazon S3 バケットポリシーで Amazon RDS サービスプリンシパル (rds.amazonaws.com) s3:GetObject アクセス許可を付与します。Amazon S3 バケットリージョンが CEV を作成するリージョンと同じであることを確認します。 | 

# RDS for SQL Server による Active Directory の操作
<a name="User.SQLServer.ActiveDirectoryWindowsAuth"></a>

RDS for SQL Server DB インスタンスを Microsoft Active Directory (AD) ドメインに参加させることができます。AD ドメインは、AWS 内の AWS マネージド AD で、企業データセンターなど任意の場所のセルフマネージド AD で、AWS EC2 で、またはその他のクラウドプロバイダーでホストすることができます。

セルフマネージド Active Directory および AWS Managed Microsoft AD では、NTLM 認証と Kerberos 認証を使用してドメインユーザーを認証できます。

以下のセクションでは、Amazon RDS 上の Microsoft SQL Server について、セルフマネージド Active Directory と AWS マネージド Active Directory の使用方法について説明します。

**Topics**
+ [Amazon RDS for SQL Server DB インスタンスによるセルフマネージド Active Directory の操作](USER_SQLServer_SelfManagedActiveDirectory.md)
+ [RDS for SQL Server による AWS Managed Active Directory の操作](USER_SQLServerWinAuth.md)

# Amazon RDS for SQL Server DB インスタンスによるセルフマネージド Active Directory の操作
<a name="USER_SQLServer_SelfManagedActiveDirectory"></a>

Amazon RDS for SQL Server は、データセンター内、Amazon EC2、またはその他のクラウドプロバイダーなど、AD がホストされている場所に関係なく、セルフマネージド Active Directory (AD) ドメインとシームレスに統合されます。この統合により、NTLM または Kerberos プロトコルを介した直接ユーザー認証が可能になり、複雑な中間ドメインやフォレストの信頼性が不要になります。RDS SQL Server DB インスタンスに接続すると、認証リクエストは指定された AD ドメインに安全に転送され、Amazon RDS のマネージドデータベース機能を活用しながら、既存の ID 管理構造が維持されます。

**Topics**
+ [利用可能なリージョンとバージョン](#USER_SQLServer_SelfManagedActiveDirectory.RegionVersionAvailability)
+ [要件](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md)
+ [考慮事項](#USER_SQLServer_SelfManagedActiveDirectory.Limitations)
+ [セルフマネージド Active Directory の設定](USER_SQLServer_SelfManagedActiveDirectory.SettingUp.md)
+ [DB インスタンスをセルフマネージド Active Directory に結合する](USER_SQLServer_SelfManagedActiveDirectory.Joining.md)
+ [セルフマネージド Active Directory ドメイン内の DB インスタンスの管理](USER_SQLServer_SelfManagedActiveDirectory.Managing.md)
+ [セルフマネージド Active Directory ドメインメンバーシップについて](#USER_SQLServer_SelfManagedActiveDirectory.Understanding)
+ [セルフマネージド Active Directory のトラブルシューティング](USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory.md)
+ [SQL Server DB インスタンスを復元してからセルフマネージド Active Directory ドメインに追加する](#USER_SQLServer_SelfManagedActiveDirectory.Restore)

## 利用可能なリージョンとバージョン
<a name="USER_SQLServer_SelfManagedActiveDirectory.RegionVersionAvailability"></a>

Amazon RDS は、すべての商用 AWS リージョンおよび AWS GovCloud (US) Regions で NTLM を使用するセルフマネージド AD for SQL Server をサポートしています。

# 要件
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements"></a>

RDS for SQL Server DB インスタンスをセルフマネージド AD ドメインに参加させる前に、次の要件を満たしていることを確認してください。

**Topics**
+ [オンプレミス AD の設定](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.OnPremConfig)
+ [ネットワーク接続の設定](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)
+ [AD ドメインサービスアカウントの設定](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)
+ [LDAPS を介した安全な通信の設定](#USER_SQLServer_SelfManagedActiveDirectory.Requirements.LDAPS)

## オンプレミス AD の設定
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.OnPremConfig"></a>

Amazon RDS for SQL Server インスタンスを参加させることができるオンプレミスまたはその他のセルフマネージド Microsoft AD があることを確認してください。オンプレミス AD には以下の設定が必要です。
+ AD サイトが定義されている場合、RDS for SQL Server DB インスタンスに関連付けられている VPC 内のサブネットが AD サイトで定義されていることを確認してください。VPC 内のサブネットと他の AD サイトのサブネットの間に競合がないことを確認します。
+ AD ドメインコントローラーは、Windows Server 2008 R2 以降のドメイン機能レベルを持ちます。
+ AD ドメイン名をシングルラベルドメイン (SLD) 形式にすることはできません。RDS for SQL Server は、SLD ドメインをサポートしていません。
+ AD の完全修飾ドメイン名 (FQDN) は 47 文字以内で指定します。

## ネットワーク接続の設定
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig"></a>

次のネットワーク設定を満たしていることを確認します。
+ RDS for SQL Server DB インスタンスを作成する Amazon VPC とセルフマネージド AD の間の接続を設定します。接続は、AWS 直接接続、AWS VPN、VPC ピアリング、または AWS トランジットゲートウェイを使用して設定できます。
+ VPC セキュリティグループ については、デフォルトの Amazon VPC のデフォルトセキュリティグループが、コンソールの RDS for SQL Server DB インスタンスに既に追加されています。RDS for SQL Server DB インスタンスを作成するサブネットのセキュリティグループと VPC ネットワーク ACL が、次の図に示す方向でのポート上のトラフィックを許可していることを確認します。  
![\[セルフマネージド AD ネットワーク設定ポートルール。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQLServer_SelfManagedActiveDirectory_Requirements_NetworkConfig.png)

  以下の表に、各ポートのロールを示します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_SQLServer_SelfManagedActiveDirectory.Requirements.html)
+ 通常、ドメイン DNS サーバーは AD ドメインコントローラーにあります。この機能を使用するために VPC DHCP オプションセットを設定する必要はありません。詳細については、「*Amazon VPC ユーザーガイド*」の「[DHCP オプションセット](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)」を参照してください。

**重要**  
VPC ネットワーク ACL を使用している場合は、RDS for SQL Server DB インスタンスからのダイナミックポート (49152-65535) でのアウトバウンドトラフィックも許可する必要があります。これらのトラフィックルールが、各 ADドメインコントローラー、DNS サーバー、および RDS for SQL Server DB インスタンスにもミラーリングされていることを確認します。  
VPC セキュリティグループでは、ネットワークトラフィックが開始される方向でのみポートを開く必要がありますが、ほとんどの Windows ファイアウォールとおよび VPC ネットワーク ACL では両方向にポートを開く必要があります。

## AD ドメインサービスアカウントの設定
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig"></a>

AD ドメインサービスアカウントが次の要件を満たしていることを確認してください。
+ コンピュータをドメインに参加させる委任アクセス許可のあるドメインサービスアカウントがセルフマネージド AD ドメインにあることを確認してください。ドメインサービスアカウントは、特定のタスクを実行するアクセス許可を委任されたセルフマネージド AD のユーザーアカウントです。
+ ドメインサービスアカウントには、RDS for SQL Server DB インスタンスを参加させる組織単位 (OU) の以下のアクセス許可を委任する必要があります。
  + DNS ホスト名への書き込みを検証する機能
  + サービスプリンシパル名への書き込みを検証する機能
  + コンピュータオブジェクトを作成および削除する

  これらは、コンピュータオブジェクトをセルフマネージド AD に接続させるために必要な最小限の許可セットです。詳細については、Microsoft Windows Server ドキュメントの「[コンピューターをドメインに参加させようとするとエラーが発生する](https://learn.microsoft.com/en-US/troubleshoot/windows-server/identity/access-denied-when-joining-computers)」を参照してください。
+ Kerberos 認証を使用するには、AD ドメインサービスアカウントにサービスプリンシパルネーム (SPN) と DNS アクセス許可を提供する必要があります。
  + **書き込み SPN**: RDS for SQL Server DB インスタンスに参加する必要がある OU の AD ドメインサービスアカウントに**書き込み SPN** アクセス許可を委任します。このアクセス許可は、検証済みの書き込み SPN とは異なります。
  + **DNS アクセス許可**: ドメインコントローラーのサーバーレベルで DNS マネージャーの AD ドメインサービスアカウントに次のアクセス許可を付与します。
    + コンテンツを一覧表示する
    + すべてのプロパティを読み取る
    + 読み取りアクセス許可

**重要**  
DB インスタンスの作成後に RDS for SQL Server が組織単位に作成したコンピュータオブジェクトを移動しないでください。関連するオブジェクトを移動すると、RDS for SQL Server DB インスタンスが誤って設定される原因となります。Amazon RDS によって作成されたコンピュータオブジェクトを移動する必要がある場合は、[ModifyDbInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API オペレーションを使用して、コンピュータオブジェクトの目的の場所にドメインパラメータを変更します。

## LDAPS を介した安全な通信の設定
<a name="USER_SQLServer_SelfManagedActiveDirectory.Requirements.LDAPS"></a>

RDS がドメインコントローラー内のコンピュータオブジェクトと SPN をクエリしてアクセスするには、LDAPS 経由の通信が推奨されます。安全な LDAP を使用するには、安全な LDAPS の要件を満たす有効な SSL 証明書をドメインコントローラーで使用します。有効な SSL 証明書がドメインコントローラーに存在しない場合、RDS for SQL Server DB インスタンスはデフォルトで LDAP を使用します。証明書の有効性の詳細については、「[Requirements for an LDAPS certificate](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/enable-ldap-over-ssl-3rd-certification-authority#requirements-for-an-ldaps-certificate)」を参照してください。

## 考慮事項
<a name="USER_SQLServer_SelfManagedActiveDirectory.Limitations"></a>

RDS for SQL Server DB インスタンスをセルフマネージド AD に追加するときは、次の点を考慮してください。
+ DB インスタンスは、AD ドメインのタイムサーバーではなく、AWS の NTP サービスと同期します。AD ドメイン内のリンクされた SQL Server インスタンス間のデータベース接続の場合、SQL 認証のみ実行でき、Windows 認証は実行できません。
+ セルフマネージド AD ドメインのグループポリシーオブジェクト設定は RDS for SQL Server インスタンスには伝播されません。

# セルフマネージド Active Directory の設定
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp"></a>

セルフマネージド AD を設定するには、次の手順を実行してください。

**Topics**
+ [ステップ 1: AD に組織単位を作成する](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateOU)
+ [ステップ 2: AD に AD ドメインサービスアカウントを作成する](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateADuser)
+ [ステップ 3: AD ドメインサービスアカウントに制御を委任する](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.DelegateControl)
+ [ステップ 4: AWS KMS キーを作成する](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateKMSkey)
+ [ステップ 5: AWS シークレットを作成する](#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateSecret)

## ステップ 1: AD に組織単位を作成する
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateOU"></a>

**重要**  
 セルフマネージド AD ドメインに参加した RDS for SQL Server DB インスタンスを所有する AWS アカウントに、専用の OU とその OU を対象とするサービス認証情報を作成することをお勧めします。OU とサービス認証情報を専用にすることで、アクセス許可の競合を回避し、最小特権の原則に従うことができます。

**AD に OU を作成するには**

1. ドメイン管理者として AD ドメインに接続します。

1. **[Active Directory ユーザーとコンピューター]** を開き、OU を作成するドメインを選択します。

1. ドメインを右クリックして、**[新規]** を選択し、次に **[組織単位]** を選択します。

1. OU の名前を入力します。

1. **[コンテナを誤って削除しないように保護する]** ボックスはオンのままにしてください。

1. **[OK]** をクリックします。新しい OU がドメインの下に表示されます。

## ステップ 2: AD に AD ドメインサービスアカウントを作成する
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateADuser"></a>

ドメインサービスアカウントの認証情報は AWS Secrets Manager のシークレットに使用されます。

**AD に AD ドメインサービスアカウントを作成するには**

1. **[Active Directory ユーザーとコンピューター]** を開き、ユーザーを作成するドメインと OU を選択します。

1. **[ユーザー]** オブジェクトを右クリックして、**[新規]** を選択し、**[ユーザー]** を選択します。

1. ユーザーの名、姓、およびログオン名を入力します。**[次へ]** をクリックします。

1. ユーザーのパスワードを入力します。**[ユーザーは次回のログイン時にパスワードを変更する必要がある]** を選択しないでください。**[アカウントは無効です]** を選択しないでください。**[次へ]** をクリックします。

1. **[OK]** をクリックします。新しいユーザーがドメインの下に表示されます。

## ステップ 3: AD ドメインサービスアカウントに制御を委任する
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.DelegateControl"></a>

**ドメイン内の AD ドメインサービスアカウントに制御を委任するには**

1. **[Active Directory ユーザーとコンピューター]** MMC スナップインを開き、ユーザーを作成するドメインを選択します。

1. 前に作成した OU を右クリックして、**[制御を委任]** を選択します。

1. **[コントロールウィザードの委任]** で、**[次へ]** を選択します。

1. **[ユーザーまたはグループ]** セクションで、**[追加]** をクリックします。

1. **[ユーザー、コンピューター、またはグループの選択]** セクションで、作成した AD ドメインサービスアカウントを入力し、**[名前を確認]** をクリックします。AD ドメインサービスアカウントのチェックが成功したら、**[OK]** をクリックします。

1. **[ユーザーまたはグループ]** セクションで、AD ドメインサービスアカウントが追加されたことを確認し、**[次へ]** をクリックします。

1. **[委任するタスク]** セクションで、**[委任するカスタムタスクを作成]** を選択し、**[次へ]** をクリックします。

1. **[Active Directory オブジェクトタイプ]** セクションで:

   1. **[フォルダ内の次のオブジェクトのみ]** を選択します。

   1. **[コンピュータオブジェクト]** を選択します。

   1. **[このフォルダに選択したオブジェクトを作成]** を選択します。

   1. **[このフォルダ内の選択したオブジェクトを削除]** を選択し、**[次へ]** をクリックします。

1. **[アクセス許可]** セクションで:

   1. **[全般]** を選択したままにします。

   1. **[DNS ホスト名への検証済み書き込み]** を選択します。

   1. **[サービスプリンシパル名への検証済み書き込み]** を選択し、**[次へ]** をクリックします。

   1. Kerberos 認証を有効にするには、**[プロパティ固有]** を選択し、リストから **[書き込み servicePrincipalName]** を選択します。

1. **[コントロールウィザードの委任の完了]** で設定を確認し、**[完了]** をクリックします。

1. Kerberos 認証の場合は、DNS Manager を開き、**[サーバー]** プロパティを開きます。

   1. Windows ダイアログボックスで、`dnsmgmt.msc` と入力します。

   1. **[セキュリティ]** タブの下に AD ドメインサービスアカウントを追加します。

   1. **[読み取り]** アクセス許可を選択し、変更を適用します。

## ステップ 4: AWS KMS キーを作成する
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateKMSkey"></a>

KMS キーは、AWS シークレットの暗号化に使用されます。

**AWS KMS キーを作成するには**
**注記**  
 **[暗号化キー]** として、AWS デフォルトの KMS キーを使用しないでください。AWS KMS キーは、セルフマネージド AD に参加させる RDS for SQL Server DB インスタンスを含んでいるのと同じ AWS アカウントに作成してください。

1. AWS KMS コンソールで、**[キーの作成]** を選択します。

1. **[キーの種類]** として、**[対称]** を選択します。

1. **[キーの使用方法]** として、**[暗号化と復号化]** を選択します。

1. [**Advanced options (詳細オプション)**] の場合:

   1. **[キーマテリアルのオリジン]** として、**[KMS]** を選択します。

   1. **[リージョナリティ]** として、**[単一リージョンキー]** を選択し、**[次へ]** をクリックします。

1. **[エイリアス]** に、KMS キーの名前を指定します。

1. (オプション) **[説明]** に、KMS キーの説明を入力します。

1. (オプション) **[タグ]** に、KMS キーのタグを指定し、**[次へ]** をクリックします。

1. **[キー管理者]** として、IAM ユーザーの名前を入力して選択します。

1. **[キーの削除]** で、**[キー管理者にこのキーの削除を許可する]** のボックスをオンのままにして、**[次へ]** をクリックします。

1. **[キーユーザー]** として、前のステップと同じ IAM ユーザーを指定して選択します。**[次へ]** をクリックします。

1. 設定を確認します。

1. **[キーポリシー]** で、以下をポリシー **[ステートメント]** に含めます。

   ```
   {
       "Sid": "Allow use of the KMS key on behalf of RDS",
       "Effect": "Allow",
       "Principal": {
           "Service": [
               "rds.amazonaws.com"
           ]
       },
       "Action": "kms:Decrypt",
       "Resource": "*"
   }
   ```

1. [**Finish**] をクリックします。

## ステップ 5: AWS シークレットを作成する
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateSecret"></a>

**シークレットを作成する**
**注記**  
 シークレットは、セルフマネージド AD に参加させる RDS for SQL Server DB インスタンスを含んでいるのと同じ AWS アカウントに作成してください。

1. AWS Secrets Manager で、**[新しいシークレットを保存する]** を選択します。

1. **[Secret type] (シークレットタイプ)** で、**[Other type of secret]** (他の種類のシークレット) を選択します。

1. **[キーと値のペア]** として、次の 2 つのキーを追加します。

   1. 最初のキーには、`SELF_MANAGED_ACTIVE_DIRECTORY_USERNAME` と入力します。

   1. 最初のキーの値には、AD ユーザーのユーザー名 (ドメインプレフィックスなし) のみを入力します。ドメイン名を含めないでください。含めると、インスタンスの作成が失敗します。

   1. 2 番目のキーとして、`SELF_MANAGED_ACTIVE_DIRECTORY_PASSWORD` と入力します。

   1. 2 番目のキーの値には、ドメインの AD ユーザー用に作成したパスワードを入力します。

1. **[暗号化キー]** として、前のステップで作成した KMS キーを入力し、**[次へ]** をクリックします。

1. **[シークレット名]** として、後でシークレットを見つけやすい、わかりやすい名前を入力します。

1. (オプション) **[説明]** として、シークレット名の説明を入力します。

1. **[リソースアクセス許可]** として、**[編集]** をクリックします。

1. 以下のポリシーをアクセス許可ポリシーに追加します。
**注記**  
*Confused Deputy* Problem (混乱した代理の問題) を回避するために、ポリシーの `aws:sourceAccount` および `aws:sourceArn` 条件を使用することをお勧めします。`aws:sourceAccount` の AWS アカウント と `aws:sourceArn` の RDS for SQL Server DB インスタンス ARN を使用します。詳細については、「[サービス間での混乱した代理問題の防止](cross-service-confused-deputy-prevention.md)」を参照してください。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement":
       [
           {
               "Effect": "Allow",
               "Principal":
               {
                   "Service": "rds.amazonaws.com"
               },
               "Action": "secretsmanager:GetSecretValue",
               "Resource": "*",
               "Condition":
               {
                   "StringEquals":
                   {
                       "aws:sourceAccount": "123456789012"
                   },
                   "ArnLike":
                   {
                       "aws:sourceArn": "arn:aws:rds:us-west-2:123456789012:db:*"
                   }
               }
           }
       ]
   }
   ```

------

1. **[保存]** をクリックし、**[次へ]** をクリックします。

1. **[ローテーションの設定]** は、デフォルト値のままにして、**[次へ]** を選択します。

1. シークレットの設定を確認し、**[保存]** をクリックします。

1. 作成したシークレットを選択し、**[シークレット ARN]** の値をコピーします。これを次のステップで使用して、セルフマネージド Active Directory をセットアップします。

# DB インスタンスをセルフマネージド Active Directory に結合する
<a name="USER_SQLServer_SelfManagedActiveDirectory.Joining"></a>

RDS for SQL Server DB インスタンスをセルフマネージド AD に結合するには、次の手順に従います。

## ステップ 1: SQL Server DB インスタンスを作成または変更する
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateModify"></a>

コンソール、CLI、または RDS API を使用して、RDS for SQL Server DB インスタンスをセルフマネージド AD ドメインに関連付けることができます。これは、次のいずれかの方法で行うことができます。
+ コンソール、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI コマンド、または [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API オペレーションを使用して、新しい SQL Server DB インスタンスを作成します。

  手順については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ コンソール、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI コマンド、または [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API オペレーションを使用して、既存の SQL Server DB インスタンスを変更します。

  手順については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
+ コンソール、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI コマンド、または [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API オペレーションを使用して、DB スナップショットから SQL Server DB インスタンスを復元します。

  手順については、「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。
+ コンソール、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI コマンド、または [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API オペレーションを使用して、SQL Server DB インスタンスをポイントインタイムに復元します。

  手順については、「[Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)」を参照してください。

AWS CLI を使用する場合は、DB インスタンスが、作成したセルフマネージド AD ドメインを使用できるように、以下のパラメータが必要です。
+ `--domain-fqdn` パラメータには、セルフマネージド AD の完全修飾ドメイン名 (FQDN) を使用します。
+ `--domain-ou` パラメータには、セルフマネージド AD で作成した OU を使用します。
+ `--domain-auth-secret-arn` パラメータには、前のステップで作成した**[シークレット ARN]** の値を使用します。
+ `--domain-dns-ips` パラメータには、セルフマネージド AD の DNS サーバーのプライマリ IPv4 アドレスとセカンダリ IPv4 アドレスを使用します。セカンダリ DNS サーバーの IP アドレスがない場合は、プライマリ IP アドレスを 2 回入力します。

次の CLI コマンドの例は、セルフマネージド AD ドメインを使用して RDS for SQL Server DB インスタンスを作成、変更、削除する方法を示しています。

**重要**  
DB インスタンスを変更してセルフマネージド AD ドメインに参加させたり、削除したりする場合、変更を有効にするには DB インスタンスを再起動する必要があります。変更をすぐに適用するか、次のメンテナンスウィンドウまで待つかを選択できます。**[すぐに適用]** オプションを選択すると、シングル AZ DB インスタンスのダウンタイムが発生します。マルチ AZ DB インスタンスは、再起動を完了する前にフェイルオーバーを実行します。詳細については、「[スケジュール変更設定の使用](USER_ModifyInstance.ApplyImmediately.md)」を参照してください。

次の CLI コマンドは、新しい RDS for SQL Server DB インスタンスを作成し、それをセルフマネージド AD ドメインに参加させます。

Linux、macOS、Unix の場合:

```
aws rds create-db-instance \
    --db-instance-identifier my-DB-instance \
    --db-instance-class db.m5.xlarge \
    --allocated-storage 50 \
    --engine sqlserver-se \
    --engine-version 15.00.4043.16.v1 \
    --license-model license-included \
    --master-username my-master-username \
    --master-user-password my-master-password \
    --domain-fqdn my_AD_domain.my_AD.my_domain \
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

Windows の場合:

```
aws rds create-db-instance ^
    --db-instance-identifier my-DB-instance ^
    --db-instance-class db.m5.xlarge ^
    --allocated-storage 50 ^
    --engine sqlserver-se ^
    --engine-version 15.00.4043.16.v1 ^
    --license-model license-included ^
    --master-username my-master-username ^
    --master-user-password my-master-password ^
    --domain-fqdn my-AD-test.my-AD.mydomain ^
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \ ^
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

次の CLI コマンドは、セルフマネージド AD ドメインを使用するように既存の RDS for SQL Server DB インスタンスを変更します。

Linux、macOS、Unix の場合:

```
aws rds modify-db-instance \
    --db-instance-identifier my-DB-instance \
    --domain-fqdn my_AD_domain.my_AD.my_domain \
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain \
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" \ 
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

Windows の場合:

```
aws rds modify-db-instance ^
    --db-instance-identifier my-DBinstance ^
    --domain-fqdn my_AD_domain.my_AD.my_domain ^
    --domain-ou OU=my-AD-test-OU,DC=my-AD-test,DC=my-AD,DC=my-domain ^
    --domain-auth-secret-arn "arn:aws:secretsmanager:region:account-number:secret:my-AD-test-secret-123456" ^ 
    --domain-dns-ips "10.11.12.13" "10.11.12.14"
```

次の CLI コマンドは、セルフマネージド AD ドメインから RDS for SQL Server DB インスタンスを削除します。

Linux、macOS、Unix の場合:

```
aws rds modify-db-instance \
    --db-instance-identifier my-DB-instance \
    --disable-domain
```

Windows の場合:

```
aws rds modify-db-instance ^
    --db-instance-identifier my-DB-instance ^
    --disable-domain
```

## ステップ 2: Kerberos または NTLM 認証の使用
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.KerbNTLM"></a>

### NTLM 認証
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.KerbNTLM.NTLM"></a>

各 Amazon RDS DB インスタンスにはエンドポイントがあり、各エンドポイントには DB インスタンスの DNS 名とポート番号があります。SQL クライアントアプリケーションを使用して DB インスタンスに接続するには、DB インスタンスの DNS 名とポート番号が必要です。NTLM 認証を使用して認証するには、マルチ AZ 配置を使用している場合、RDS エンドポイントまたはリスナーエンドポイントに接続する必要があります。

計画されたデータベースメンテナンス時や計画外のサービス中断時に、Amazon RDS は自動的に最新のセカンダリデータベースにフェイルオーバーするため、オペレーションは手動の介入なしで速やかに再開できます。プライマリインスタンスおよびセカンダリインスタンスは、同じエンドポイントを使用し、エンドポイントの物理ネットワークアドレスは、フェイルオーバープロセスの一環としてセカンダリに移行します。フェイルオーバーが発生した場合、アプリケーションを再構成する必要はありません。

### Kerberos 認証
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.Kerb"></a>

RDS for SQL Server の Kerberos ベースの認証では、特定のサービスプリンシパル名 (SPN) に接続する必要があります。ただし、フェイルオーバーイベント後、アプリケーションは新しい SPN を認識しない場合があります。これに対処するために、RDS for SQL Server には Kerberos ベースのエンドポイントが用意されています。

Kerberos ベースのエンドポイントは、特定の形式に従います。RDS エンドポイントが `rds-instance-name.account-region-hash.aws-region.rds.amazonaws.com` である場合、対応する Kerberos ベースのエンドポイントは `rds-instance-name.account-region-hash.aws-region.awsrds.fully qualified domain name (FQDN)` になります。

例えば、RDS エンドポイントが `ad-test.cocv6zwtircu.us-east-1.rds.amazonaws.com` で、ドメイン名が `corp-ad.company.com` である場合、Kerberos ベースのエンドポイントは `ad-test.cocv6zwtircu.us-east-1.awsrds.corp-ad.company.com` になります。

この Kerberos ベースのエンドポイントを使用すると、プライマリ SQL Server インスタンスの新しい SPN を指すようにエンドポイントが自動的に更新されるため、フェイルオーバーイベント後でも、Kerberos を使用して SQL Server インスタンスで認証できます。

### CNAME の検索
<a name="USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CNAME"></a>

CNAME を検索するには、ドメインコントローラーに接続し、**[DNS マネージャー]** を開きます。**[前方参照ゾーン]** と FQDN に移動します。

**awsrds**、**aws-region**、および **[アカウントとリージョン固有のハッシュ]** をナビゲートします。

![\[DB インスタンスのストレージ量の変更\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/kerb-endpoint-selfManagedAD-RDSMS.png)


リモートクライアントから CNAME を接続した後に NTLM 接続が返された場合は、必要なポートが許可リストに登録されているかどうかを確認します。

接続で Kerberos を使用しているかどうかを確認するには、次のクエリを実行します。

```
SELECT net_transport, auth_scheme
    FROM sys.dm_exec_connections
    WHERE session_id = @@SSPID;
```

Kerberos エンドポイントに接続するときにインスタンスが NTLM 接続を返す場合は、ネットワーク設定とユーザー設定を確認します。「[ネットワーク接続の設定](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)」を参照してください。

## ステップ 3: Windows 認証の SQL Server ログインを作成する
<a name="USER_SQLServer_SelfManagedActiveDirectory.CreateLogins"></a>

Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように SQL Server DB インスタンスに接続します。DB インスタンスはセルフマネージド AD ドメインに参加しているため、SQL Server のログインとユーザーをプロビジョニングできます。これは、セルフマネージド AD ドメインの AD ユーザーとグループユーティリティから行います。データベースへのアクセス許可は、これらの Windows ログインに付与され無効化されている標準の SQL サーバーのアクセス許可によって管理されています。

セルフマネージド AD ドメインサービスアカウントが SQL Server に認証するには、セルフマネージド AD ドメインサービスアカウント、またはそのユーザーが属するセルフマネージド AD グループに、SQL Server Windows ログインが存在する必要があります。これらの SQL Server ログインでアクセスを許可したり取り消したりして、細分化されたアクセスコントロールを処理します。SQL Server ログインを持たないか、またはそのようなログインを持つセルフマネージド AD グループに属していないセルフマネージド AD ドメインサービスアカウントは、SQL Server DB インスタンスにアクセスできません。

セルフマネージド AD SQL Server ログインを作成するには、ALTER ANY LOGIN アクセス許可が必要です。このアクセス許可を持つログインをまだ作成していない場合は、SQL Server 認証を使用して DB インスタンスのマスターユーザーとして接続し、マスターユーザーのコンテキストでセルフマネージド AD SQL Server ログインを作成してください。

次の例のようなデータ定義言語 (DDL) コマンドを実行して、セルフマネージド AD ドメインサービスアカウントまたはグループへの SQL Server ログインを作成できます。

**注記**  
`my_AD_domain\my_AD_domain_user` の形式で Windows 2000 以前のログイン名を使用して、ユーザーまたはグループを指定します。ユーザープリンシパル名 (UPN) を *`my_AD_domain_user`* `@` *`my_AD_domain`* の形式で使用することはできません。

```
USE [master]
GO
CREATE LOGIN [my_AD_domain\my_AD_domain_user] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

詳細については、Microsoft Developer Network ドキュメントの「[ログインの作成 (Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms189751.aspx)」を参照してください。

ドメインのユーザー (人およびアプリケーション) は、Windows 認証を使用して、セルフマネージド AD ドメインに参加したクライアントマシンから RDS for SQL Server インスタンスに接続できるようになりました。

# セルフマネージド Active Directory ドメイン内の DB インスタンスの管理
<a name="USER_SQLServer_SelfManagedActiveDirectory.Managing"></a>

 コンソール、AWS CLI、または Amazon RDS API を使用して、DB インスタンスおよびセルフマネージド AD ドメインとの関係を管理できます。例えば、DB インスタンスをドメイン内、ドメイン外、またはドメイン間で移動させることができます。

 例えば、Amazon RDS API を使用して次を実行できます。
+ メンバーシップが失敗したためにセルフマネージドドメインへの参加を再試行するには、[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API オペレーションを使用して、同じパラメータセットを指定します。
  + `--domain-fqdn`
  + `--domain-dns-ips`
  + `--domain-ou`
  + `--domain-auth-secret-arn`
+ セルフマネージドドメインから DB インスタンスを削除するには、`ModifyDBInstance` API オペレーションを使用し、ドメインパラメータとして `--disable-domain` を指定します。
+ DB インスタンスを別のセルフマネージドドメインに移動するには、`ModifyDBInstance` API オペレーションを使用し、新しいドメインのドメインパラメータを指定します。
  + `--domain-fqdn`
  + `--domain-dns-ips`
  + `--domain-ou`
  + `--domain-auth-secret-arn`
+ 各 DB インスタンスのセルフマネージド AD ドメインメンバーシップを一覧表示するには、[DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API オペレーションを使用します。

## セルフマネージド Active Directory ドメインメンバーシップについて
<a name="USER_SQLServer_SelfManagedActiveDirectory.Understanding"></a>

AD の詳細を指定しながら DB インスタンスを作成または変更した後、そのインスタンスはセルフマネージド AD ドメインのメンバーになります。AWS コンソールは、DB インスタンスについて、セルフマネージド Active Directory ドメインメンバーシップのステータスを示します。DB インスタンスのステータスは、以下のいずれかです。
+  **joined** – インスタンスは AD ドメインのメンバーです。
+  **Joining** – インスタンスは、AD ドメインのメンバーになる途中です。
+  **pending-join (参加保留中)** – インスタンスのメンバーシップは保留中です。
+  **pending-maintenance-join** – AWS は、次に予定されているメンテナンスウィンドウ中に、インスタンスを AD ドメインのメンバーにできるよう試みます。
+  **pending-removal** – AD ドメインからのインスタンスの削除は保留中です。
+  **pending-maintenance-removal** – AWS は、次に予定されているメンテナンスウィンドウ中に、AD ドメインからのインスタンスの削除を試みます。
+  **failed** – 設定の問題により、インスタンスは AD ドメインに参加できませんでした。インスタンスの変更コマンドを再発行する前に、設定を確認して修正してください。
+  **removing** – インスタンスをセルフマネージド AD ドメインから削除しています。

**重要**  
セルフマネージド AD ドメインのメンバーになるリクエストは、ネットワーク接続の問題が原因で失敗する場合があります。例えば、DB インスタンスを作成したか、既存のインスタンスを変更したが、DB インスタンスをセルフマネージド AD ドメインのメンバーにする試みが失敗することがあります。この場合、コマンドを再発行して DB インスタンスを作成または変更するか、新しく作成されたインスタンスを変更して、セルフマネージド AD ドメインに参加させます。

# セルフマネージド Active Directory のトラブルシューティング
<a name="USER_SQLServer_SelfManagedActiveDirectory.TroubleshootingSelfManagedActiveDirectory"></a>

セルフマネージド AD をセットアップまたは変更する際に発生する可能性のある問題は次のとおりです。


****  

| エラーコード | 説明 | 一般的な原因 | トラブルシューティングの推奨事項 | 
| --- | --- | --- | --- | 
| エラー 2 / 0x2 | 指定されたファイルがシステムで見つかりません。 | `—domain-ou` パラメータで指定された組織単位 (OU) の形式または場所が無効です。AWS Secrets Manager で指定されたドメインサービスアカウントには、OU への参加に必要なアクセス許可がありません。 | `—domain-ou` パラメータを確認してください。ドメインサービスアカウントに OU に対する適切なアクセス許可があることを確認してください。詳細については、「[AD ドメインサービスアカウントの設定](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)」を参照してください。 | 
| エラー 5 / 0x5 | アクセスが拒否されました。 | ドメインサービスアカウントのアクセス許可が正しく設定されていないか、コンピュータアカウントがドメインに既に存在しています。 | ドメイン内のドメインサービスアカウントのアクセス許可を確認し、RDS コンピュータアカウントがドメイン内で重複していないことを確認します。RDS コンピュータアカウントの名前は、RDS for SQL Server DB インスタンスで `SELECT @@SERVERNAME` を実行することで確認できます。マルチ AZ を使用している場合は、フェイルオーバーを使用して再起動し、RDS コンピュータアカウントを再度確認してください。詳細については、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。 | 
| エラー 87 / 0x57 | パラメータが間違っています。 | AWS Secrets Manager で指定されたドメインサービスアカウントには、適切なアクセス許可がありません。ユーザープロファイルが壊れている可能性もあります。 | ドメインサービスアカウントの要件を確認します。詳細については、「[AD ドメインサービスアカウントの設定](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.DomainAccountConfig)」を参照してください。 | 
| エラー 234 / 0xEA | 指定された組織単位 (OU) は存在しません。 | `—domain-ou` パラメータで指定された OU は、セルフマネージド AD に存在しません。 | `—domain-ou` パラメータを確認して、指定した OU がセルフマネージド AD に存在することを確認します。 | 
| エラー 1326 / 0x52E | ユーザー名またはパスワードが正しくありません。 | AWS Secrets Manager で指定されたドメインサービスアカウントの認証情報に、不明なユーザー名または不正なパスワードが含まれています。セルフマネージド AD でドメインアカウントが無効になっている場合もあります。 | AWS Secrets Manager で指定した認証情報が正しく、ドメインアカウントがセルフマネージド AD で有効になっていることを確認します。 | 
| エラー 1355 / 0x54B | 指定されたドメインが存在しないか、接続できませんでした。 | ドメインがダウンしているか、指定された DNS IP セットにアクセスできないか、指定された FQDN にアクセスできません。 | `—domain-dns-ips` および `—domain-fqdn` パラメータが正しいことを確認します。RDS for SQL Server DB インスタンスのネットワーク構成を確認し、セルフマネージド AD にアクセスできることを確認します。詳細については、「[ネットワーク接続の設定](USER_SQLServer_SelfManagedActiveDirectory.Requirements.md#USER_SQLServer_SelfManagedActiveDirectory.Requirements.NetworkConfig)」を参照してください。 | 
| エラー 1772 / 0x6BA | RPC サーバーは使用できません。 | AD ドメインの RPC サービスへのアクセスに問題がありました。これはサービスまたはネットワークの問題かもしれません。 | RPC サービスがドメインコントローラーで実行されていることと、RDS for SQL Server DB インスタンスから TCP ポート `135` および `49152-65535` にアクセスできることを確認します。 | 
|  エラー 1727 / 0x6BF  |  リモートプロシージャ呼び出しが失敗し、実行されませんでした。  |  ネットワーク接続の問題またはファイアウォールの制限により、ドメインコントローラーへの RPC 通信がブロックされます。  |  クロス VPC ドメイン結合を使用する場合は、クロス VPC 通信が VPC ピアリングまたは Transit Gateway のいずれかで正しく設定されていることを確認します。RDS for SQL Server DB インスタンスからドメインで TCP ハイポート `49152-65535` にアクセスできることを確認します。これには、ファイアウォールの潜在的な制限も含まれます。  | 
| エラー 2224 / 0x8B0 | ユーザーアカウントは既に存在しています。 | セルフマネージド AD に追加しようとしているコンピュータアカウントはすでに存在しています。 | RDS for SQL Server DB インスタンスで `SELECT @@SERVERNAME` を実行してコンピュータアカウントを特定し、セルフマネージド AD から慎重に削除します。 | 
| エラー 2242 / 0x8c2 | このユーザーのパスワードは有効期限が切れています。 | AWS Secrets Manager で指定されたドメインサービスアカウントのパスワードは有効期限が切れています。 | RDS for SQL Server DB インスタンスをセルフマネージド AD に参加させるために使用するドメインサービスアカウントのパスワードを更新します。 | 

DB インスタンスをセルフマネージド Active Directory ドメインに結合すると、ドメインの状態に関連する RDS イベントが表示される場合があります。

```
Unhealthy domain state detected while attempt to verify or 
configure your Kerberos endpoint in your domain on 
node node_n. message
```

マルチ AZ インスタンスの場合、node1 と node2 の両方でエラーレポートが表示されることがあります。これは、インスタンスの Kerberos 設定がフェイルオーバーする準備ができていないことを示します。フェイルオーバーが発生した場合、Kerberos を使用した認証で問題が発生する可能性があります。設定の問題を解決して、Kerberos のセットアップが有効で最新の状態であることを確認します。マルチ AZ インスタンスの場合、すべてのネットワークとアクセス許可の設定が整っているため、新しいプライマリホストで Kerberos 認証を使用するためのアクションは必要ありません。

シングル AZ インスタンスの場合、node1 はプライマリノードです。Kerberos 認証が期待どおりに動作しない場合は、インスタンスイベントを確認し、設定の問題を解決して、Kerberos 設定が有効で最新の状態であることを確認します。

## SQL Server DB インスタンスを復元してからセルフマネージド Active Directory ドメインに追加する
<a name="USER_SQLServer_SelfManagedActiveDirectory.Restore"></a>

SQL Server DB インスタンスの DB スナップショットまたはポイントインタイムリカバリ (PITR) を復元して、セルフマネージド Active Directory ドメインに追加できます。DB インスタンスが復元されたら、「[ステップ 1: SQL Server DB インスタンスを作成または変更する](USER_SQLServer_SelfManagedActiveDirectory.Joining.md#USER_SQLServer_SelfManagedActiveDirectory.SettingUp.CreateModify)」で説明している手順に従ってインスタンスを変更し、DB インスタンスをセルフマネージド AD ドメインに追加します。

# RDS for SQL Server による AWS Managed Active Directory の操作
<a name="USER_SQLServerWinAuth"></a>

ユーザーが RDS for SQL Server DB インスタンスに接続する際、AWS Managed Microsoft AD を使用して Windows 認証でユーザーを認証できます。DB インスタンスは、Windows 認証を有効にするために AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD とも呼ばれます) を使用します。ユーザーが、信頼性の高いドメインに接続された SQL Server DB インスタンスを使用して認証を実行すると、Directory Service を使用して作成したドメインディレクトリに認証リクエストが転送されます。

## リージョンとバージョンの可用性
<a name="USER_SQLServerWinAuth.RegionVersionAvailability"></a>

Amazon RDS では、Windows Authentication 向けに AWS Managed Microsoft AD のみの使用をサポートしています。RDS は AD Connector の使用をサポートしていません。詳細については次を参照してください:
+ [ のアプリケーションの互換性ポリシーAWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_app_compatibility.html)
+ [AD Connector のアプリケーションの互換性ポリシー](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ad_connector_app_compatibility.html)

バージョンおよびリージョンの可用性の詳細については、「[RDS for SQL Server を使用したKerberos 認証](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.html#Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.sq)」を参照してください。

## Windows 認証のセットアップの概要
<a name="USER_SQLServerWinAuth.overview"></a>

Amazon RDS は Windows 認証にミックスモードを使用します。この方法では、*マスターユーザー* (SQL Server DB インスタンスの作成に使用された名前とパスワード) が SQL 認証を使用します。マスターユーザーアカウントは特権を持つ認証情報のため、このアカウントへのアクセスを制限する必要があります。

オンプレミスまたはセルフホスト型の Microsoft Active Directory を使用して Windows 認証を取得するには、フォレストの信頼関係を確立します。信頼は、一方向または双方向にすることができます。Directory Service を使用してフォレストの信頼関係を設定する方法の詳細については、*AWS Directory Service 管理ガイド*の「[信頼関係を作成する場合](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_setup_trust.html)」を参照してください。

SQL Server DB インスタンスの Windows 認証を設定するには、次のステップに従います。詳細については、「[SQL Server DB インスタンスの Windows 認証のセットアップ](USER_SQLServerWinAuth.SettingUp.md)」を参照してください。

1. AWS Managed Microsoft AD または AWS マネジメントコンソール API のいずれかから Directory Service を使用して、AWS Managed Microsoft AD ディレクトリを作成します。

1. AWS CLI または Amazon RDS API を使用してSQL Server DB インスタンスを作成する場合は、AWS Identity and Access Management (IAM) ロールを作成します。このロールはマネージド IAM ポリシー `AmazonRDSDirectoryServiceAccess` を使用し、Amazon RDS によるディレクトリへの呼び出しを許可します。SQL Server DB インスタンスの作成にコンソールを使用している場合、AWS は IAM ロールを作成します。

   ロールによるアクセスを許可するには、AWS Security Token Service (AWS STS) エンドポイントを AWS アカウントの AWS リージョンでアクティベートする必要があります。AWS STS エンドポイントはすべての AWS リージョンでデフォルトでアクティブになっているため、他のアクションを実行することなくエンドポイントを使用することができます。詳細については、*IAM ユーザーガイド*の 「[AWS リージョン での AWS STS の管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)」を参照してください。

1. Microsoft Active Directory のツールを使用して、AWS Managed Microsoft AD ディレクトリでユーザーとグループを作成して設定します。Active Directory にユーザーおよびグループを作成する方法の詳細については、*AWS Directory Service 管理ガイド*の「[AWS Managed Microsoft AD でユーザーとグループを管理する](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)」を参照してください。

1. ディレクトリと DB インスタンスを異なる VPC に配置する場合は、クロス VPC トラフィックを有効にします。

1. Amazon RDS を使用して、コンソール、AWS CLI、または Amazon RDS API のいずれかから、新しい SQL Server DB インスタンスを作成します。作成リクエストで、ディレクトリの作成時に生成されたドメイン識別子 (「`d-*`」識別子) と、作成したロールの名称を指定します。DB インスタンスのドメインおよび IAM ロールパラメータを設定して、既存の SQL Server DB インスタンスを Windows 認証を使用するように変更することもできます。

1. Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように SQL Server DB インスタンスに接続します。DB インスタンスは AWS Managed Microsoft AD ドメインに参加しているため、ドメイン内の Active Directory ユーザーとグループから SQL Server のログインとユーザーをプロビジョニングできます (これらは、SQL Server の「Windows」ログインとして知られています)。データベースへのアクセス許可は、これらの Windows ログインに付与され無効化されている標準の SQL サーバーのアクセス許可によって管理されています。

Amazon RDS コンソールを使用してドメイン接続された RDS for SQL Server DB インスタンスを作成すると、AWS は自動的に `rds-directoryservice-access-role` IAM ロールを作成します。このロールは、ドメイン接続されたインスタンスを管理するために不可欠であり、以下の操作に必要です。
+ ドメイン接続された SQL Server インスタンスの設定変更
+ Active Directory 統合設定の管理
+ ドメイン結合インスタンスでのメンテナンス操作の実行

**重要**  
`rds-directoryservice-access-role` IAM ロールを削除すると、Amazon RDS コンソールまたは API を使用してドメイン接続された SQL Server インスタンスを変更することはできません。インスタンスを変更しようとすると、次のエラーメッセージが表示されます。You don't have permission to iam:CreateRole. To request access, copy the following text and send it to your AWS administrator.  
このエラーは、Amazon RDS がドメイン接続を管理するためにロールを再作成する必要があるが、必要なアクセス許可がないために発生します。さらに、このエラーは CloudTrail に記録されないため、トラブルシューティングがより困難になる可能性があります。

誤って `rds-directoryservice-access-role` を削除した場合、ドメインに接続された SQL Server インスタンスに変更を加える前に、再作成するための `iam:CreateRole` アクセス許可が必要です。ロールを手動で再作成するには、ロールに `AmazonRDSDirectoryServiceAccess` 管理ポリシーがアタッチされ、RDS サービスがロールを引き受けることを許可する適切な信頼関係があることを確認します。

# Kerberos 認証のエンドポイントの作成
<a name="USER_SQLServerWinAuth.KerberosEndpoint"></a>

Kerberos に基づく認証では、エンドポイントは「お客様が指定したホスト名、ピリオド、省略なしのドメイン名 (FQDN)」の形式である必要があります。次の例は、Kerberos に基づく認証で使用できるエンドポイントの例です。この例では、SQL Server DB インスタンスのホスト名は `ad-test`、ドメイン名は `corp-ad.company.com` です。

```
ad-test.corp-ad.company.com
```

接続で Kerberos が使用されていることを確認するには、次のクエリを実行します。

```
1. SELECT net_transport, auth_scheme 
2.   FROM sys.dm_exec_connections 
3.  WHERE session_id = @@SPID;
```

# SQL Server DB インスタンスの Windows 認証のセットアップ
<a name="USER_SQLServerWinAuth.SettingUp"></a>

SQL Server DB インスタンスの Windows 認証をセットアップするには、AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD とも呼ばれます) を使用します。Windows 認証を設定するには、次の手順を実行します。

## ステップ 1: AWS Directory Service for Microsoft Active Directory を使用してディレクトリを作成する
<a name="USER_SQLServerWinAuth.SettingUp.CreateDirectory"></a>

Directory Service は完全マネージド型の Microsoft Active Directory を AWS クラウドに作成します。AWS Managed Microsoft AD ディレクトリを作成すると、Directory Service がユーザーに代わって 2 つのドメインコントローラーと 2 つのドメインネームサービス (DNS) サーバーを作成します。ディレクトリサーバーは、 VPC 内の 2 つの異なるアベイラビリティーゾーンの 2 つのサブネットで作成されています。この冗長性により、障害が発生してもディレクトリがアクセスできるようになります。

 AWS Managed Microsoft AD ディレクトリを作成すると、Directory Service がユーザーに代わって自動的に以下のタスクを実行します。
+ VPC 内に Microsoft Active Directory を設定します。
+ 「Admin」のユーザー名と指定されたパスワードを使用して、ディレクトリ管理者アカウントを作成します。このアカウントはディレクトリの管理に使用します。
+ ディレクトリコントローラー用のセキュリティグループを作成する。

AWS Directory Service for Microsoft Active Directory を立ち上げると、AWS は組織単位 (OU) を作成します。OU にはディレクトリのオブジェクトがすべて含まれています。この OU はドメインルートにあります。OU にはディレクトリを作成する際に入力した NetBIOS 名があります。ドメインルートは AWS が所有し、管理します。

 AWS Managed Microsoft AD ディレクトリに作成された*管理者*アカウントには、次のような、OU で最も一般的な管理業務用のアクセス権限があります。
+ ユーザー、グループ、およびコンピュータを作成、更新、または削除する 
+ ファイルやプリントサーバーなどのドメインにリソースを追加して、追加したリソースへのアクセス許可を OU のユーザーとグループに割り当てる。
+ 追加の OU やコンテナを作成する。
+ 権限を委譲する。
+ グループポリシーを作成し、リンクする。
+ 削除されたオブジェクトを Active Directory のごみ箱から元に戻す。
+ Active Directory Web Service で AD と DNS Windows PowerShell モジュールを実行する。

管理者アカウントには、ドメイン全体に関係するアクティビティを実行する権限もあります。
+ DNS 設定 (レコード、ゾーン、フォワーダーの追加、削除、または更新) を管理する。
+ DNS イベントログを参照する。
+ セキュリティイベントログを参照する。

**AWS Managed Microsoft AD でディレクトリを作成するには**

1. [Directory Service コンソール](https://console.aws.amazon.com/directoryservicev2/)のナビゲーションペインで、[**ディレクトリ**]、[**ディレクトリの設定**] の順に選択します。

1. を選択します。。**AWS Managed Microsoft AD**これは Amazon RDS 用に現在サポートされている唯一のオプションです。

1. [**Next (次へ)**] を選択します。

1. [**ディレクトリ情報の入力**] ページに、以下の情報を指定します。  
**エディション**  
 目的の要件を満たすエディションを選択します。  
**ディレクトリの DNS 名**  
ディレクトリの完全修飾名。例: `corp.example.com`。47 文字を超える名前は SQL Server でサポートされていません。  
**ディレクトリの NetBIOS 名**  
ディレクトリの短縮名 (例: `CORP`)。  
**ディレクトリの説明**  
必要に応じて、ディレクトリの説明。  
**Admin パスワード**  
ディレクトリ管理者のパスワードです。ディレクトリの作成プロセスでは、ユーザー名「Admin」とこのパスワードを使用して管理者アカウントが作成されます。  
ディレクトリ管理者のパスワードに「`admin`」の単語を含めることはできません。パスワードは大文字と小文字を区別し、8–64 文字にします。また、以下の 4 つのカテゴリうち 3 つから少なくとも 1 文字を含める必要があります。  
   + 小文字 (a〜z)
   + 大文字 A〜Z
   + 数字 (0〜9)
   + アルファベットと数字以外の文字 (\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**パスワードを確認**  
管理者のパスワードをもう一度入力します。

1. [**Next (次へ)**] を選択します。

1. [**VPC とサブネットの選択**] ページで、以下の情報を指定します。  
**VPC**  
ディレクトリ用の VPC を選択します。  
ディレクトリと DB インスタンスは異なる VPC に配置できますが、その場合、必ずクロス VPC トラフィックを有効にしてください。詳細については、「[ステップ 4: ディレクトリと DB インスタンス間のクロス VPC トラフィックを有効にする](#USER_SQLServerWinAuth.SettingUp.VPC-Peering)」を参照してください。  
**Subnets**  
ディレクトリサーバーのサブネットを選択します。2 つのサブネットは、異なるアベイラビリティーゾーンに存在している必要があります。

1. [**Next (次へ)**] を選択します。

1. ディレクトリの情報を確認します。変更が必要な場合は、[**Previous**] を選択します。情報が正しい場合は、[**Create directory (ディレクトリの作成)**] を選択します。  
![\[「確認と作成」ページ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

ディレクトリが作成されるまで、数分かかります。正常に作成されると、[**Status**] 値が [**Active**] に変わります。

ディレクトリに関する情報を表示するには、ディレクトリの一覧で、そのディレクトリを選択します。**ディレクトリ ID** を書き留めます。この値は、SQL Server DB インスタンスを作成または変更するときに必要になります。

![\[ディレクトリの詳細ページ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


## ステップ 2: Amazon RDS 用の IAM ロールを作成する
<a name="USER_SQLServerWinAuth.SettingUp.CreateIAMRole"></a>

コンソールを使用して SQL Server DB インスタンスを作成する場合、このステップをスキップできます。SQL Server DB インスタンスの作成に CLI または RDS API を使用する場合、`AmazonRDSDirectoryServiceAccess` マネージド IAM ポリシーを使用する IAM ロールを作成する必要があります。このロールを使用すると、Amazon RDS で Directory Service への呼び出しを行うことができます。

AWS 管理 `AmazonRDSDirectoryServiceAccess` ポリシーではなく、ドメインを結合するためのカスタムポリシーを使用する場合は、`ds:GetAuthorizedApplicationDetails` アクションを許可する必要があります。Directory Service API の変更により、この要件は、2019 年 7 月から有効となります。

次の IAM ポリシー `AmazonRDSDirectoryServiceAccess` は、Directory Service へのアクセスを提供します。

**Example Directory Service へのアクセスを提供する IAM ポリシー**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
            "ds:DescribeDirectories", 
            "ds:AuthorizeApplication", 
            "ds:UnauthorizeApplication",
            "ds:GetAuthorizedApplicationDetails"
        ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

リソースベースの信頼関係では [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)に対する最も効果的な保護方法です。

両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合は、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
+ 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
+ そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

信頼関係では、`aws:SourceArn` グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。Windows 認証の場合、次の例に示すように DB インスタンスを含めてください。

**Example Windows 認証のグローバル条件コンテキストキーとの信頼関係**    
****  

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

この IAM ポリシーと信頼関係を使用して IAM ロールを作成します。IAM ロールの作成の詳細については、*IAM ユーザーガイド*の「[カスタマー管理ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console)」を参照してください。

## ステップ 3: ユーザーとグループを作成して設定する
<a name="USER_SQLServerWinAuth.SettingUp.CreateUsers"></a>

Active Directory ユーザーとコンピューターツールを使用して、ユーザーとグループを作成できます。このツールは、Active Directory Domain Services ツールおよび Active Directory Lightweight Directory Services ツールの 1 つです。ユーザーは、ディレクトリにアクセスできる個別の人またはエンティティを表します。グループは、個別のユーザーごとに権限を付与するのではなく、ユーザーのグループに権限を付与または拒否するために非常に便利です。

Directory Service ディレクトリにユーザーとグループを作成するには、Directory Service ディレクトリのメンバーである Windows EC2 インスタンスに接続する必要があります。また、ユーザーとグループを作成する権限を持つユーザーとしてログインしている必要があります。詳細については、*AWS Directory Service 管理ガイド*の「[ユーザーとグループを追加する (Simple AD および AWS Managed Microsoft AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/creating_ad_users_and_groups.html)」を参照してください。

## ステップ 4: ディレクトリと DB インスタンス間のクロス VPC トラフィックを有効にする
<a name="USER_SQLServerWinAuth.SettingUp.VPC-Peering"></a>

同じ VPC 内にディレクトリおよび DB インスタンスを配置する場合は、このステップをスキップして [ステップ 5: SQL Server DB インスタンスを作成または変更する](#USER_SQLServerWinAuth.SettingUp.CreateModify) に進みます。

ディレクトリと DB インスタンスを別の VPC に配置する場合は、VPC ピア接続または [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) を使用してクロス VPC トラフィックを設定します。

次の手順では、VPC ピア接続を使用して VPC 間のトラフィックを有効にします。*Amazon Virtual Private Cloud ピアリング接続ガイド*の「[VPC ピア機能とは](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)」の手順に従います。

**VPC ピア接続を使用してクロス VPC トラフィックを有効にするには**

1. 適切な VPC ルーティングを設定し、ネットワークトラフィックが双方向にフローするようにします。

1. DB インスタンスのセキュリティグループが、ディレクトリのセキュリティグループからのインバウンドトラフィックを受信できることを確認します。

1. トラフィックをブロックするネットワークのアクセスコントロールリスト (ACL) ルールがないことを確認します。

別の AWS アカウントがディレクトリを所有している場合は、ディレクトリを共有する必要があります。

**AWS アカウント間でディレクトリを共有するには**

1. DB インスタンスを作成する AWS アカウントとの間でディレクトリの共有を開始するには、*AWS Managed Microsoft AD 管理ガイド*の「[チュートリアル: Directory Service ディレクトリを共有して、シームレスに EC2 ドメインを結合する](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html)」の手順を実行します。

1. DB インスタンスのアカウントを使用して、Directory Service コンソールにサインインし、続行する前にドメインが必ず `SHARED` ステータスであることを確認します。

1. DB インスタンスのアカウントを使用して Directory Service コンソールにサインインしている間に、[**ディレクトリ ID**] の値を書き留めておきます。このディレクトリ ID は、DB インスタンスをドメインに結合するために使用します。

## ステップ 5: SQL Server DB インスタンスを作成または変更する
<a name="USER_SQLServerWinAuth.SettingUp.CreateModify"></a>

ディレクトリで使用する SQL Server DB インスタンスを作成または変更します。コンソール、CLI、RDS API を使用して DB インスタンスとディレクトリを関連付けることができます。これには以下の 2 つの方法があります。
+ コンソール、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI コマンド、または [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API オペレーションを使用して、新しい SQL Server DB インスタンスを作成します。

  手順については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ コンソール、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI コマンド、または [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API オペレーションを使用して、既存の SQL Server DB インスタンスを変更します。

  手順については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
+ コンソール、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI コマンド、または [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API オペレーションを使用して、DB スナップショットから SQL Server DB インスタンスを復元します。

  手順については、「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。
+ コンソール、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI コマンド、または [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API オペレーションを使用して、SQL Server DB インスタンスをポイントインタイムに復元します。

  手順については、「[Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)」を参照してください。

 Windows 認証は、VPC 内の SQL Server DB インスタンスにのみサポートされています。

 DB インスタンスが、作成したドメインディレクトリを使用できるようにするには、次が必要です。
+  [**ディレクトリ**] では、ディレクトリの作成時に生成されたドメイン識別子 (`d-ID`) を選択する必要があります。
+  VPC セキュリティグループに、ディレクトリとの通信を DB インスタンスに許可するアウトバウンドルールがあることを確認します。

![\[Microsoft SQL Server の Windows 認証ディレクトリ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/WinAuth1.png)


AWS CLI を使用する場合は、DB インスタンスが、作成したディレクトリを使用できるように、以下のパラメータが必要です。
+ `--domain` パラメータには、ディレクトリの作成時に生成されたドメイン識別子 (`d-ID`) を使用します。
+ `--domain-iam-role-name` パラメータには、マネージド IAM ポリシー `AmazonRDSDirectoryServiceAccess` を使用する作成済みのロールを使用します。

例えば、以下の CLI コマンドはディレクトリを使用するように DB インスタンスを変更します。

Linux、macOS、Unix の場合:

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --domain d-ID \
    --domain-iam-role-name role-name
```

Windows の場合:

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --domain d-ID ^
    --domain-iam-role-name role-name
```

**重要**  
Kerberos 認証を有効化するために DB インスタンスを変更する場合、変更後 DB インスタンスを再起動します。

## ステップ 6: Windows 認証の SQL Server ログインを作成する
<a name="USER_SQLServerWinAuth.CreateLogins"></a>

Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同じように SQL Server DB インスタンスに接続します。DB インスタンスは AWS Managed Microsoft AD ドメインに参加しているため、SQL Server のログインとユーザーをプロビジョニングできます。これは、ドメイン内の Active Directory のユーザーとグループから行われます。データベースへのアクセス許可は、これらの Windows ログインに付与され無効化されている標準の SQL サーバーのアクセス許可によって管理されています。

Active Directory のユーザーが SQL Server で認証するには、ユーザー、またはそのユーザーがメンバーとして含まれているグループに、SQL Server の Windows ログインが存在する必要があります。これらの SQL Server ログインでアクセスを許可したり取り消したりして、細分化されたアクセスコントロールを処理します。SQL Server ログインを持たないユーザー、またはそのようなログインを持つグループに属さないユーザーは、SQL Server DB インスタンスにアクセスできません。

Active Directory の SQL Server ログインを作成するには、ALTER ANY LOGIN 許可が必要です。このアクセス許可を持つログインをまだ作成していない場合は、SQL Server 認証を使用して DB インスタンスのマスターユーザーとして接続します。

次の例のようなデータ定義言語 (DDL) コマンドを実行して、Active Directory ユーザーまたはグループへの SQL Server ログインを作成します。

**注記**  
`domainName\login_name` の形式で Windows 2000 以前のログイン名を使用して、ユーザーまたはグループを指定します。ユーザープリンシパル名 (UPN) を *`login_name`* `@` *`DomainName`* の形式で使用することはできません。  
T-SQL ステートメントを使用することによってのみ、RDS for SQL Server インスタンスで Windows 認証ログインを作成することができます。SQL Server Management Studio を使用して Windows 認証ログインを作成することはできません。

```
USE [master]
GO
CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];
GO
```

詳細については、Microsoft Developer Network ドキュメントの「[ログインの作成 (Transact-SQL)](https://msdn.microsoft.com/en-us/library/ms189751.aspx)」を参照してください。

ドメインのユーザー (人およびアプリケーション) が Windows 認証を使用して、クライアントマシンを結合したドメインから RDS for SQL Server インスタンスに接続できるようになりました。

# ドメインの DB インスタンスの管理
<a name="USER_SQLServerWinAuth.Managing"></a>

 コンソール、AWS CLI、または Amazon RDS API を使用して、DB インスタンスおよびドメインとの関係を管理できます。例えば、DB インスタンスをドメイン内、ドメイン外、またはドメイン間で移動させることができます。

 例えば、Amazon RDS API を使用して次を実行できます。
+  失敗したメンバーシップのドメイン参加を再試行するには、[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API オペレーションを使用して、現在のメンバーシップのディレクトリ ID を指定します。
+  メンバーシップの IAM ロール名を更新するには、`ModifyDBInstance` API オペレーションを使用し、現在のメンバーシップのディレクトリ ID と新しい IAM ロールを指定します。
+  ドメインから DB インスタンスを削除するには、`ModifyDBInstance` API オペレーションを使用し、ドメインパラメータとして `none` を指定します。
+  ドメイン間で DB インスタンスを移動するには、`ModifyDBInstance` API オペレーションを使用し、新しいドメインのドメイン識別子をドメインパラメータとして指定します。
+  各 DB インスタンスのメンバーシップを一覧表示するには、[DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/DescribeDBInstances.html) API オペレーションを使用します。

## ドメインのメンバーシップを理解する
<a name="USER_SQLServerWinAuth.Understanding"></a>

 DB インスタンスを作成または変更した後、そのインスタンスは、ドメインのメンバーになります。AWS コンソールは、DB インスタンスのドメインメンバーシップのステータスを示します。DB インスタンスのステータスは、以下のいずれかです。
+  **joined (参加済み)** – インスタンスはドメインのメンバーになっています。
+  **joining (参加中)** – インスタンスは、ドメインのメンバーになる途中です。
+  **pending-join (参加保留中)** – インスタンスのメンバーシップは保留中です。
+  **メンテナンスまで参加保留中** – 次に予定されているメンテナンスウィンドウ中に、AWS がインスタンスをドメインのメンバーにできるよう試みます。
+  **pending-removal (削除保留中)** – ドメインからのインスタンス削除は保留中です。
+  **メンテナンスまで削除保留中** – 次に予定されているメンテナンスウィンドウ中に、AWS がドメインからのインスタンスの削除を試みます。
+  **failed (失敗)** – 設定の問題により、インスタンスはドメインに参加できませんでした。インスタンスの変更コマンドを再発行する前に、設定を確認して修正してください。
+  **removing (削除中)** – インスタンスをドメインから削除しています。

ドメインのメンバーになるリクエストは、ネットワーク接続の問題や正しくない IAM ロールが原因で失敗する場合があります。例えば、DB インスタンスを作成した、または既存のインスタンスを変更したが、DB インスタンスをドメインに参加させられない場合があります。この場合、コマンドを再発行して DB インスタンスを作成または変更するか、新しく作成されたインスタンスを変更してドメインに参加させます。

# Windows 認証を使用して SQL Server に接続する
<a name="USER_SQLServerWinAuth.Connecting"></a>

Windows 認証を使用して SQL Server に接続するには、ドメインのユーザーとしてドメイン結合されたコンピュータにログインしている必要があります。SQL Server Management Studio の起動後、認証タイプとして **Windows 認証**を選択します (以下参照)。

![\[Windows 認証を使用して SQL Server に接続\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/WinAuth4.png)


## SQL Server DB インスタンスを復元してドメインに追加する
<a name="USER_SQLServerWinAuth.Restore"></a>

SQL Server DB インスタンスの DB スナップショットまたはポイントインタイムリカバリ (PITR) を復元し、ドメインに追加できます。DB インスタンスが復元されたら、「[ステップ 5: SQL Server DB インスタンスを作成または変更する](USER_SQLServerWinAuth.SettingUp.md#USER_SQLServerWinAuth.SettingUp.CreateModify)」で説明している手順に従ってインスタンスを変更し、DB インスタンスをドメインに追加します。

# 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 インスタンスも自動的にサポートされているバージョンにアップグレードされます。

# RDS for SQL Server のストレージの使用
<a name="Appendix.SQLServer.CommonDBATasks.DatabaseStorage"></a>

RDS for SQL Server では、RDS for SQL Server インスタンスに最大 3 つの追加ボリュームをアタッチでき、それぞれが一意の Windows ドライブ文字にマッピングされます。これにより、データベースファイルをデフォルトの `D:` ドライブ以外の複数のボリュームに分散できます。ストレージボリュームを追加すると、データベースファイル管理とストレージ最適化の柔軟性が向上します。

その他の利点には以下が含まれます。
+ **柔軟なファイル配布** – データベースデータファイルとログファイルを複数のボリュームに分散して、I/O パフォーマンスを向上させます。
+ **ストレージの最適化** – ワークロード要件に応じて異なるストレージタイプと設定を使用します。
+ **スケーラビリティ** – 既存のボリュームを変更せずにストレージ容量を追加します。

**Topics**
+ [RDS for SQL Server で追加のストレージボリュームを使用する際の考慮事項](#SQLServer.ASV.Considerations)
+ [RDS for SQL Server を使用してストレージボリュームを追加、削除、または変更する](#SQLServer.ASV.Management)
+ [RDS for SQL Server を使用した追加のストレージボリュームの復元オペレーション](#SQLServer.ASV.Restore)
+ [RDS for SQL Server を使用した追加のストレージボリュームのユースケース](#SQLServer.ASV.UseCases)

## RDS for SQL Server で追加のストレージボリュームを使用する際の考慮事項
<a name="SQLServer.ASV.Considerations"></a>

RDS for SQL Server で追加のストレージボリュームを使用する場合は、次の機能と制限に注意してください。
+ SQL Server Standard Edition (SE)、Enterprise Edition (EE)、および Developer Edition (DEV-EE) でのみストレージボリュームを追加できます。
+ インスタンスごとに最大 3 つのストレージボリュームを追加できます。
+ ボリューム名は、次のように Windows ドライブ文字に自動的にマッピングされます。
  + `rdsdbdata2` – `H:` ドライブ
  + `rdsdbdata3` – `I:` ドライブ
  + `rdsdbdata4` – `J:` ドライブ
+ TempDB ファイルは、NVMe インスタンスストレージを使用するときに引き続き `T:` ドライブを使用します。SQL Server 監査ファイルと Microsoft Business Intelligence (MSBI) ファイルは `D:` ドライブに残ります。
+ 汎用 SSD (gp3) およびプロビジョンド IOPS SSD (io2) ストレージタイプのみを追加できます。
+ 追加のストレージボリュームの最小ストレージサイズは、デフォルトの `D:` ドライブに設定されている制限と同じです。DB インスタンスの最大ストレージサイズは、すべてのボリュームで合計 256 TiB です。
+ リードレプリカを持つインスタンスまたはリードレプリカインスタンスへのストレージボリュームの追加はサポートされていません。
+ クロスリージョン自動バックアップが有効になっているインスタンスへのストレージボリュームの追加はサポートされていません。
+ ストレージの自動スケーリング用の追加ストレージボリュームの設定はサポートされていません。
+ 作成後のボリューム間のファイルの移動はサポートされていません。
+ `D:` ボリュームを削除することはできませんが、空である限り、他のストレージボリュームを削除することはできます。
+ スナップショット復元またはポイントインタイムリカバリ (PITR) 中の既存のボリュームのサイズの変更はサポートされていません。ただし、復元オペレーション中に新しいストレージボリュームを追加できます。

## RDS for SQL Server を使用してストレージボリュームを追加、削除、または変更する
<a name="SQLServer.ASV.Management"></a>

AWS CLI または AWS マネジメントコンソールを使用して、追加のストレージボリュームを追加、変更、削除できます。すべてのオペレーションは、`additional-storage-volumes` パラメータで `modify-db-instance` API オペレーションを使用します。

**重要**  
ストレージボリュームを追加または削除すると、バックアップ保留中のアクションとポイントインタイムリストアブラックアウトウィンドウが作成されます。このウィンドウは、バックアップワークフローが完了すると閉じます。

**Topics**
+ [ストレージボリュームの追加](#SQLServer.ASV.Adding)
+ [追加ストレージボリュームのスケーリング](#SQLServer.ASV.Scaling)
+ [追加ストレージボリュームの削除](#SQLServer.ASV.Removing)

### ストレージボリュームの追加
<a name="SQLServer.ASV.Adding"></a>

デフォルトの `D:` ドライブ以外に最大 3 つのストレージボリュームを追加できます。RDS for SQL Server インスタンスに新しいストレージボリュームを追加するには、`additional-storage-volumes` パラメータを指定して `modify-db-instance` コマンドを使用します。

次の例では、`rdsdbdata4` という名前の新しい 4,000 GiB 汎用 SSD (gp3) ボリュームを追加します。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":4000}]' \
  --apply-immediately
```

### 追加ストレージボリュームのスケーリング
<a name="SQLServer.ASV.Scaling"></a>

ストレージサイズを除き、追加ボリュームの任意のストレージ設定を変更できます。次の例では、`rdsdbdata2` ボリュームの IOPS 設定を変更します。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":4000}]' \
  --apply-immediately
```

### 追加ストレージボリュームの削除
<a name="SQLServer.ASV.Removing"></a>

`D:` ボリュームは削除できませんが、空になった他のストレージボリュームは削除できます。

**警告**  
追加のストレージボリュームを削除する前に、データベースファイルがボリュームに保存されていないことを確認してください。

次の例では、`rdsdbdata4` ボリュームを削除しています。

```
aws rds modify-db-instance \
  --db-instance-identifier my-sql-server-instance \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","SetForDelete":true}]' \
  --apply-immediately
```

## RDS for SQL Server を使用した追加のストレージボリュームの復元オペレーション
<a name="SQLServer.ASV.Restore"></a>

データベースを復元するときに、ストレージボリュームを追加できます。既存のボリュームのストレージ設定を変更することもできます。

**Topics**
+ [スナップショット復元](#SQLServer.ASV.SnapshotRestore)
+ [ポイントインタイムリカバリ](#SQLServer.ASV.PITR)
+ [ネイティブデータベースの復元](#SQLServer.ASV.NativeRestore)

### スナップショット復元
<a name="SQLServer.ASV.SnapshotRestore"></a>

スナップショットから復元する場合、新しいストレージボリュームを追加したり、既存のボリュームの IOPS、スループット、ストレージタイプの設定を変更したりできます。

次の例では、スナップショットから DB インスタンスを復元し、`rdsdbdata2` ボリュームの IOPS 設定を変更します。

```
aws rds restore-db-instance-from-db-snapshot \
  --db-instance-identifier my-restored-instance \
  --db-snapshot-identifier my-snapshot \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata2","IOPS":5000}]'
```

### ポイントインタイムリカバリ
<a name="SQLServer.ASV.PITR"></a>

ポイントインタイムリカバリ (PITR) 中に、カスタム設定で新しいストレージボリュームを追加できます。

次の例では、PITR を実行し、新しい 5,000 GiB の汎用 SSD (gp3) ボリュームを追加します。

```
aws rds restore-db-instance-to-point-in-time \
  --source-db-instance-identifier my-source-instance \
  --target-db-instance my-pitr-instance \
  --use-latest-restorable-time \
  --region us-east-1 \
  --additional-storage-volumes '[{"VolumeName":"rdsdbdata4","StorageType":"gp3","AllocatedStorage":5000,"IOPS":5000,"StorageThroughput":200}]'
```

### ネイティブデータベースの復元
<a name="SQLServer.ASV.NativeRestore"></a>

`rds_restore_database` ストアドプロシージャを使用して、特定の追加のストレージボリュームにデータベースを復元できます。2 つの新しいパラメータがボリューム選択をサポートします。

**`data_file_volume`**  
データベースデータファイルのドライブ文字を指定します。

**`log_file_volume`**  
データベースログファイルのドライブ文字を指定します。

次の例では、`H:` ドライブ上のデータファイルと `I:` ドライブ上のログファイルを含むデータベースを復元します。

```
EXEC msdb.dbo.rds_restore_database    
    @restore_db_name='my_database',
    @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak',
    @data_file_volume='H:',
    @log_file_volume='I:';
```

ボリュームパラメータを指定しない場合、または両方のパラメータに `D:` ドライブを指定した場合、データベースファイルはデフォルトの `D:` ドライブに復元されます。

```
EXEC msdb.dbo.rds_restore_database    
    @restore_db_name='my_database',
    @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/backup-file.bak';
```

## RDS for SQL Server を使用した追加のストレージボリュームのユースケース
<a name="SQLServer.ASV.UseCases"></a>

追加のストレージボリュームは、さまざまなデータベース管理シナリオをサポートします。以下のセクションでは、一般的なユースケースと実装アプローチについて説明します。

**Topics**
+ [追加のストレージボリュームでのデータベースの作成](#SQLServer.ASV.NewDatabase)
+ [ストレージ容量の拡張](#SQLServer.ASV.ExtendStorage)
+ [ボリューム間のデータベースの移動](#SQLServer.ASV.MoveDatabase)
+ [コスト効率の高いストレージへのデータのアーカイブ](#SQLServer.ASV.ArchiveData)

### 追加のストレージボリュームでのデータベースの作成
<a name="SQLServer.ASV.NewDatabase"></a>

標準の SQL Server `CREATE DATABASE` ステートメントを使用して、追加のストレージボリュームで新しいデータベースを直接作成できます。

次の例では、`H:` ドライブにデータファイル、`I:` ドライブにログファイルを含むデータベースを作成します。

```
CREATE DATABASE MyDatabase
ON (
    NAME = 'MyDatabase_Data',
    FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data.mdf',
    SIZE = 100MB,
    FILEGROWTH = 10MB
)
LOG ON (
    NAME = 'MyDatabase_Log',
    FILENAME = 'I:\rdsdbdata\data\MyDatabase_Log.ldf',
    SIZE = 10MB,
    FILEGROWTH = 10%
);
```

### ストレージ容量の拡張
<a name="SQLServer.ASV.ExtendStorage"></a>

デフォルトの `D:` ドライブが最大容量に達したら、ストレージボリュームを追加し、既存のボリュームをスケールして、新しいボリュームに新しいデータファイルまたはログファイルを作成できます。

**ストレージ容量を拡張するには**

1. `modify-db-instance` コマンドを使用して、インスタンスにストレージボリュームを追加します。

1. 追加のストレージボリュームに新しいデータファイルを追加します。

   ```
   ALTER DATABASE MyDatabase
   ADD FILE (
       NAME = 'MyDatabase_Data2',
       FILENAME = 'H:\rdsdbdata\data\MyDatabase_Data2.ndf',
       SIZE = 500MB,
       FILEGROWTH = 50MB
   );
   ```

### ボリューム間のデータベースの移動
<a name="SQLServer.ASV.MoveDatabase"></a>

データベースを別のボリュームに移動するには、`rds_backup_database` および `rds_restore_database` ストアドプロシージャでバックアップと復元の方法を使用します。詳細については、「[ネイティブバックアップおよび復元の使用](SQLServer.Procedural.Importing.Native.Using.md)」を参照してください。

**データベースを別のボリュームに移動するには**

1. `rds_backup_database` を使用してデータベースをバックアップします。

   ```
   EXEC msdb.dbo.rds_backup_database 
       @source_db_name='MyDatabase',
       @s3_arn_to_backup_to='arn:aws:s3:::my-bucket/database-backup.bak';
   ```

1. データベースをターゲットボリュームに復元します。

   ```
   EXEC msdb.dbo.rds_restore_database    
       @restore_db_name='MyDatabase_New',
       @s3_arn_to_restore_from='arn:aws:s3:::my-bucket/database-backup.bak',
       @data_file_volume='H:',
       @log_file_volume='I:';
   ```

1. 古いドライブからデータベースを削除して、スペースを解放します。詳細については、「[Amazon RDS for Microsoft SQL Server DB インスタンスのデータベースの削除](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)」を参照してください。

### コスト効率の高いストレージへのデータのアーカイブ
<a name="SQLServer.ASV.ArchiveData"></a>

パーティション化されたテーブルの場合、古いデータを異なるパフォーマンス特性を持つ追加のストレージボリュームにアーカイブできます。

**パーティション化されたデータをアーカイブするには**

1. 適切なストレージタイプと容量を持つストレージボリュームを追加します。

1. 追加のストレージボリュームに新しいファイルグループを作成します。

   ```
   ALTER DATABASE MyDatabase
   ADD FILEGROUP ArchiveFileGroup;
   
   ALTER DATABASE MyDatabase
   ADD FILE (
       NAME = 'Archive_Data',
       FILENAME = 'H:\rdsdbdata\data\Archive_Data.ndf',
       SIZE = 1GB,
       FILEGROWTH = 100MB
   ) TO FILEGROUP ArchiveFileGroup;
   ```

1. SQL Server パーティション管理コマンドを使用して、パーティションを新しいファイルグループに移動します。

# ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート
<a name="SQLServer.Procedural.Importing"></a>

Amazon RDS では、完全バックアップファイル (.bak ファイル) を使用した Microsoft SQL Server データベースのネイティブバックアップおよび復元がサポートされています。RDS を使用すると、データベースサーバー上のローカルファイルシステムを使用せずに Amazon S3 に格納されているファイルにアクセスします。

例えば、ローカルサーバーから完全バックアップを作成し、それを S3 に保存してから、既存の Amazon RDS DB インスタンスに復元することができます。RDS からバックアップを作成して S3 に保存することで、どこへでも復元することが可能となります。

ネイティブバックアップと復元は、すべての AWS リージョンで、シングル AZ DB インスタンスおよびマルチ AZ DB インスタンス (リードレプリカを持つマルチ AZ DB インスタンスを含む) に対して使用できます。ネイティブバックアップおよび復元は、Amazon RDS でサポートされているすべてのエディションの Microsoft SQL Server で使用できます。

次の図は、サポートされるシナリオを示しています。

![\[ネイティブバックアップおよび復元アーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQL-bak-file.png)


ネイティブの .bak ファイルを使用したデータベースのバックアップと復元は、通常は、最も素早いデータベースのバックアップと復元を実現します。ネイティブバックアップおよび復元を使用することには、他にも多くの利点があります。例えば、次の操作を実行できます。
+ Amazon RDS との間でデータベースを移行できます。
+ RDS for SQL Server DB インスタンス間でデータベースを移動します。
+ データ、スキーマ、ストアドプロシージャ、トリガー、その他のデータベースコードを .bak ファイル内に移行します。
+ DB インスタンス全体ではなく、1 つのデータベースをバックアップおよび復元できます。
+ 開発、テスト、トレーニング、デモの目的でデータベースのコピーを作成できます。
+ 災害対策の追加保護レイヤーとして、Amazon S3 を使用したバックアップファイルの保管および転送ができます。
+ 透過的なデータ暗号化 (TDE) がオンになっているデータベースのネイティブバックアップを作成し、これらのバックアップをオンプレミスのデータベースに復元します。詳細については、「[SQL サーバーの透過的なデータの暗号化サポート](Appendix.SQLServer.Options.TDE.md)」を参照してください。
+ TDE がオンになっているオンプレミスデータベースのネイティブバックアップを RDS for SQL Server DB インスタンスに復元します。詳細については、「[SQL サーバーの透過的なデータの暗号化サポート](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 DB インスタンスとは異なる AWS リージョンの Amazon S3 バケットにバックアップしたり、このバケットから復元したりすることはできません。
+ 既存のデータベースと同じ名前のデータベースを復元することはできません。データベース名は一意です。
+ あるタイムゾーンのバックアップファイルを、別のタイムゾーンに復元しないことを強くお勧めします。バックアップを特定のタイムゾーンから別のタイムゾーンに復元した場合は、タイムゾーンの変更がクエリとアプリケーションにもたらす影響を監査する必要があります。
+ RDS for Microsoft SQL Server のサイズ制限は、ファイルあたり 5 TB です。大規模なデータベースのネイティブバックアップでは、マルチファイルバックアップを使用できます。
+ S3 にバックアップできる最大データベースサイズは、DB インスタンスで使用可能なメモリ、CPU、I/O、ネットワークリソースによって異なります。データベースが大きくなるほど、バックアップエージェントが消費するメモリは多くなります。
+ 同時に 10 以上のバックファイルから復元することはできません。
+ 差分バックアップは、最後の完全バックアップに基づいています。差分バックアップを機能させるには、最後の完全バックアップと差分バックアップの間でスナップショットを作成することはできません。差分バックアップが必要だが、手動スナップショットや自動スナップショットが存在する場合は、差分バックアップを続行する前に別の完全バックアップを作成してください。
+ ファイルの file\$1guid (一意の識別子) が `NULL` に設定されているデータベースでは、差分復元とログ復元はサポートされていません 。
+ 最大 2 のバックアップまたは復元タスクを同時に実行できます。
+ Amazon RDS では、SQL Server からネイティブログバックアップを実行できません。
+ RDS では最大 64 TiB のデータベースのネイティブ復元をサポートしています。SQL Server Express Edition のデータベースのネイティブリストアは、10 GB に制限されています。
+ メンテナンスウィンドウや、Amazon RDS がデータベースのスナップショットを作成しているときは、ネイティブバックを行うことはできません。ネイティブバックアップタスクが RDS の毎日のバックアップウィンドウと重複する場合、ネイティブバックアップタスクはキャンセルされます。
+ マルチ AZ DB インスタンスでは、完全な復元モデルでバックアップされているデータベースのみを、ネイティブに復元することができます。
+ トランザクション内でのネイティブバックアップと復元を目的とした 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 ファイルグループを含むデータベースは復元できません。
+ AWS KMS (SSE-KMS) による Amazon S3 サーバー側の暗号化は、バックアップストアドプロシージャに `@enable_bucket_default_encryption=1` を渡すと、S3 バケットのデフォルトの暗号化設定でサポートされます。デフォルトでは、復元は S3 オブジェクトのサーバー側の暗号化をサポートします。

  ストアドプロシージャに KMS キーを指定すると、ネイティブバックアップと復元は KMS キーを使用してクライアント側で暗号化および復号されます。AWS は、`@enable_bucket_default_encryption=0` の場合は SSE-S3 を使用して、`@enable_bucket_default_encryption=1` の場合は S3 バケットで設定されたデフォルトの暗号化キーを使用して、バックアップを S3 バケットに保存します。
+ S3 アクセスポイントを使用する場合、アクセスポイントを RDS 内部 VPC を使用するように設定することはできません。
+ 最高のパフォーマンスのために、ディレクトリバケット、またはリージョンで利用可能な場合にはディレクトリバケットのアクセスポイントを使用することをお勧めします。

バックアップファイルの作成、コピー、復元時にデータベースをオフラインにできる場合、ネイティブバックアップを使用して復元し、RDS に移行することをお勧めします。オンプレミスデータベースをオフラインにできない場合、AWS Database Migration Service を使用してデータベースを Amazon RDS に移行することをお勧めします。詳細については、「[What is AWS Database Migration Service?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)」を参照してください。

ネイティブバックアップおよび復元は、クロスリージョンスナップショットコピー機能のデータ復元機能に代わるものではありません。Amazon RDS におけるクロスリージョンの災害対策のため、スナップショットコピーを使用してデータベーススナップショットを別の AWS リージョンにコピーしておくことをお勧めします。詳細については、「[Amazon RDS の DB スナップショットのコピー](USER_CopySnapshot.md)」を参照してください。

# ネイティブバックアップおよび復元のセットアップ
<a name="SQLServer.Procedural.Importing.Native.Enabling"></a>

ネイティブバックアップおよび復元をセットアップするには、3 つのコンポーネントが必要です。

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. DB インスタンスのオプショングループに追加された `SQLSERVER_BACKUP_RESTORE` オプション。

   DB インスタンスでネイティブバックアップおよび復元を有効にするには、DB インスタンスのオプショングループに `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 リソースネーム (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)に対する最も効果的な保護方法です。

両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合は、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
+ 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
+ そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

信頼関係では、ロールにアクセスするリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを必ず使用してください。ネイティブバックアップおよび復元では、次の例に示すように、DB オプショングループと DB インスタンスの両方を含めるようにしてください。

**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 リソースネーム (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 はプライベート VPC を発行しないため、アクセスポイントは **[ネットワークオリジン: インターネット]** を使用するように設定する必要があります。RDS インスタンスからの S3 トラフィックは、プライベート VPC を通過するため、パブリックインターネットを経由しません。  
****  

```
{
    "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 はプライベート VPC を発行しないため、アクセスポイントは **[ネットワークオリジン: インターネット]** を使用するように設定する必要があります。RDS インスタンスからの S3 トラフィックは、プライベート VPC を通過するため、パブリックインターネットを経由しません。  
****  

```
{
    "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 ストアドプロシージャを呼び出して作業を行います。データベースに接続する手順については、「[SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)」を参照してください。

ストアドプロシージャによっては、Amazon リソースネーム (ARN) を Amazon S3 バケットおよびファイルに指定する必要があります。ARN の形式は `arn:aws:s3:::bucket_name/file_name.extension` です。Amazon S3 には、ARN のアカウント番号または AWS リージョンは不要です。

オプションの KMS キーも指定する場合、キーの ARN の形式は `arn:aws:kms:region:account-id:key/key-id` となります。詳細については、「[Amazon リソースネーム (ARN) と 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 キーを使用するかどうかにかかわらず、ネイティブバックアップおよび復元タスクでは、S3 にアップロードされたファイルに対して、SSE-S3 を介した Advanced Encryption Standard (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` - バックアップに使用する Amazon S3 バケット、アクセスポイント、ディレクトリバケット、またはディレクトリバケットのアクセスポイントとバックアップファイル名を表示する ARN。

  ファイルは任意の拡張子を持つことができますが、通常は `.bak` が使用されます。アクセスポイント ARN は `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 を入力するか、パラメータを省略すると、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* 部分にアスタリスクを 1 つだけ含めることができます。
  + シングルファイルバックアップでは、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 を介した Advanced Encryption Standard (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` – Amazon S3 プレフィックスと、データベースの復元に使用するバックアップファイルの名前を示す ARN。
  + 単一ファイルのバックアップの場合は、ファイル名全体を入力します。
  + マルチファイルのバックアップの場合は、ファイルに共通のプレフィックスを付けてから、そのプレフィックスにアスタリスクを付けます (`*`)。
    + ディレクトリバケットを使用する場合、[ディレクトリバケットの違い](https://docs.aws.amazon.com//AmazonS3/latest/userguide/s3-express-differences.html)により、ARN は `/*` で終わる必要があります。
  + `@s3_arn_to_restore_from` が空の場合は、次のエラーメッセージが返ります: S3 ARN prefix cannot be empty。

以下のパラメータは、差分復元には必須ですが、完全復元ではオプションです。
+ `@with_norecovery` – 復元操作に使用する復元句。
  + `0` に設定して、RECOVERY で復元します。この場合、復元後にデータベースがオンラインになります。
  + `1` に設定して、NORECOVERY で復元します。この場合、復元タスクの完了後もデータベースが RESTORING 状態を保持します。このアプローチで、後から差分復元も実行することができます。
  + DIFFERENTIAL 復元は、`0` または `1` を指定してください。
  + `FULL` 復元の場合、この値はデフォルトで `0` です。

以下のパラメータはオプションです。
+ `@keep_cdc` – 復元されたデータベースに変更データキャプチャ (CDC) 設定を保持するかどうかを示します。KEEP\$1CDC を有効にするには `1` に、無効にするには `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 の両方を使用した完全な復元はサポートされていません。  
クロスリージョンリードレプリカを持つインスタンスでは、いずれのネイティブ復元もサポートされていません。  
サポートされている設定の場合、リードレプリカを持つマルチ AZ インスタンスでのデータベースの復元は、マルチ AZ インスタンスでのデータベースの復元に似ています。レプリカ上のデータベースを復元するために、追加のアクションを実行する必要はありません。

### 例
<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 を使用したデータベースの復元**  
以下の 3 つの例は、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 prefix cannot be empty。

以下のパラメータはオプションです。
+ `@keep_cdc` – 復元されたデータベースに変更データキャプチャ (CDC) 設定を保持するかどうかを示します。KEEP\$1CDC を有効にするには 1 に、無効にするには 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 を使用したログの復元**  
以下の 2 つの例は、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 状態である必要があります。  
データベースの復元が終了したら、マスターログインを使用してください。または、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 データベースリクエストを送信することはできません。  
データベースを削除するには、マスターログインを使用します。または、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` ストアドプロシージャを呼び出します。パラメータを何も指定しない場合、ストアドプロシージャによりすべてのタスクのステータスが返されます。タスクのステータスは、約 2 分ごとに更新されます。タスクの履歴は 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/ja_jp/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Using.html) 以下の復元タスクが完了してデータベースが開くと、Amazon RDSが初期のスナップショットを作成します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/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 | Amazon S3プレフィックスを表す ARN とバックアップまたは復元したファイルの名前。 | 
| `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>

以下は、ネイティブ バックアップおよび復元を使用する場合に遭遇する可能性のある問題です。


****  

| 問題 | トラブルシューティングの推奨事項 | 
| --- | --- | 
|  データベースのバックアップ/復元オプションが有効になっていないか、有効化中です。後で再試行してください。  |  DB インスタンスに関連付けられた DB オプショングループに`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/ja_jp/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.Native.Troubleshooting.html)  | 
|  BACKUP DATABASE WITH COMPRESSION は <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 RDS DB インスタンスとは異なる AWS リージョンの Amazon S3 バケットにバックアップしたり、このバケットから復元したりすることはできません。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)」を参照してください。  | 
|  Restore タスクは、10 個を超えるバックアップファイルから復元できません。一致するファイルの数を減らして、もう一度お試しください。  |  復元しようとしているファイル数を減らします。必要に応じて、個々のファイルを大きくすることができます。  | 
|  データベース「*database\$1name*」は既に存在します。大文字と小文字またはアクセントのみが異なる 2 つのデータベースは使用できません。別のデータベース名を選択します。  |  既存のデータベースと同じ名前のデータベースを復元することはできません。データベース名は一意です。  | 

# 他の方法による SQL Server データのインポートとエクスポート
<a name="SQLServer.Procedural.Importing.Snapshots"></a>

次に、自分の Microsoft SQL Server データを Amazon RDS にインポートするためのスナップショット使用に関する情報を、確認することができます。また、SQL Server を実行する RDS DB インスタンスからデータをエクスポートするためのスナップショット使用に関する情報を確認することができます。

シナリオでサポートされている場合は、ネイティブバックアップおよび復元機能を使用して 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 DB インスタンスにデータをインポートするには**

1. DB インスタンスを作成します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。

1. アプリケーションの送信先 DB インスタンスへのアクセスを停止します。

   データをインポートしている間 DB インスタンスにアクセスできないようにすると、データ転送が速くなります。さらに、データのロード中に他のアプリケーションが同時に DB インスタンスに書き込むことができなければ、競合について心配する必要がなくなります。何か問題が発生し、以前のデータベーススナップショットにロールバックする必要がある場合、失われる変更内容は、インポートされたデータのみです。問題の解決後に、このデータを再インポートすることができます。

   DB インスタンスへのアクセス制御の詳細については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。

1. ターゲットデータベースのスナップショットを作成します。

   ターゲットデータベースに既にデータが設定されている場合は、データをインポートする前にデータベースのスナップショットを作成することをお勧めします。データのインポートで何か問題があった場合や、変更を破棄する必要がある場合は、スナップショットを使用してデータベースを前の状態に復元できます。データベースのスナップショットの詳細については、「[Amazon RDS のシングル AZ DB インスタンスの DB スナップショットの作成](USER_CreateSnapshot.md)」を参照してください。
**注記**  
データベースのスナップショットを作成するときは、バックアップ処理中の間 (数ミリ秒)、データベースの I/O オペレーションは一時停止されます。

1. ターゲットデータベースの自動バックアップを無効にします。

   ターゲット DB インスタンスの自動バックアップを無効にすると、データのインポート中のパフォーマンスが向上します。これは、自動バックアップが無効化されると、Amazon RDS がトランザクションを記録しなくなるためです。ただし、考慮しなければならないことがあります。ポイントインタイムリカバリを実行するには、自動化バックアップが必要です。そのため、データのインポート中は、データベースを指定のところまで復元することはできません。さらに、保持することを選択する場合を除き、DB インスタンスに作成されていた自動バックアップはすべて消去されます。

   自動バックアップを保持するよう選択すると、誤ってデータを削除することを防止できます。また 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. 送信先 DB インスタンスにインポートする必要のあるログインについて、送信元 SQL Server インスタンスに問い合わせます。

   SQL Server では、ログインとパスワードを `master` データベースに保存します。Amazon RDS では `master` データベースへのアクセス権を付与しないため、送信先 DB インスタンスに直接ログインとパスワードをインポートすることはできません。その代わり、元の SQL サーバーインスタンスの `master` データベースに問い合わせ、データ定義言語 (DDL) を作成しなければなりません。このファイルには、最終的な DB インスタンスに加えたいすべてのログイン情報とパスワードが含まれるようにします。またファイルには、転送したロールメンバーシップと許可も含まれます。

   `master` データベースへのクエリ実行については、Microsoft サポート技術情報の「[SQL Server のインスタンス間でログインおよびパスワードを転送する](https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/security/transfer-logins-passwords-between-instances)」を参照してください。

   スクリプトの出力は、送信先 DB インスタンスで実行できる別のスクリプトです。サポート技術情報の記事にあるスクリプトには、次のコードがあります。

   ```
   p.type IN 
   ```

   `p.type` が表示された場合はいつでも、次のコードを代わりに使用します。

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

1. 「[データのインポート](#ImportData.SQLServer.Import)」の方法を使用してデータをインポートします。

1. アプリケーションにターゲット DB インスタンスへのアクセス権を付与します。

   データのインポートが完了したら、インポート中に止めていた DB インスタンスへのアプリケーションのアクセスを許可できます。DB インスタンスへのアクセス制御の詳細については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。

1. ターゲット DB インスタンスの自動バックアップを有効にします。

   自動バックアップの詳細については、「[バックアップの概要](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 エディションを除くすべてのエディションに含まれるグラフィカル SQL Server クライアントです。SQL Server Management Studio Express は、Microsoft から無料でダウンロードできます。このダウンロードを確認するには、「[Microsoft ウェブサイト](https://www.microsoft.com/en-us/download)」を参照してください。

**注記**  
SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。

SQL Server Management Studio には、SQL Server DB インスタンスにデータをインポートするときに便利な、次のツールが含まれています。
+ スクリプトの生成とパブリッシュウィザード
+ インポートおよびエクスポートウィザード
+ 一括コピー

#### スクリプトの生成とパブリッシュウィザード
<a name="ImportData.SQLServer.MgmtStudio.ScriptWizard"></a>

スクリプトの生成とパブリッシュウィザードは、データベースのスキーマ、データそのもの、または両方を含むスクリプトを作成します。ローカル SQL サーバーのデプロイ内のデータベースに、スクリプトを作成することができます。その後スクリプトを実行し、そこに含まれる情報を Amazon RDS DB インスタンスに転送することができます。

**注記**  
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 を使用して DB インスタンスに接続し、スクリプトを実行することができます。

#### インポートおよびエクスポートウィザード
<a name="ImportData.SQLServer.MgmtStudio.ImportExportWizard"></a>

インポートおよびエクスポートウィザードは、特別な Integration Services パッケージを作成します。これを使用して、ローカルの SQL Server データベースから転送先 DB インスタンスにデータをコピーすることができます。ウィザードでは、転送先 DB インスタンスにコピーするテーブルおよびタプルをフィルタできます。

**注記**  
インポートおよびエクスポートウィザードは、大規模なデータセットには有効に機能しますが、ローカルデプロイメントからリモートにデータをエクスポートするには、最速の方法とはいえません。より速い方法については、SQL Server の一括コピー機能を検討できます。

インポートおよびエクスポートウィザードの詳細については、[Microsoft SQL Server のドキュメント](http://msdn.microsoft.com/en-us/library/ms140052%28v=sql.105%29.aspx)を参照してください。

ウィザードでは、[**Choose a Destination**] ページで、次の操作を行います。
+ [**Server Name**] に、DB インスタンスのエンドポイント名を入力します。
+ サーバー認証のモードの場合は、[**Use SQL Server Authentication**] を選択します。
+ [**User name**] と [**Password**] に、DB インスタンス用に作成したマスターユーザーの認証情報を入力します。

#### 一括コピー
<a name="ImportData.SQLServer.MgmtStudio.BulkCopy"></a>

SQL Server の一括コピー機能は、ソースデータベースから DB インスタンスにデータをコピーするための効率的な手段です。一括コピーは、指定したデータを ASCII ファイルなどのデータファイルに書き込みます。その後、一括コピーを再度実行して、そのファイルのコンテンツを転送先の DB インスタンスに書き込みます。

このセクションでは、SQL Server のすべてのエディションに含まれる **bcp** ユーティリティを使用します。一括インポートおよびエクスポートオペレーションの詳細については、[Microsoft SQL Server のドキュメント](http://msdn.microsoft.com/en-us/library/ms187042%28v=sql.105%29.aspx)を参照してください。

**注記**  
一括コピーを使用する前に、データベーススキーマを転送先の DB インスタンスにインポートする必要があります。これを行うには、このトピックですでに説明したスクリプトの生成とパブリッシュウィザードが最適なツールです。

以下のコマンドは、ローカルの SQL Server インスタンスに接続されます。そして指定されたテーブルのタブ区切りファイルを、既存の SQL Server デプロイメントの C:\$1 ルートディレクトリに生成します。テーブルは完全修飾名で指定し、テキストファイルはコピーされるテーブルと同じ名前になります。

```
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` 一括インポートするデータの行数を指定します。

**注記**  
インポートの状況にとって重要な他のパラメータがある場合があります。例えば、ID 値に関連する `-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 
```

データファイルの作成後、類似のコマンドを使用して、自分の DB インスタンスにデータをアップロードすることができます。事前に、ターゲット DB インスタンスにデータベースとスキーマを作成します。次に、`in`引数で出力ファイルを指定する代わりに、`out`引数を使用して入力ファイルを指定します。localhost を使用してローカル SQL Server インスタンスを指定する代わりに、DB インスタンスのエンドポイントを指定します。1433 以外のポートを使用する場合は、それも指定します。ユーザー名とパスワードは、DB インスタンスのマスターユーザーとパスワードです。構文は次のとおりです。

```
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` とします。DB インスタンスのエンドポイントは `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 DB インスタンスからデータをエクスポートします。
+ **完全バックアップファイル (.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 DB インスタンスから別のデータストアに 1 つ以上のテーブル、ビュー、クエリをコピーできます。この選択は、ターゲットデータストアが 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 の一部として使用できます。このグラフィカル SQL Server クライエントは、Express エディションを除くすべての Microsoft SQL Server エディションに含まれます。SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。SQL Server Management Studio Express は、Microsoft から無料でダウンロードできます。このダウンロードを確認するには、「[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 DB インスタンスに接続します。この操作の詳細については、「[SQL Server DB インスタンスへの接続](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 DB インスタンスのエンドポイントが表示されていることを確認します。

   1. [**Use SQL Server Authentication**] を選択します。[**User name**] および [**Password**] で、マスターユーザーの名前と DB インスタンスのパスワードを入力します。

   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 DB インスタンスのサーバー名を入力します。

   1. 適切な認証タイプを選択します。必要に応じてユーザー名とパスワードを入力します。

   1. [**Database**] でターゲットデータベース名を選択するか、[**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 DB インスタンスにこれらのスクリプトを実行して、スクリプト化されたオブジェクトを再作成できます。次に、bcp ユーティリティを使用して、選択したオブジェクトのデータをターゲット DB インスタンスに一括エクスポートすることができます。この選択肢は、データベース全体 (テーブル以外のオブジェクトを含む) または大量のデータを、2 つの SQL Server DB インスタンス間で移動する場合に最適です。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 の一部として使用できます。このグラフィカル SQL Server クライエントは、Express エディションを除くすべての Microsoft SQL Server エディションに含まれます。SQL Server Management Studio は、Windows ベースのアプリケーションとしてのみ使用できます。SQL Server Management Studio Express は、Microsoft から[無料でダウンロード](http://www.microsoft.com/en-us/search/Results.aspx?q=sql%20server%20management%20studio)できます。

**SQL Server のスクリプトの生成とパブリッシュウィザードおよび bcp ユーティリティを使用してデータをエクスポートするには**

1. SQL Server Management Studio で、RDS for SQL Server DB インスタンスに接続します。この操作の詳細については、「[SQL Server DB インスタンスへの接続](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 DB インスタンスに接続します。

1. **[Object Explorer]** (オブジェクトエクスプローラー) でターゲット SQL Server DB インスタンスが選択された状態で、**[File]** (ファイル) メニューの **[Open]** (開く) を選択します。続いて、**[File]** (ファイル) を選択し、スクリプトファイルを開きます。

1. データベース全体をスクリプトした場合、スクリプト内の CREATE DATABASE ステートメントを見直してください。データベースが希望の場所に希望のパラメータで作成されていることを確認します。詳細については、SQL Server のドキュメントの「[CREATE DATABASE](http://msdn.microsoft.com/en-us/library/ms176061%28v=sql.110%29.aspx)」を参照してください。

1. スクリプトでデータベースユーザーを作成している場合は、それらのユーザーのサーバーログインがターゲット DB インスタンスに存在するかどうかを確認します。作成されていない場合、それらのユーザーのログインを作成します。作成しないと、データベースユーザーを作成するためにスクリプト化したコマンドが失敗します。詳細については、SQL Server ドキュメントの「[ログインの作成](http://msdn.microsoft.com/en-us/library/aa337562%28v=sql.110%29.aspx)」を参照してください。

1. [SQL Editor] メニューの [**\$1Execute**] を選択してスクリプトファイルを実行し、データベースオブジェクトを作成します。スクリプトが終了したら、すべてのデータベースオブジェクトが想定したとおりに存在していることを確認します。

1. bcp ユーティリティを使用して、RDS for SQL Server DB インスタンスからファイルにデータをエクスポートします。コマンドプロンプトを開き、次のコマンドを入力します。

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

   前述のコードには、以下のオプションがあります。
   + *table\$1name* は、ターゲットデータベースに再作成し、データを挿入するテーブルの 1 つの名前です。
   + *data\$1file* は、作成されるデータファイルのフルパスと名前です。
   + `-n` 一括コピーではコピーするデータのネイティブデータ型を使用するように指定します。
   + `-S` は、エクスポート元の SQL Server DB インスタンスを指定します。
   + `-U` は、SQL Server DB インスタンスに接続するときに使用するユーザー名を指定します。
   + `-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)」の手順に従って、ターゲット DB インスタンスでデータを一括インポートする準備を行います。

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 DB インスタンスとデータファイル間で大量のデータを効率的に転送できます。Linux 環境の BCP を使用して一括データオペレーションを実行することができるため、データ移行、ETL プロセス、定期的なデータ転送に役立ちます。

BCP は、ファイルから SQL Server テーブルへのデータのインポートと、SQL Server テーブルからファイルへのデータのエクスポートの両方をサポートしています。これは、区切りテキストファイルを含むさまざまな形式で構造化データを転送するのに特に効果的です。

## 前提条件
<a name="SQLServer.Procedural.Importing.BCP.Linux.Prerequisites"></a>

Linux の RDS for SQL Server DB インスタンスで BCP を使用する前に、以下が整っていることを確認してください。
+ RDS for SQL Server DB インスタンスへのネットワーク接続を備えた Linux 環境
+ Linux システムにインストールされている、以下の Microsoft SQL Server コマンドラインツール。
  + sqlcmd - SQL Server コマンドラインクエリツール
  + bcp - 一括コピープログラムユーティリティ
+ RDS for SQL Server DB インスタンスの有効な認証情報
+ SQL Server ポート (通常は 1433) での接続を許可するようにセキュリティグループを介して設定されたネットワークアクセス
+ 実行する操作に適切なデータベースアクセス許可

## Linux での SQL Server コマンドラインツールのインストール
<a name="SQLServer.Procedural.Importing.BCP.Linux.Installing"></a>

Linux から BCP を使用するには、Microsoft SQL Server コマンドラインツールをインストールする必要があります。特定の Linux ディストリビューションのインストール手順の詳細については、次の Microsoft ドキュメントを参照してください。
+ 「[sqlcmd と bcp SQL Server コマンドラインツールを Linux にインストールする](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 DB インスタンスから 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 DB インスタンスにデータをインポートできます。これは、データ移行、テストデータのロード、または定期的なデータ更新に役立ちます。

### 基本的なインポート構文
<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"`)
+ 1,000 行のバッチでデータを処理します (`-b 1000`)

## 一般的な BCP オプション
<a name="SQLServer.Procedural.Importing.BCP.Linux.Options"></a>

BCP には、データのフォーマットと転送動作を制御するためのオプションが多数用意されています。次の表に、一般的に使用されるオプションを示します。


| オプション | 説明 | 
| --- | --- | 
| -c | すべての列に文字データ型を使用する | 
| -n | ネイティブデータベースデータ型を使用する | 
| -t | フィールド区切り文字を指定する (デフォルトはタブ) | 
| -r | 行区切り文字を指定する (デフォルトは改行) | 
| -b | 一括オペレーションのバッチサイズを指定する | 
| -F | エクスポートまたはインポートする最初の行を指定する | 
| -L | エクスポートまたはインポートする最後の行を指定する | 
| -e | 拒否された行をキャプチャするエラーファイルを指定する | 
| -f | データフォーマット用の形式ファイルを指定する | 
| -q | オブジェクト名に引用符で囲まれた識別子を使用する | 

## ベストプラクティスと考慮事項
<a name="SQLServer.Procedural.Importing.BCP.Linux.BestPractices"></a>

Linux の RDS for SQL Server で BCP を使用する場合は、次のベストプラクティスを考慮してください。
+ **バッチ処理の使用** – 大規模なデータセットの場合は、`-b` オプションを使用してデータをバッチ処理します。これはパフォーマンスを向上させ、エラー復旧を改善します。
+ **エラーの適切な処理** – `-e` オプションを使用して、分析のためにエラー情報と拒否された行を別のファイルにキャプチャします。
+ **適切なデータ形式の選択** – クロスプラットフォームの互換性には文字形式 (`-c`) を使用し、送信元と送信先の両方が SQL Server の場合にパフォーマンスを向上させるにはネイティブ形式 (`-n`) を使用します。
+ **認証情報の保護** – パスワードをコマンドラインに直接記述することは避けてください。適切なアクセス許可を持つ環境変数または設定ファイルの使用を検討してください。
+ **小さなデータセットでのテスト** – 大量のデータを処理する前に、小さなデータセットで BCP コマンドをテストして、フォーマットと接続を検証します。
+ **ネットワーク接続のモニタリング** – 特に大規模なデータ転送の場合、安定したネットワーク接続を確保します。長時間実行されるオペレーションには、`screen` や `tmux` などのツールの使用を検討してください。
+ **データ整合性の検証** – データ転送後、行数とサンプルデータを検証して、オペレーションが正常に完了したことを確認します。

## 一般的な問題のトラブルシューティング
<a name="SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting"></a>

次の表は、Linux から BCP を使用する際に発生する可能性がある一般的な問題とその解決策を示しています。


| 問題 | ソリューション | 
| --- | --- | 
| 接続タイムアウトまたはネットワークエラー | Amazon RDS エンドポイント、セキュリティグループ設定、およびネットワーク接続を確認します。SQL Server ポート (通常は 1433) が Linux システムからアクセス可能であることを確認します。 | 
| 認証の失敗 | ユーザー名とパスワードを確認します。データベースユーザーに、実行している操作に対する適切なアクセス許可があることを確認します。 | 
| データフォーマットエラー | フィールドと行の区切り文字を確認します。データ形式が BCP が期待するものと一致していることを確認します。複雑なデータ構造にはフォーマットファイルを使用します。 | 
| アクセス拒否エラー | データベースユーザーに、ターゲットテーブルのインポート用の INSERT アクセス許可、またはエクスポート用の SELECT アクセス許可があることを確認します。 | 
| 大きなファイル処理の問題 | -b オプションでバッチ処理を使用します。パフォーマンスとエラー復旧を向上させるために、大きなファイルを小さなチャンクに分割することを検討してください。 | 
| 文字エンコードの問題 | データファイルで互換性のある文字エンコードを使用していることを確認します。文字形式には -c オプションを使用するか、適切なコードページを指定します。 | 

# Amazon RDS での Microsoft SQL Server 用のリードレプリカの使用
<a name="SQLServer.ReadReplicas"></a>

リードレプリカは通常、Amazon RDS の DB インスタンス間でレプリケーションを設定するために使用します。リードレプリカの概要については、「[DB インスタンスのリードレプリカの操作](USER_ReadRepl.md)」を参照してください。

このセクションでは、Amazon RDS for SQL Server でのリードレプリカの使用に関する特定の情報を確認することができます。
+ [データベース ユーザーとオブジェクトを SQL Server リードレプリカと同期する](SQLServer.ReadReplicas.ObjectSynchronization.md)
+ [SQL Server リードレプリカの問題のトラブルシューティング](SQLServer.ReadReplicas.Troubleshooting.md)

## SQL Server リードレプリカの設定
<a name="SQLServer.ReadReplicas.Configuration"></a>

DB インスタンスがレプリケーション用のソース DB インスタンスとして機能するには、ソース DB インスタンスで自動バックアップを有効にする必要があります。そのためには、バックアップ保持期間の値を 0 以外の値に設定します。このタイプのデプロイを設定すると、自動バックアップが有効になります。

SQL Server リードレプリカを作成する際、プライマリ DB インスタンスを停止する必要はありません。Amazon RDS では、サービスを中断することなく、ソース DB インスタンスとリードレプリカに必要なパラメータとアクセス許可を設定できます。ソース DB インスタンスのスナップショットが作成され、このスナップショットがリードレプリカになります。リードレプリカの削除時にも停止は発生しません。

1 つのソース DB インスタンスから最大 15 つのリードレプリカを作成できます。レプリケーションを効率的に実行するには、各リードレプリカにソース DB インスタンスと同程度のコンピューティングリソースとストレージリソースを設定することをお勧めします。ソースの DB インスタンスをスケールした場合は、リードレプリカもスケールする必要があります。

ソース DB インスタンスとそのすべてのリードレプリカの SQL Server DB エンジンバージョンは同じである必要があります。Amazon RDS では、メンテナンスウィンドウに関係なく、リードレプリカがアップグレードされた後すぐにプライマリがアップグレードされます。DB エンジンバージョンのアップグレードの詳細については、「[Microsoft SQL Server DB エンジンのアップグレード](USER_UpgradeDBInstance.SQLServer.md)」を参照してください。

リードレプリカでソースからの変更を受信して適用できるように、十分なコンピューティングリソースとストレージリソースが必要です。リードレプリカのコンピューティング、ネットワーク、またはストレージがリソースの容量に達すると、リードレプリカはソースからの変更の受信または適用を停止します。リードレプリカのストレージや CPU リソースは、そのソースや他のリードレプリカとは独立して変更することができます。

リードレプリカを作成する方法については、「[リードレプリカの作成](USER_ReadRepl.Create.md)」を参照してください。

## SQL Server でのリードレプリカの制限
<a name="SQLServer.ReadReplicas.Limitations"></a>

Amazon RDS の SQL Server リードレプリカには、次の制限が適用されます。
+ リードレプリカは、SQL Server Enterprise Edition (EE) エンジンでのみ使用することができます。
+ リードレプリカは、SQL Server バージョン 2016 – 2022 で使用できます。
+ 1 つのソース DB インスタンスから最大 15 つのリードレプリカを作成できます。ソース DB インスタンスのリードレプリカが 5 つを超えると、レプリケーションで遅延が発生する場合があります。
+ リードレプリカは、4 つ以上の vCPU を持つ DB インスタンスクラスで実行されている DB インスタンスでのみ使用できます。
+ リードレプリカは、インスタンスクラスタイプと可用性モードに応じて最大 100 のデータベースをサポートします。データベースをリードレプリカに自動的にレプリケートするには、ソース DB インスタンスでデータベースを作成する必要があります。レプリケートするデータベースを個別に選択することはできません。詳細については、「[Microsoft SQL Server DB インスタンスの制限](CHAP_SQLServer.md#SQLServer.Concepts.General.FeatureSupport.Limits)」を参照してください。
+ リードレプリカからデータベースを削除することはできません。データベースを削除するには、`rds_drop_database` ストアドプロシージャを使用してソース DB インスタンスから削除します。詳細については、「[Amazon RDS for Microsoft SQL Server DB インスタンスのデータベースの削除](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)」を参照してください。
+ ソース DB インスタンスが透過的なデータ暗号化 (TDE) を使用してデータを暗号化すると、リードレプリカも TDE を自動的に設定します。

  ソース DB インスタンスが KMS キーを使用してデータを暗号化すると、同じリージョンのリードレプリカは同じ KMS キーを使用します。クロスリージョンリードレプリカの場合、リードレプリカの作成時にリードレプリカのリージョンから KMS キーを指定する必要があります。リードレプリカの KMS キーを変更することはできません。
+ リードレプリカは、作成元のアベイラビリティーゾーンに関係なく、ソース DB インスタンスと同じタイムゾーンと照合順序を持ちます。
+ Amazon RDS for SQL Server では、次の機能はサポートされていません。
  + リードレプリカのバックアップ保持
  + リードレプリカからのポイントインタイムリカバリ
  + リードレプリカの手動スナップショット
  + マルチ AZ リードレプリカ
  + リードレプリカのリードレプリカの作成
  + リードレプリカへのユーザーログインの同期
+ Amazon RDS for SQL Server は、ソース DB インスタンスとそのリードレプリカの間の高いレプリカラグを軽減するために介入することはありません。ソース DB インスタンスとそのリードレプリカのサイズが、コンピューティング能力とストレージの観点から、運用負荷に合わせて適切に設定されていることを確認してください。
+ AWS GovCloud (米国東部) と AWS GovCloud (米国西部) リージョンの間ではレプリケーションできますが、AWS GovCloud (US) Regions との間ではレプリケーションできません。

## RDS for SQL Server レプリカのオプションに関する考慮事項
<a name="SQLServer.ReadReplicas.limitations.options"></a>

RDS for SQL Server レプリカを作成する前に、次の要件、制限、推奨事項を確認してください。
+ SQL Server レプリカがソース DB インスタンスと同じリージョンにある場合は、そのレプリカがソース DB インスタンスと同じオプショングループに属していることを確認してください。出典オプショングループまたは出典オプショングループメンバーシップへの変更はレプリカに反映されます。これらの変更は、レプリカのメンテナンスウィンドウに関係なく、出典 DB インスタンスに適用された後すぐにレプリカに適用されます。

  オプショングループの詳細については、「[オプショングループを使用する](USER_WorkingWithOptionGroups.md)」を参照してください。
+ SQL Server クロスリージョンレプリカを作成する場合、Amazon RDS により、そのための専有オプショングループが作成されます。

  SQL Server クロスリージョンレプリカを、その専有オプショングループから削除することはできません。他の DB インスタンスで、SQL Server クロスリージョンレプリカの専有オプショングループを使用することはできません。

  以下のオプションは、レプリケートオプションです。SQL Server クロスリージョンレプリカにレプリケートオプションを追加するには、そのオプションをソース DB インスタンスのオプショングループに追加します。オプションは、すべての出典 DB インスタンスのレプリカにもインストールされます。
  + `TDE`

  以下のオプションは、レプリケートされないオプションです。専用オプショングループから、レプリケートされないオプションを追加または削除できます。
  + `MSDTC`
  + `SQLSERVER_AUDIT`
  + クロスリージョンリードレプリカで `SQLSERVER_AUDIT` オプションを有効にするには、クロスリージョンリードレプリカの専用オプショングループとソースインスタンスのオプショングループに `SQLSERVER_AUDIT` オプションを追加します。SQL Server クロスリージョンリードレプリカのソースインスタンスに `SQLSERVER_AUDIT` オプションを追加することで、ソースインスタンスのクロスリージョンリードレプリカごとにサーバーレベル監査オブジェクトとサーバーレベルの監査仕様を作成できます。クロスリージョンリードレプリカにアクセスして、完成した監査ログを Amazon S3 バケットにアップロードできるようにするには、専用オプショングループに `SQLSERVER_AUDIT` オプションを追加し、オプション設定を行います。監査ファイルのターゲットとして使用している Amazon S3 バケットは、クロスリージョンリードレプリカと同じリージョンにある必要があります。各クロスリージョンリードレプリカの `SQLSERVER_AUDIT` オプションのオプション設定を個別に変更して、それぞれがそれぞれのリージョンの Amazon S3 バケットにアクセスできるようにします。

  次のオプションは、リードレプリカではサポートされていません。
  + `SSRS`
  + `SSAS`
  + `SSIS`

  次のオプションは、クロスリージョンリードレプリカで一部サポートされています。
  + `SQLSERVER_BACKUP_RESTORE`
  + SQL Server クロスリージョンレプリカのソース DB インスタンスには `SQLSERVER_BACKUP_RESTORE` オプションがありますが、すべてのクロスリージョンレプリカを削除するまで、ソース DB インスタンスでネイティブ復元を実行できません。クロスリージョンレプリカの作成中は、既存のネイティブリストアタスクはすべてキャンセルされます。`SQLSERVER_BACKUP_RESTORE` オプションを専用のオプショングループに追加することはできません。

    ネイティブバックアップと復元の詳細については、「[ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)」を参照してください。

  SQL Server クロスリージョンリードレプリカを昇格するとき、昇格されたレプリカは、オプションの管理を含め、その他の SQL Server DB インスタンスと同じように動作します。オプショングループの詳細については、「[オプショングループを使用する](USER_WorkingWithOptionGroups.md)」を参照してください。

# データベース ユーザーとオブジェクトを SQL Server リードレプリカと同期する
<a name="SQLServer.ReadReplicas.ObjectSynchronization"></a>

新しく作成されたリードレプリカには、リードレプリカの作成時にプライマリ DB インスタンスに存在するログイン、カスタムサーバーロール、SQL エージェントジョブ、またはその他のサーバーレベルのオブジェクトが存在することが期待されます。ただし、リードレプリカの作成後にプライマリ DB インスタンスで作成されたサーバーレベルのオブジェクトは自動的にレプリケートされないため、リードレプリカで手動で作成する必要があります。

データベースユーザーは、プライマリ DB インスタンスからリードレプリカに自動的にレプリケートされます。リードレプリカデータベースは読み取り専用モードであるため、データベースユーザーのセキュリティ識別子 (SID) をデータベースで更新することはできません。そのため、リードレプリカに SQL ログインを作成するときは、そのログインの SID がプライマリ DB インスタンスの対応する SQL ログインの SID と一致していることを確認することが不可欠です。SQL ログインの SID を同期しないと、リードレプリカのデータベースにアクセスできなくなります。SQL Server は Active Directory から SID を取得するため、Windows Active Directory (AD) 認証ログインでこの問題は発生しません。

**プライマリ DB インスタンスからの SQL ログインをリードレプリカに同期するには**

1. プライマリ DB インスタンスに接続します。

1. プライマリ DB インスタンスに新しい SQL ログインを作成します。

   ```
   USE [master]
   GO
   CREATE LOGIN TestLogin1
   WITH PASSWORD = 'REPLACE WITH PASSWORD';
   ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

1. データベースに SQL ログイン用の新しいデータベースユーザーを作成します。

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   CREATE USER TestLogin1 FOR LOGIN TestLogin1;
   GO
   ```

1. プライマリ DB インスタンスで新しく作成された SQL ログインの SID を確認します。

   ```
   SELECT name, sid FROM sys.server_principals WHERE name =  'TestLogin1';
   ```

1. リードレプリカに接続します。新しい SQL ログインを作成します。

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #4;
   ```

**または、リードレプリカデータベースにアクセスできる場合は、孤立したユーザーを次のように修正できます。**

1. リードレプリカに接続します。

1. データベース内で孤立したユーザーを特定します。

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   EXEC sp_change_users_login 'Report';
   GO
   ```

1. 孤立したデータベースユーザーに SQL ログインを作成します。

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #2;
   ```

   例:

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'TestPa$$word#1', SID=0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P;
   ```
**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

# SQL Server リードレプリカの問題のトラブルシューティング
<a name="SQLServer.ReadReplicas.Troubleshooting"></a>

Amazon CloudWatch のレプリケーションのラグをモニタリングするには、Amazon RDS `ReplicaLag` メトリクスを表示します。レプリケーションのラグタイムについては、「[リードレプリケーションのモニタリング](USER_ReadRepl.Monitoring.md)」を参照してください。

レプリケーションラグが長すぎる場合は、次のクエリを使用してラグに関する情報を取得できます。

```
SELECT AR.replica_server_name
     , DB_NAME (ARS.database_id) 'database_name'
     , AR.availability_mode_desc
     , ARS.synchronization_health_desc
     , ARS.last_hardened_lsn
     , ARS.last_redone_lsn
     , ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
--WHERE DB_NAME(ARS.database_id) = 'database_name'
ORDER BY AR.replica_server_name;
```

# Amazon RDS for Microsoft SQL Server のマルチ AZ 配置
<a name="USER_SQLServerMultiAZ"></a>

マルチ AZ 配置は、DB インスタンスの拡張された可用性、データ堅牢性、および耐障害性を提供します。予定されたデータベースメンテナンスまたは予期しないサービス障害時に、Amazon RDS は自動的に最新のセカンダリ DB インスタンスにフェイルオーバーします。この機能により、データベースオペレーションを手動介入なしで速やかに再開できます。プライマリインスタンスおよびスタンバイインスタンスは、同じエンドポイントを使用します。このエンドポイントの物理的なネットワークアドレスは、フェイルオーバープロセスの一環としてセカンダリレプリカに移行します。フェイルオーバーが発生した場合、アプリケーションを再構成する必要はありません。

Amazon RDS は、Microsoft SQL Server で SQL Server データベースミラーリング (DBM)、Always On 可用性グループ (AG)、またはブロックレベルレプリケーションによるマルチ AZ 配置をサポートしています。Amazon RDS は、マルチ AZ 配置のヘルス状態をモニタリングし、維持します。問題が発生した場合、RDS は異常のある DB インスタンスを自動的に修正し、同期を再確立して、フェイルオーバーをスタートします。フェイルオーバーは、スタンバイとプライマリが完全に同期している場合にのみスタートします。何も管理する必要はありません。

SQL Server マルチ AZ をセットアップすると、RDS は DBM、AG、またはブロックレベルレプリケーションを使用するよう、インスタンス上のすべてのデータベースを自動的に設定します。DBM または AG を設定すると、Amazon RDS では、プライマリ、モニタリング、およびセカンダリ DB インスタンスが処理されます。ブロックレベルレプリケーションの場合、RDS はプライマリ DB インスタンスとセカンダリ DB インスタンスを処理します。設定は自動的に行われるため、RDS はデプロイする SQL Server のバージョンに基づいて、DBM、Always On AG、またはブロックレベルレプリケーションを選択します。

Amazon RDS では、SQL Server の以下のバージョンおよびエディションの常時稼働 AG によるマルチ AZ がサポートされます。
+ SQL Server 2022:
  + Standard Edition
  + Enterprise Edition
+ SQL Server 2019:
  + Standard Edition 15.00.4073.23 以降
  + Enterprise Edition
+ SQL Server 2017:
  + Standard Edition 14.00.3401.7 以降
  + Enterprise Edition 14.00.3049.1 以降
+ SQL Server 2016: Enterprise Edition 13.00.5216.0 以降

Amazon RDS では、上述のバージョンを除き、SQL Server の以下のバージョンおよびエディションの DBM によるマルチ AZ がサポートされます。
+ SQL Server 2019: Standard Edition 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 以降のブロックレベルレプリケーションでマルチ AZ をサポートしています。

**注記**  
16.00.4215.2 以降で作成された新しい DB インスタンスのみが、ブロックレベルレプリケーションによるマルチ AZ 配置をサポートします。既存の SQL Server 2022 Web Edition インスタンスには、次の制限が適用されます。  
バージョン 16.00.4215.2 の既存のインスタンスの場合、ブロックレベルレプリケーションを有効にするには、同じマイナーバージョン以上の新しいインスタンスにスナップショットを復元する必要があります。
古いマイナーバージョンを持つ SQL Server 2022 Web インスタンスは、マイナーバージョン 16.00.4215.2 以降にアップグレードして、ブロックレベルレプリケーションを有効にすることができます。

次の SQL クエリを使用して、SQL Server DB インスタンスがシングル AZ、DBM によるマルチ AZ、または Always On AGs によるマルチ AZ のいずれであるかを特定できます。このクエリは、SQL Server Web Edition でのマルチ AZ 配置には適用されません。

```
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 DB インスタンスへのマルチ AZ の追加
<a name="USER_SQLServerMultiAZ.Adding"></a>

AWS マネジメントコンソールを使用して新しい SQL Server DB インスタンスを作成する場合、データベースミラーリング (DBM)、Always On AG、またはブロックレベルレプリケーションによるマルチ AZ を追加できます。これを行うには、**[マルチ AZ 配置]** から **[はい (ミラーリング/常時/ブロックレベルレプリケーション)]** を選択します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。

コンソールを使用して既存の SQL Server DB インスタンスを変更する場合、**[DB インスタンスを変更]** ページの **[マルチ AZ 配置]** から **[はい (ミラーリング/常時/ブロックレベルレプリケーション)]** を選択して、DBM、AG、またはブロックレベルレプリケーションによるマルチ AZ を追加できます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

**注記**  
DB インスタンスが Always On 可用性グループ (AG) ではなくデータベースのミラーリング (DBM) を実行している場合は、マルチ AZ を追加する前に、インメモリ最適化を無効にする必要が生じることがあります。DB インスタンスで SQL Server 2016、または 2017 Enterprise Edition が実行され、インメモリ最適化が有効になっている場合は、マルチ AZ を追加する前に DBM でのインメモリ最適化を無効にします。  
DB インスタンスで SQL Server Web Edition の AG またはブロックレベルレプリケーションを実行している場合、このステップは必要ありません。

## Microsoft SQL Server DB インスタンスからのマルチ AZ の削除
<a name="USER_SQLServerMultiAZ.Removing"></a>

AWS マネジメントコンソールを使用して既存の SQL Server DB インスタンスを変更する場合、DBM、AG、またはブロックレベルレプリケーションを使用してマルチ AZ を削除できます。これを行うには、**[DB インスタンスを変更]** ページで **[マルチ AZ 配置]** から **[いいえ (ミラーリング/常時/ブロックレベルレプリケーション)]** を選択します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

# Microsoft SQL Server マルチ AZ 配置の制限、注意事項、および推奨事項
<a name="USER_SQLServerMultiAZ.Recommendations"></a>

以下は、RDS for SQL Server DB インスタンスでマルチ AZ 配置を使用する際の、いくつかの制限事項です。
+ クロスリージョンマルチ AZ はサポートされていません。
+ マルチ AZ 配置の RDS for SQL Server DB インスタンスはサポートされていません。
+ データベースの読み取りアクティビティを受け入れるように、セカンダリ DB インスタンスを設定することはできません。
+ Always On 可用性グループ (AG) を備えたマルチ AZ は、メモリ内最適化をサポートします。
+ Always On 可用性グループ (AG) を使用するマルチ AZ は、可用性グループリスナーでの Kerberos 認証をサポートしていません。これは、リスナーにサービスプリンシパル名 (SPN) がないためです。
+ ブロックレベルレプリケーションを使用するマルチ AZ は現在、SQL Server Web Edition インスタンスでのみサポートされています。
+ SQL Server マルチ AZ 配置内の SQL Server DB インスタンス上のデータベースの名前を変更することはできません。そのようなインスタンスのデータベースの名前を変更する必要がある場合、まず DB インスタンスのマルチ AZ を無効にし、それから名前を変更します。最後に、DB インスタンスのマルチ AZ を再び有効にします。
+ 完全な復旧モデルを使用してバックアップされているマルチ AZ DB インスタンスのみ復元できます。
+ マルチ AZ 配置は、SQL Server エージェントジョブの数が 10,000 に制限されています。

  制限の引き上げが必要な場合は、サポート に連絡して緩和をリクエストしてください。[AWS サポート センター](https://console.aws.amazon.com/support/home#/)のページを開き、必要に応じてサインインし、[**ケースの作成**] を選択します。**[Service Limit increase]** (サービス制限の緩和) を選択します。フォームに入力して送信します。
+ SQL Server マルチ AZ 配置内の SQL Server DB インスタンス上にオフラインのデータベースを配置することはできません。
+ RDS for SQL Server は、MSDB データベースのアクセス許可をセカンダリインスタンスにレプリケートしません。これらのアクセス許可がセカンダリインスタンスで必要な場合は、手動で再作成する必要があります。
+ ボリュームメトリクスは、ブロックレベルレプリケーションを使用するインスタンスのセカンダリホストでは使用できません。

以下は、RDS for SQL Server DB インスタンスでマルチ AZ 配置を使用する際の、いくつかの注意事項です。
+ Amazon RDS は常時稼働 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 DB インスタンスで SQL Server のマルチ AZ を使用するには、まず、少なくとも 2 つの異なるアベイラビリティーゾーンにサブネットを持つ DB サブネットグループを作成します。次に、その DB サブネットグループを SQL Server DB インスタンスのプライマリレプリカに割り当てます。
+ マルチ AZ 配置にするために DB インスタンスが変更されている場合、変更中は、[**変更中**] のステータスになります。Amazon RDS によりスタンバイが作成され、プライマリ DB インスタンスのバックアップが作成されます。このプロセスが完了した後で、プライマリ DB インスタンスのステータスが [**利用可能**] になります。
+ マルチ AZ 配置では、すべてのデータベースが同じノードにあります。プライマリホストのデータベースがフェイルオーバーする場合は、すべての SQL Server データベースが 1 つのアトミックユニットとしてスタンバイホストにフェイルオーバーします。Amazon RDS により新しい正常なホストがプロビジョニングされ、異常なホストに置き換わります。
+ DBM、AG、またはブロックレベルレプリケーションを使用したマルチ AZ は、単一のスタンバイレプリカをサポートします。
+ ユーザー、ログイン、アクセス許可はセカンダリに自動的にレプリケートされます。それらを再作成する必要はありません。ユーザー定義のサーバーロールは マルチ AZ 配置で Always On AG またはブロックレベルレプリケーションを使用する DB インスタンスでレプリケーションされます。
+ マルチ AZ 配置では、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` です。
+ マルチ AZ 配置では、ジョブのレプリケーション機能がオンになっているとき、SQL Server エージェントジョブは、プライマリホストからセカンダリホストにレプリケートされます。詳しくは、「[SQL Server エージェントジョブレプリケーションをオンにする](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate)」を参照してください。
+ 同期的データレプリケーションのため、1 つのアベイラビリティーゾーン内のスタンダード DB インスタンスのデプロイと比較した場合、レイテンシーが長くなる可能性があります。
+ フェイルオーバー時間は、復旧プロセスの完了までにかかる時間の影響を受けます。大量のトランザクションがあると、フェイルオーバー時間はより長くなります。
+ SQL Server マルチ AZ 配置では、フェイルオーバー再起動でプライマリ DB インスタンスのみを再起動します。フェイルオーバー後、プライマリ DB インスタンスは新しいセカンダリ DB インスタンスになります。マルチ AZ インスタンスのパラメータは更新されない可能性があります。フェイルオーバーなしの再起動の場合、プライマリ DB インスタンスとセカンダリ DB インスタンスの両方が再起動し、再起動後にパラメータが更新されます。DB インスタンスが応答しない場合は、フェイルオーバーなしで再起動することをお勧めします。

以下は、RDS for Microsoft SQL Server DB インスタンスでマルチ AZ 配置を使用するときのいくつかのレコメンデーションです。
+ 本稼働または本稼働前に使用するデータベースでは、以下のオプションを使用することをお勧めします。
  + 高可用性を重視したマルチ AZ 配置
  + 高速で安定したパフォーマンスを実現する「プロビジョンド IOPS」
  + 「汎用」ではなく「メモリ最適化」
+ セカンダリ用のインスタンスにはアベイラビリティーゾーン (AZ) を選択することができません。アプリケーションホストをデプロイするときには、この点を考慮してください。データベースが別の AZ にフェイルオーバーする可能性があるため、アプリケーションホストがデータベースと同じ AZ に含まれない場合があります。このため、特定の AWS リージョン内のすべての AZ 間で、アプリケーションホストのバランスをとることをお勧めします。
+ 最高のパフォーマンスのために、大量のデータをロードするオペレーション中はデータベースミラーリング、Always On AG、またはブロックレベルレプリケーションを有効にしないでください。できる限り高速でデータを更新する必要がある場合は、DB インスタンスをマルチ AZ 配置に変換する前にデータの更新を終了します。
+ 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 または AG を使用してマルチ AZ インスタンスを操作する場合は、`Set Partner Off` コマンドを使用しないでください。このコマンドは、ブロックレベルレプリケーションを使用するインスタンスではサポートされていません。例えば、以下は実行しないでください。

  ```
  --Don't do this
  ALTER DATABASE db1 SET PARTNER off
  ```
+ 復旧モードを `simple` に設定しないでください。例えば、以下は実行しないでください。

  ```
  --Don't do this
  ALTER DATABASE db1 SET RECOVERY simple
  ```
+ 高可用性のためにブロックレベルレプリケーションを使用しない限り、マルチ AZ DB インスタンスに新しいログインを作成するときは、`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 内のプライマリ DB インスタンスを設定する場合は、セカンダリの場所がわかっている必要があります。

![\[セカンダリ AZ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQLSvr-MultiAZ.png)


AWS CLI の `describe-db-instances` コマンド、または RDS API の `DescribeDBInstances` オペレーションを使用して、セカンダリのアベイラビリティーゾーンを表示することもできます。その出力には、スタンバイミラーが配置されているセカンダリ AZ が表示されます。

# データベースミラーリングから Always On 可用性グループへの移行
<a name="USER_SQLServerMultiAZ.Migration"></a>

Microsoft SQL Server Enterprise Edition のバージョン 14.00.3049.1 では、Always On 可用性グループ (AG) はデフォルトで有効になっています。

データベースミラーリング (DBM) から AG に移行するには、まずバージョンを確認します。Enterprise Edition 13.00.5216.0 より前のバージョンの DB インスタンスを使用している場合は、インスタンスにパッチを適用して 13.00.5216.0 以降に変更します。Enterprise Edition 14.00.3049.1 より前のバージョンの DB インスタンスを使用している場合は、インスタンスにパッチを適用して 14.00.3049.1 以降に変更します。

AG を使用するようにミラーリングされた DB インスタンスをアップグレードする場合は、初期にアップグレードを実行し、インスタンスを変更して マルチ AZ を削除してから、もう一度変更してマルチ AZ を追加します。これにより、インスタンスは Always On AG を使用するように変換されます。

# Amazon RDS での Microsoft SQL Server の追加機能
<a name="User.SQLServer.AdditionalFeatures"></a>

次のセクションで、Microsoft SQL Server DB エンジンを実行する Amazon RDS インスタンスの拡張について説明します。

**Topics**
+ [RDS for SQL Server での SQL Server ログインのパスワードポリシーの使用](SQLServer.Concepts.General.PasswordPolicy.Using.md)
+ [Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)
+ [Amazon RDS for SQL Server でのデータベースメールの使用](SQLServer.DBMail.md)
+ [Amazon RDS for SQL Server の tempdb データベースに対するインスタンスストアのサポート](SQLServer.InstanceStore.md)
+ [Amazon RDS for Microsoft SQL Server で拡張イベントを使用する](SQLServer.ExtendedEvents.md)
+ [RDS for SQL Server によるトランザクションログのバックアップへのアクセス](USER.SQLServer.AddlFeat.TransactionLogAccess.md)

# RDS for SQL Server での SQL Server ログインのパスワードポリシーの使用
<a name="SQLServer.Concepts.General.PasswordPolicy.Using"></a>

Amazon RDS では、Microsoft SQL Server を実行している Amazon RDS DB インスタンスのパスワードポリシーを設定できます。これを使用して、SQL Server 認証を使用して DB インスタンスに認証するログインの複雑さ、長さ、およびロックアウト要件を設定します。

## 重要な用語
<a name="SQLServer.Concepts.General.PasswordPolicy.Using.KT"></a>

**「ログイン」 **  
SQL Server では、データベースインスタンスに認証できるサーバーレベルのプリンシパルを**ログイン**と呼びます。他のデータベースエンジンは、このプリンシパルを*ユーザー*と呼ぶ場合があります。RDS for SQL Server では、ログインは SQL Server 認証または Windows 認証を使用して認証できます。

**SQL Server ログイン**  
SQL Server 認証を使用して認証するためにユーザー名とパスワードを使用するログインは、SQL Server ログインです。DB パラメータを使用して設定するパスワードポリシーは、SQL Server ログインにのみ適用されます。

**Windows ログイン**  
Windows プリンシパルに基づき、Windows 認証を使用して認証するログインは Windows ログインです。Active Directory で Windows ログインのパスワードポリシーを設定できます。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

## 各ログインのポリシーの有効化と無効化
<a name="SQLServer.Concepts.General.PasswordPolicy.EnableDisable"></a>

 各 SQL Server ログインには、`CHECK_POLICY` および `CHECK_EXPIRATION` のフラグがあります。デフォルトでは、新しいログインは、`CHECK_POLICY` を `ON` に設定し、`CHECK_EXPIRATION` を `OFF` に設定して作成されます。

`CHECK_POLICY` がログインについて有効な場合、RDS for SQL Server は複雑さと最小長の要件に照らしてパスワードを検証します。ロックアウトポリシーも適用されます。`CHECK_POLICY` と `CHECK_EXPIRATION` を有効にする T-SQL ステートメントの例: 

```
ALTER LOGIN [master_user] WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
```

`CHECK_EXPIRATION` が有効になっている場合、パスワードはパスワード有効期間ポリシーの対象です。`CHECK_POLICY` と `CHECK_EXPIRATION`が設定されているかどうかを確認する T-SQL ステートメント:

```
SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
```

## パスワードポリシーパラメータ
<a name="SQLServer.Concepts.General.PasswordPolicy.PWDPolicyParams"></a>

すべてのパスワードポリシーパラメータは動的であり、有効にするために DB を再起動する必要はありません。次の表に、SQL Server ログインのパスワードポリシーを変更するために設定できる DB パラメータを示します。


****  

| DB パラメータ | 説明 | 許可された値 | デフォルト値 | 
| --- | --- | --- | --- | 
| rds.password\$1complexity\$1enabled | SQL Server ログインのパスワードを作成または変更するときは、パスワードの複雑さに関する要件を満たす必要があります。次の制約を満たす必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.PasswordPolicy.Using.html)  | 0、1 | 0 | 
| rds.password\$1min\$1length | SQL Server ログインのパスワードに必要な最小文字数。 | 0-14 | 0 | 
| rds.password\$1min\$1age | ユーザーが SQL Server ログインパスワードを変更するまでに使用する必要がある最小日数。パスワードは、0 に設定した直後に変更できます。 | 0～998 | 0 | 
| rds.password\$1max\$1age | SQL Server ログインパスワードを使用できる最大日数。その後、ユーザーがパスワードを変更する必要があります。0 に設定されると、パスワードは期限切れになりません。 | 0～999 | 42 | 
| rds.password\$1lockout\$1threshold | SQL Server ログインがロックアウトされる原因となるログイン試行の連続失敗回数。 | 0～999 | 0 | 
| rds.password\$1lockout\$1duration | ロックアウトされた SQL Server ログインがロック解除されるまでに待機する必要がある時間 (分)。 | 1～60 | 10 | 
| rds.password\$1lockout\$1reset\$1counter\$1after | ログイン試行に失敗してから、失敗したログイン試行カウンターが 0 にリセットされるまでに経過する必要がある時間 (分)。 | 1～60 | 10 | 

**注記**  
SQL Server パスワードポリシーの詳細については、「[パスワードポリシー](https://learn.microsoft.com/en-us/sql/relational-databases/security/password-policy)」を参照してください。  
パスワードの複雑さと最小長ポリシーは、含まれているデータベースの DB ユーザーにも適用されます。詳細については、「[含まれているデータベース](https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases)」を参照してください。

パスワードポリシーパラメータには、次の制約が適用されます。
+ `rds.password_max_age` が 0 に設定されていない限り、`rds.password_min_age` パラメータは `rds.password_max_age parameter` より小さい必要があります。
+ `rds.password_lockout_reset_counter_after` パラメータは、`rds.password_lockout_duration` パラメータ以下である必要があります。
+ `rds.password_lockout_threshold` が 0 に設定されている場合、`rds.password_lockout_duration` と `rds.password_lockout_reset_counter_after` は適用されません。

### 既存のログインに関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.ExistingLogins"></a>

インスタンスのパスワードポリシーを変更した後、ログイン用の既存のパスワードは、新しいパスワードの複雑さと長さの要件に対して遡及的に評価**されません**。新しいパスワードのみが新しいポリシーに対して検証されます。

SQL Server は、既存のパスワードの有効期間要件を評価**します**。

パスワードポリシーが変更されると、パスワードがすぐに期限切れになる可能性があります。例えば、ログインの `CHECK_EXPIRATION` が有効であり、パスワードが 100 日前に変更され、`rds.password_max_age` パラメータを 5 日に設定した場合、パスワードは直ちに期限切れになり、次回のログイン時にパスワードを変更する必要があります。

**注記**  
RDS for SQL Server は、パスワード履歴ポリシーをサポートしていません。履歴ポリシーは、以前に使用されたパスワードを再利用したログインを禁止します。

### マルチ AZ 配置に関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.MAZPasswords"></a>

マルチ AZ インスタンスの失敗したログイン試行カウンターとロックアウト状態は、ノード間でレプリケートされません。マルチ AZ インスタンスがフェイルオーバーしたときにログインがロックアウトされていた場合、新しいノードでログインがすでにロック解除されている可能性があります。

# マスターログインのパスワードに関する考慮事項
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin"></a>

RDS for SQL Server DB インスタンスを作成する場合、マスターユーザーパスワードはパスワードポリシーに対して評価されません。新しいマスターパスワードは、マスターユーザーに操作を実行するとき、特に `ModifyDBInstance` コマンドで `MasterUserPassword` を設定するときにも、パスワードに対して評価されません。いずれの場合も、パスワードポリシーを満たさないマスターユーザーのパスワードを設定でき、その場合でも操作は成功します。ポリシーが満たされない場合、RDS は強力なパスワードの設定を推奨して、RDS イベントのレイズを試みます。マスターユーザーには強力なパスワードのみを使用してください。

マスターユーザーのパスワードがパスワードポリシーの要件を満たしていない場合、RDS は次のイベントメッセージの生成を試みます。
+ マスターユーザーは作成されましたが、パスワードがパスワードポリシーの最小長要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーは作成されましたが、パスワードがパスワードポリシーの複雑さ要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーのパスワードはリセットされましたが、パスワードがパスワードポリシーの最小長要件を満たしていません。より強力なパスワードの使用を検討してください。
+ マスターユーザーのパスワードはリセットされましたが、パスワードがパスワードポリシーの複雑さ要件を満たしていません。より強力なパスワードの使用を検討してください。

デフォルトでは、マスターユーザーは `CHECK_POLICY` と `CHECK_EXPIRATION` が `OFF` に設定されて作成されます。パスワードポリシーをマスターユーザーに適用するには、DB インスタンスの作成後、マスターユーザーに対してこれらのフラグを手動で有効にする必要があります。これらのフラグを有効にしたら、SQL Server でマスターユーザーのパスワードを直接 (T-SQL ステートメントや SSMS などを介して) 変更し、新しいパスワードをパスワードポリシーに照らして検証します。

**注記**  
マスターユーザーがロックアウトされた場合は、`ModifyDBInstance` コマンドを使用してマスターユーザーのパスワードをリセットすることで、ユーザーのロックを解除できます。

## マスターユーザーパスワードの変更
<a name="SQLServer.Concepts.General.PasswordPolicy.MasterLogin.Reset"></a>

マスターユーザーのパスワードは、[ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) コマンドを使用して変更できます。

**注記**  
マスターユーザーのパスワードをリセットすると、RDS はマスターユーザーのさまざまなアクセス許可をリセットし、マスターユーザーは特定のアクセス許可を失う可能性があります。マスターユーザーのパスワードをリセットすると、マスターユーザーがロックアウトされた場合もロックが解除されます。

RDS はマスターユーザーの新しいパスワードを検証し、パスワードがポリシーを満たさない場合は RDS イベントの発行を試みます。RDS は、パスワードポリシーを満たさない場合でもパスワードを設定します。

# Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合
<a name="User.SQLServer.Options.S3-integration"></a>

Amazon RDS for SQL Server を実行する DB インスタンスと Amazon S3 バケットの間でファイルを転送できます。これにより、BULK INSERT などの SQL Server 特性で Amazon S3 を使用することができます。例えば、Amazon S3 から .csv、.xml、.txt、その他ファイルを DB インスタンスホストにダウンロードして、`D:\S3\` からデータベースにデータをインポートできます。全てのファイルは DB インスタンスの `D:\S3\` に保存されます。

以下の制限が適用されます。

**注記**  
RDS ホストと S3 間のトラフィックは、S3 を使用するすべての SQL Server 機能の RDS 内部 VPC エンドポイントを経由します。このトラフィックは RDS インスタンスエンドポイント ENI を使用しません。S3 バケットポリシーは、ネットワーク条件によって RDS トラフィックを制限することはできません。
+ `D:\S3` フォルダ内のファイルは、マルチ AZ インスタンスでのフェイルオーバー後にスタンバイレプリカで削除されます。詳細については、「[S3 統合のマルチ AZ の制限](#S3-MAZ)」を参照してください。
+ DB インスタンスと S3 バケットが同じ AWS リージョンに存在する必要があります。
+ 一度に複数の S3 統合タスクを実行する場合、タスクは並列ではなく順次に実行されます。
**注記**  
S3 統合タスクは、ネイティブバックアップおよび復元タスクと同じキューを共有します。このキューでは、一度に最大2つのタスクまで同時進行させることができます。したがって、実行中の 2 つのネイティブバックアップおよび復元タスクによって S3 統合タスクがブロックされます。
+ S3 統合機能を復元インスタンスで再度有効にする必要があります。S3 統合は元のインスタンスから復元インスタンスに伝搬されることはありません。`D:\S3` のファイルは、復元インスタンスで削除されます。
+ DB インスタンスへのダウンロードは、最大 100 ファイルまでです。言い換えれば、`D:\S3\` 内には 100 ファイル以上は入れておけません。
+ ファイル拡張子がない、または次のファイル拡張子があるファイルのみがダウンロードできます。.abf、.asdatabase、.bcp、.configsettings、.csv、.dat、.deploymentoptions、.deploymenttargets、.fmt、.info、.ispac、.lst、.tbl、.txt、.xml、および.xmla
+ S3 バケットは、関連の AWS Identity and Access Management (IAM) 役割に関連した同じオーナーである必要があります。したがって、クロスアカウント S3 統合はサポートされていません。
+ S3 バケットは一般に公開できません。
+ RDS から S3 へのアップロードのファイルサイズは、1 ファイルあたり 50 GB に制限されます。
+ S3 から RDS へのダウンロードのファイルサイズは、S3 でサポートされている最大サイズに制限されます。

**Topics**
+ [RDS for SQL Server を S3 と統合するための前提条件](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [RDS for SQL Server と S3 の統合を有効にする](Appendix.SQLServer.Options.S3-integration.enabling.md)
+ [RDS for SQL Server と Amazon S3 間のファイル転送](Appendix.SQLServer.Options.S3-integration.using.md)
+ [RDS DB インスタンスでのファイル一覧表示](Appendix.SQLServer.Options.S3-integration.using.listing-files.md)
+ [RDS DB インスタンスでのファイル削除](Appendix.SQLServer.Options.S3-integration.using.deleting-files.md)
+ [ファイル転送タスクのステータスをモニタリングする](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)
+ [タスクのキャンセル](Appendix.SQLServer.Options.S3-integration.canceltasks.md)
+ [S3 統合のマルチ AZ の制限](#S3-MAZ)
+ [RDS for SQL Server と S3 の統合を無効にする](Appendix.SQLServer.Options.S3-integration.disabling.md)

Amazon S3 でのファイルの操作の詳細については、「[Amazon Simple Storage Service の開始方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3)」を参照してください。

# RDS for SQL Server を S3 と統合するための前提条件
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

開始する前に、使用するS3バケットを選択してください。また、許可を追加してRDS DBインスタンスがS3バケットにアクセスできるようにしてください。このアクセスを設定するには、IAMポリシーとIAMロールの両方を作成します。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Amazon S3にアクセスするための IAM ポリシーを作成します。**

1. [IAMマネジメントコンソール](https://console.aws.amazon.com/iam/home?#home)のナビゲーションペインで、**ポリシー** を選択します。

1. 新しいポリシーを作成し、**ビジュアルエディタ**タブを使用して以下の手順を行ってください。

1. **サービス**のため、**S3**を入力して**S3**サービスを選択します。

1. **実行**のため，以下を選択してDBインスタンス要件にアクセスできるようにします。
   + `ListAllMyBuckets` – 必須
   + `ListBucket` – 必須
   + `GetBucketAcl` – 必須
   + `GetBucketLocation` – 必須
   + `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
   + `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. [**リソース**] では、表示されるオプションは、前の手順で選択した内容により異なります。[**バケット**]、[**オブジェクト**]、またはその両方に対するオプションが表示されます。それぞれ、適切な Amazon リソースネーム (ARN) を加えてください。

   [**バケット**] は、使用したいバケットに対する ARN を追加します。例えば、バケットの名前が *amzn-s3-demo-bucket* の場合、ARN を `arn:aws:s3:::amzn-s3-demo-bucket` に設定します。

   [**オブジェクト**] は、バケットの ARN を入力してから以下のいずれかを選択します。
   + 特定のバケット内のすべてのファイルへのアクセスを許可するには、[**バケット名**] および [**オブジェクト名**] の両方に対して [**すべて**] を選択してください。
   + バケット内の特定のファイルやフォルダへのアクセスを許可する場合は、SQL Server からのアクセスを希望する特定のバケットやオブジェクトに、ARN を提供します。

1. ポリシーの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ポリシーの簡略設定ガイドです。IAM ポリシーを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)を参照してください。

**前の手順からの IAM ポリシーを使用する IAM ロールを作成します。**

1. [[IAM 管理コンソール](https://console.aws.amazon.com/iam/home?#home)] で、ナビゲーションペインから [**ロール**] を選択します。

1. 新しい IAM ロールを作成し、コンソール内に表示された以下のオプションを選択してください。
   + **AWS サービス**
   + **RDS**
   + **RDS – ロールをデータベースに加える**

   次に、下部の [**次: 許可**] を選択します。

1. **アクセス権限ポリシーをアタッチする** で、事前に作成した IAM ポリシーの名前を入力してください。次にリストからポリシーを選択します。

1. ロールの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ロールの簡略設定ガイドです。ロールを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Amazon RDS に Amazon S3 バケットへのアクセスを付与するには、次のプロセスを使用します。

1. S3 バケットに Amazon RDS アクセスを付与する IAM ポリシーを作成します。

1. S3 バケットにアクセスするには、お客様に代わって Amazon RDS が引き受けることのできる IAM ロールを作成します。

   詳細については、*IAM ユーザーガイド*の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

1. 作成した IAM ポリシーを、作成した IAM ロールにアタッチします。

**IAM ポリシーを作成するには**

DB インスタンスが必要とするアクセスを付与するための適切なアクションが含まれるようにしてください。
+ `ListAllMyBuckets` – 必須
+ `ListBucket` – 必須
+ `GetBucketAcl` – 必須
+ `GetBucketLocation` – 必須
+ `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
+ `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. 以下の AWS CLI コマンドでは、これらのオプションを指定して、`rds-s3-integration-policy` という名前の IAM ポリシーを作成します。*amzn-s3-demo-bucket* という名前のバケットへのアクセスを許可します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Windows の場合:

   インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

   最初に、以下の許可ポリシーで `policy.json` ファイルを作成してください。

------
#### [ JSON ]

****  

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

------

   次のコマンドを使用してポリシーを作成します。

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. ポリシーが作成されたら、そのポリシーの Amazon リソースネーム (ARN) を書き留めます。この ARN は、後のステップで必要になります。

**IAM ロールを作成するには**
+ 次の AWS CLI コマンドでは、この目的で `rds-s3-integration-role` IAM ロールを作成します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

  最初に、次のポリシーで、`assume_role_policy.json` ファイルを作成します。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

  次に、以下のコマンドを使用して IAM ロールを作成します。

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example グローバル条件コンテキストキーを使用した IAM ロールの作成**  

  リソースポリシー内では [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)に対する最も効果的な保護方法です。

  両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合、同じポリシーステートメントで使用する際に、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントで同じアカウント ID を使用する必要があります。
  + 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
  + そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

  ポリシーでは、ロールにアクセスするリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを必ず使用してください。S3 統合の場合、次の例に示すように DB インスタンスの ARN を必ず含めてください。

  Linux、macOS、Unix の場合:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  `assume_role_policy.json` にグローバル条件コンテキストキーを追加します。

------
#### [ JSON ]

****  

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

------

**IAM ポリシーを IAM ロールにアタッチするには**
+ 以下の AWS CLI コマンドでは、`rds-s3-integration-role` という名前のロールにこのポリシーをアタッチします。`your-policy-arn` を、以前のステップで書き留めたポリシー ARN に置き換えます。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws iam attach-role-policy \
  	   --policy-arn your-policy-arn \
  	   --role-name rds-s3-integration-role
  ```

  Windows の場合:

  ```
  aws iam attach-role-policy ^
  	   --policy-arn your-policy-arn ^
  	   --role-name rds-s3-integration-role
  ```

# RDS for SQL Server と S3 の統合を有効にする
<a name="Appendix.SQLServer.Options.S3-integration.enabling"></a>

このセクションでは、Amazon RDS for SQL Server と Amazon S3 の統合を有効にする方法を確認できます。S3 統合を行うには、`S3_INTEGRATION` FeatureName パラメータを使用する前に、事前に作成した IAM ロールに DB インスタンスが関連付けられていなければなりません。

**注記**  
IAM ロールを DB インスタンスに追加するには、DB インスタンスのステータスが [**有効**] である必要があります。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.enabling.console"></a>

**IAM ロールを DB インスタンスに関連付けるには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS for SQL Server DB インスタンスの名前を選択して詳細を表示します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、[**このインスタンスに IAM ロールを追加**] で追加する IAM ロールを選択します。

1. [**機能**] で、[**S3\$1INTEGRATION**] を選択します。  
![\[S3_INTEGRATION ロールを追加する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. [**Add role**] を選択します。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.enabling.cli"></a>

**IAM ロールを RDS for SQL Server DB インスタンスに追加するには**
+ 以下の AWS CLI コマンドは、IAM ロールを `mydbinstance` と名前の付いた RDS for SQL Server DB インスタンスに追加します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-role-to-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Windows の場合:

  ```
  aws rds add-role-to-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  `your-role-arn` を、以前のステップで書き留めたロール ARN に置き換えます。`S3_INTEGRATION` オプションには `--feature-name` が指定されている必要があります。

# RDS for SQL Server と Amazon S3 間のファイル転送
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

Amazon RDS ストアドプロシージャを使用して、Amazon S3 と RDS DB インスタンス間でファイルのダウンロードおよびアップロードを行います。また、Amazon RDS ストアドプロシージャを使用して、RDS インスタンスのファイルを記入および削除することができます。

S3 からダウンロードまたは S3 へアップロードするファイルは、`D:\S3` フォルダに保存します。このフォルダは、ファイルにアクセスする際に使用できる唯一のフォルダとなります。ダウンロード時に対象フォルダを設定する際に作成したサブフォルダ内でファイルを構成することができます。

ストアドプロシージャによっては、Amazon Resource Name (ARN) を S3 バケットおよびファイルに指定する必要があります。ARN の形式は `arn:aws:s3:::amzn-s3-demo-bucket/file_name` です。Amazon S3 には、ARN のアカウント番号または AWS リージョンは不要です。

S3 統合タスクは順次実行され、同じキューをネイティブバックアップとして共有し、タスクの復元を行います。このキューでは、一度に最大2つのタスクまで同時進行させることができます。タスクが処理を開始するまでに、最大 5 分かかります。

## Amazon S3 バケットから SQL Server DB インスタンスにファイルをダウンロードする
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

S3 バケットから RDS for SQL Server DB インスタンスにファイルをダウンロードするには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_download_from_s3` を使用してください。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必須  |  ダウンロードするファイルの S3 ARN 例: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  オプション  |  RDS インスタンスのファイルパス。指定されなかった場合、ファイルパスは `D:\S3\<filename in s3>` です。RDS は、絶対パスと相対パスをサポートしています。サブフォルダを作成したい場合、ファイルパス内に含めます。  | 
|  `@overwrite_file`  |  INT  |  0  |  オプション  | 既存のファイルを上書きしてください。 0 = 上書きしないでください 1 = 上書きしてください | 

ファイル拡張子のないファイルと、ファイル拡張子が .bcp、.csv、.dat、.fmt、.info、.lst、.tbl、.txt、.xml のファイルをダウンロードできます。

**注記**  
SQL Server Integration Services が有効になっている場合、ファイル拡張子が .ispac のファイルのダウンロードがサポートされます。SSIS の有効化の詳細については、「[SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)」を参照してください。  
SQL Server Analysis Services が有効になっている場合、ファイル拡張子が .abf、.asdatabase、.configsettings、.deploymentoptions、.deploymenttargets、.xmla のファイルのダウンロードがサポートされます。SSAS の有効化の詳細については、「[SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)」を参照してください。

以下の例は S3 からファイルをダウンロードするためのストアドプロシージャを表します。

```
exec msdb.dbo.rds_download_from_s3
	    @s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/bulk_data.csv',
	    @rds_file_path='D:\S3\seed_data\data.csv',
	    @overwrite_file=1;
```

例 `rds_download_from_s3` の操作は、フォルダがまだない場合、`seed_data` に `D:\S3\` という名前のフォルダを作成します。次に例ではソースファイル `bulk_data.csv` を S3 から DB インスタンスの `data.csv` という名前の新しいファイルにダウンロードします。`@overwrite_file` パラメータが `1` に設定されているため、すでにファイルが存在する場合は上書きされます。

## SQL Server DB インスタンスから Amazon S3 バケットにファイルをアップロードする
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

RDS for SQL Server DB インスタンスから S3 バケットにファイルをアップロードするには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_upload_to_s3` を以下のパラメータで使用してください。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必須  |  ファイルの S3 ARN が S3 内で作成されます (例: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`)。  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必須  | S3 にアップロードするファイルのファイルパス。絶対パスと相対パスの両方をサポートしています。 | 
|  `@overwrite_file`  |  INT  |  –  |  オプション  |  既存のファイルを上書きしてください。 0 = 上書きしないでください 1 = 上書きしてください  | 

以下の例では、`data.csv` という名前のファイルを `D:\S3\seed_data\` 内の指定の場所から、ARN が指定する S3 バケットに、ファイル `new_data.csv` をアップロードします。

```
exec msdb.dbo.rds_upload_to_s3 
		@rds_file_path='D:\S3\seed_data\data.csv',
		@s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/new_data.csv',
		@overwrite_file=1;
```

@overwrite\$1file パラメータが `1` に設定されているため、ファイルが S3 にすでに存在している場合は上書きされます。

# RDS DB インスタンスでのファイル一覧表示
<a name="Appendix.SQLServer.Options.S3-integration.using.listing-files"></a>

DB インスタンスで使用可能なファイルをリスト表示するには、ストアドプロシージャと機能の両方を使用します。最初に、以下のストアドプロシージャを実行して `D:\S3\` 内のファイルから詳細を集めます。

```
exec msdb.dbo.rds_gather_file_details;
```

ストアドプロシージャは、タスクの ID を返します。保管のタスクと同様、ストアドプロシージャも同期せずに実行されます。タスクのステータスが `SUCCESS` になるとすぐに、`rds_fn_list_file_details` 機能のタスク ID を使用して、 D:\$1S3\$1 内の既存のファイルやディレクトリのリスト表示ができます。以下を参照してください。

```
SELECT * FROM msdb.dbo.rds_fn_list_file_details(TASK_ID);
```

`rds_fn_list_file_details` 機能は、次の列があるテーブルを返します。


| 出力パラメータ | 説明 | 
| --- | --- | 
| filepath | ファイルの絶対パス (例: D:\$1S3\$1mydata.csv) | 
| size\$1in\$1bytes | ファイルサイズ (バイト単位) | 
| last\$1modified\$1utc | UTC 形式での最終変更を行った日時 | 
| is\$1directory | アイテムがディレクトリ (true/false) かどうかを表示するオプション | 

# RDS DB インスタンスでのファイル削除
<a name="Appendix.SQLServer.Options.S3-integration.using.deleting-files"></a>

DB インスタンスで使用可能なファイルを削除するには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_delete_from_filesystem` を以下のパラメータで使用します。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必須  | 削除するファイルのファイルパス。絶対パスと相対パスの両方をサポートしています。 | 
|  `@force_delete`  |  INT  | 0 |  オプション  |  ディレクトリを削除するには、このフラグが `1` に含まれ設定されている必要があります。 `1` = ディレクトリを削除する ファイルを削除する場合、このパラメータは無視されます。  | 

ディレクトリを削除するには、`@rds_file_path` がバックスラッシュ (`\`) で終了し、`@force_delete` が `1` に設定される必要があります。

次の例では、ファイル `D:\S3\delete_me.txt` が削除されます。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\delete_me.txt';
```

次の例では、ディレクトリ `D:\S3\example_folder\` が削除されます。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\example_folder\',
    @force_delete=1;
```

# ファイル転送タスクのステータスをモニタリングする
<a name="Appendix.SQLServer.Options.S3-integration.using.monitortasks"></a>

S3 統合タスクのステータスを追跡するには、`rds_fn_task_status` 機能を呼び出してください。2 つのパラメータを使用します。1 つめのパラメータは常に `NULL` を選択してください。これは、S3 統合に適用されないためです。2 つめのパラメータは、タスク ID を受け入れます。

全タスクのリストを見るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータを `0` に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

特定のタスクを受け取るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータをタスク ID に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 機能は次の情報を返します。


|  出力パラメータ  |  説明  | 
| --- | --- | 
|  `task_id`  |  タスクの ID。  | 
|  `task_type`  |  S3 統合では、タスクには以下のタスクタイプがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `database_name`  | S3 統合タスクには適用できません。 | 
|  `% complete`  |  タスクの進行状況の割合。  | 
|  `duration(mins)`  |  タスクにかかった時間 (分単位)。  | 
|  `lifecycle`  |  タスクのステータス。有効な状態には以下のものがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `task_info`  |  タスクに関する追加情報。処理中にエラーが発生した場合、この列にエラーに関する情報が含まれます。  | 
|  `last_updated`  |  タスクのステータスが最後に更新された日時。  | 
|  `created_at`  |  タスクが作成された日時。  | 
|  `S3_object_arn`  |  S3 オブジェクトの ARN はダウンロードまたはアップロードされます。  | 
|  `overwrite_S3_backup_file`  |  S3 統合タスクには適用できません。  | 
|  `KMS_master_key_arn`  |  S3 統合タスクには適用できません。  | 
|  `filepath`  |  RDS DB インスタンスのファイルパス。  | 
|  `overwrite_file`  |  既存のファイルが上書きされるかどうかを表示するオプション  | 
|  `task_metadata`  |  S3 統合タスクには適用できません。  | 

# タスクのキャンセル
<a name="Appendix.SQLServer.Options.S3-integration.canceltasks"></a>

S3 統合タスクをキャンセルするには、`msdb.dbo.rds_cancel_task` パラメータで `task_id` ストアドプロシージャを使用します。進行中の削除およびリスト作成タスクは、キャンセルできません。以下の例は、タスクをキャンセルするリクエストを示します。

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

すべてのタスクとそのタスク ID の概要を表示するには、 `rds_fn_task_status` に記載のように [ファイル転送タスクのステータスをモニタリングする](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md) 機能を使用してください。

## S3 統合のマルチ AZ の制限
<a name="S3-MAZ"></a>

マルチ AZ インスタンスでは、`D:\S3` フォルダ内のファイルはフェイルオーバー後にスタンバイレプリカから削除されます。フェイルオーバーは、例えば、インスタンスクラスの変更やエンジンバージョンのアップグレードなど、DB インスタンスの変更中に計画できます。または、プライマリの停止中にフェイルオーバーが予定外になることがあります。

**注記**  
`D:\S3` フォルダをファイルストレージに使用することはお勧めしません。ベストプラクティスは、作成したファイルを Amazon S3 にアップロードして耐久性を保持し、データをインポートする必要があるときにファイルをダウンロードすることです。

最後のフェイルオーバー時間を決定するには、`msdb.dbo.rds_failover_time` ストアドプロシージャを使用できます。詳細については、「[Amazon RDS for SQL Server の最終フェイルオーバー時間の決定](Appendix.SQLServer.CommonDBATasks.LastFailover.md)」を参照してください。

**Example 最近のフェイルオーバーがない例**  
この例は、エラーログに最近のフェイルオーバーが存在しない場合の出力を示しています。2020-04-29 23:59:00.01 以降、フェイルオーバーは発生していません。  
したがって、`rds_delete_from_filesystem` ストアドプロシージャを使用して削除されていない、その時間の後にダウンロードされたすべてのファイルは、現在のホストで引き続きアクセスできます。それ以前にダウンロードされたファイルも利用可能になる場合があります。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example 最近のフェイルオーバーの**  
この例は、エラーログにフェイルオーバーが存在する場合の出力を示しています。最新のフェイルオーバーは、2020-05-05 18:57:51.89 に発生しています。  
`rds_delete_from_filesystem` ストアドプロシージャを使用して削除されていない、その時間以降にダウンロードされたすべてのファイルは、現在のホストで引き続きアクセスできます。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# RDS for SQL Server と S3 の統合を無効にする
<a name="Appendix.SQLServer.Options.S3-integration.disabling"></a>

ここでは、Amazon RDS for SQL Server と Amazon S3 の統合を無効にする方法について説明します。S3 統合を無効化するときは、`D:\S3\` のファイルは削除されません。

**注記**  
IAM ロールを DB インスタンスから削除するには、DB インスタンスのステータスが `available` である必要があります。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.disabling.console"></a>

**IAM ロールと DB インスタンスの関連を外す**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS for SQL Server DB インスタンスの名前を選択して詳細を表示します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、削除する IAM ロールを選択します。

1. [**削除**] を選択します。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.disabling.cli"></a>

**IAM ロールを RDS for SQL Server DB インスタンスから削除するには**
+ 以下の AWS CLI コマンドが、IAM ロールを `mydbinstance` と名前の付いたRDS for SQL Server DB インスタンスから削除します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-role-from-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Windows の場合:

  ```
  aws rds remove-role-from-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  `your-role-arn` を、`--feature-name` オプションにとって適した IAM ロール ARN に交換します。

# Amazon RDS for SQL Server でのデータベースメールの使用
<a name="SQLServer.DBMail"></a>

データベースメールを使用して、SQL Server データベースインスタンスの Amazon RDS からユーザーに E メールメッセージを送信できます。メッセージには、ファイルとクエリ結果を含めることができます。データベースメールは、次のコンポーネントを含みます。
+ **設定オブジェクトおよびセキュリティオブジェクト** – これらのオブジェクトは 、プロファイルとアカウントを作成し、`msdb` データベースに保存されます。
+ **メッセージングオブジェクト** – これらのオブジェクトは、メッセージの送信に使用する [sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) ストアドプロシージャと、メッセージに関する情報を保持するデータ構造を含みます。それらは `msdb` データベースに保存されます。
+ **ログオブジェクトと監査オブジェクト** – データベースメールは、`msdb` データベースと Microsoft Windows アプリケーションイベントログにログ情報を書き込みます。
+ **データベースメール 実行可能ファイル** – `DatabaseMail.exe` は、`msdb` データベースのキューから読み取り、E メールメッセージを送信します。

RDS は、Web Edition、Standard Edition、および Enterprise Edition の SQL Server のすべてのバージョンで、データベースメールをサポートします。

## 制約事項
<a name="SQLServer.DBMail.Limitations"></a>

SQL Server DB インスタンスでのデータベースメールの使用には、次の制約事項が適用されます。
+ データベースメールは、SQL Server Express Edition ではサポートされていません。
+ データベースメールの設定パラメータの変更はサポートされていません。プリセット (デフォルト) の値を表示するには、[sysmail\$1help\$1configure\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-help-configure-sp-transact-sql) ストアドプロシージャを使用します。
+ 添付ファイルは、完全にはサポートされていません。詳細については、「[添付ファイルの使用](#SQLServer.DBMail.Files)」を参照してください。
+ 添付ファイルの最大サイズは 1 MB です。
+ データベースメールは、マルチ AZ DB インスタンスで追加の設定が必要です。詳細については、「[マルチ AZ 配置に関する考慮事項](#SQLServer.DBMail.MAZ)」を参照してください。
+ 定義済み演算子に E メールメッセージを送信する SQL Server エージェントの設定はサポートされていません。

# データベースメールの有効化
<a name="SQLServer.DBMail.Enable"></a>

DB インスタンスでデータベースメールを有効にするには、次の手順に従います。

1. 新しいパラメータグループを作成します。

1. パラメータグループを変更して、`database mail xps` パラメータを 1 に設定します。

1. パラメータグループを DB インスタンスに関連付けます。

## データベースメールパラメータグループの作成
<a name="DBMail.CreateParamGroup"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応する `database mail xps` パラメータのパラメータグループを作成します。

**注記**  
既存のパラメータグループを変更することもできます。「[データベースメールを有効にするパラメータの変更](#DBMail.ModifyParamGroup)」 の手順に従います。

### コンソール
<a name="DBMail.CreateParamGroup.Console"></a>

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[パラメータグループ]** を選択します。

1. [**Create parameter group**] を選択します。

1. [**パラメータグループの作成**] ペインで、次の操作を行います。

   1. [**パラメータグループファミリー**] で、[**sqlserver-se-13.0**] を選択します。

   1. [**グループ名**] に、パラメータグループの識別子 (**dbmail-sqlserver-se-13** など) を入力します。

   1. [**説明**] に「**Database Mail XPs**」と入力します。

1. **[作成]** を選択します。

### CLI
<a name="DBMail.CreateParamGroup.CLI"></a>

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "Database Mail XPs"
  ```

  Windows の場合:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "Database Mail XPs"
  ```

## データベースメールを有効にするパラメータの変更
<a name="DBMail.ModifyParamGroup"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループの `database mail xps` パラメータを変更します。

データベースメールを有効にするには、`database mail xps` パラメータを 1 に設定します。

### コンソール
<a name="DBMail.ModifyParamGroup.Console"></a>

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**パラメータグループ**] を選択します。

1. [**dbmail-sqlserver-se-13**] などのパラメータグループを選択します。

1. [**パラメータ**] で、パラメータのリストを **mail** でフィルタ処理します。

1. [**データベースメール xps**] を選択します。

1. [**Edit parameters**] を選択します。

1. **1** と入力します。

1. **[Save changes]** (変更の保存) をクリックします。

### CLI
<a name="DBMail.ModifyParamGroup.CLI"></a>

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

  Windows の場合:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"
  ```

## パラメータグループと DB インスタンスの関連付け
<a name="DBMail.AssocParamGroup"></a>

AWS マネジメントコンソール または AWS CLI を使用して、データベースメールパラメータグループを DB インスタンスに関連付けることができます。

### コンソール
<a name="DBMail.AssocParamGroup.Console"></a>

データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれを関連付けます。詳しくは、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

### CLI
<a name="DBMail.AssocParamGroup.CLI"></a>

データベースメールパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

**データベースメールパラメータグループを使用して DB インスタンスを作成するには**
+ パラメータグループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --db-parameter-group-name dbmail-sqlserver-se-13
  ```

**DB インスタンスを変更し、データベースメールパラメータグループを関連付けるには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --db-parameter-group-name dbmail-sqlserver-se-13 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-parameter-group-name dbmail-sqlserver-se-13 ^
      --apply-immediately
  ```

# データベースメールの設定
<a name="SQLServer.DBMail.Configure"></a>

データベースメールを設定するには、次のタスクを実行します。

1. データベースメールプロファイルを作成します。

1. データベースメールアカウントを作成します。

1. データベースメールアカウントをデータベースメールプロファイルに追加します。

1. データベースメールプロファイルにユーザーを追加します。

**注記**  
データベースメールを設定するには、`execute` データベースのストアドプロシージャに `msdb` アクセス権限があることを確認します。

## データベースメールプロファイルの作成
<a name="SQLServer.DBMail.Configure.Profile"></a>

データベースメールプロファイルを作成するには、[sysmail\$1add\$1profile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profile-sp-transact-sql) ストアドプロシージャを使用します。次の例では、`Notifications` という名前のプロファイルを作成します。

**プロファイルを作成するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profile_sp  
      @profile_name         = 'Notifications',  
      @description          = 'Profile used for sending outgoing notifications using Amazon SES.';
  GO
  ```

## データベースメールアカウントの作成
<a name="SQLServer.DBMail.Configure.Account"></a>

データベースメールアカウントを作成するには、[sysmail\$1add\$1account\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-account-sp-transact-sql) ストアドプロシージャを使用します。次の例では、Amazon Simple Email Service を使用して、プライベート VPC の RDS for SQL Server DB インスタンスに `SES` という名前のアカウントを作成します。

Amazon SES を使用するには、以下のパラメータが必要です。
+ `@email_address` – Amazon SES 検証済みの アイデンティティ。詳細については、[Verified identities in Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/verify-addresses-and-domains.html) を参照してください。
+ `@mailserver_name` – Amazon SES SMTP エンドポイント。詳細については、[Amazon SES SMTP エンドポイントへの接続](https://docs.aws.amazon.com/ses/latest/dg/smtp-connect.html)を参照してください。
+ `@username` – Amazon SES SMTP ユーザー名。詳細については、[Amazon SES SMTP 認証情報の取得](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html)を参照してください。

  AWS Identity and Access Management ユーザー名を使用しないでください。
+ `@password` – Amazon SES SMTP パスワード。詳細については、[Amazon SES SMTP 認証情報の取得](https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html)を参照してください。

**アカウントを作成するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_account_sp
      @account_name        = 'SES',
      @description         = 'Mail account for sending outgoing notifications.',
      @email_address       = 'nobody@example.com',
      @display_name        = 'Automated Mailer',
      @mailserver_name     = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce.amazonaws.com',
      @port                = 587,
      @enable_ssl          = 1,
      @username            = 'Smtp_Username',
      @password            = 'Smtp_Password';
  GO
  ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

## データベースメールアカウントのデータベースメールプロファイルへの追加
<a name="SQLServer.DBMail.Configure.AddAccount"></a>

データベースメールアカウントをデータベースメールプロファイルに追加するには、[sysmail\$1add\$1profileaccount\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-profileaccount-sp-transact-sql) ストアドプロシージャを使用します。次の例では、`SES` アカウントを `Notifications` プロファイルに追加します。

**プロファイルにアカウントを追加するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
      @profile_name        = 'Notifications',
      @account_name        = 'SES',
      @sequence_number     = 1;
  GO
  ```

## データベースメールプロファイルへのユーザーの追加
<a name="SQLServer.DBMail.Configure.AddUser"></a>

`msdb` データベースプリンシパルにデータベースメールプロファイルを使用するアクセス権限を付与するには、[sysmail\$1add\$1principalprofile\$1sp](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sysmail-add-principalprofile-sp-transact-sql) ストアドプロシージャを使用します。*プリンシパル* は、SQL Server リソースをリクエストできるエンティティです。データベースプリンシパルは、SQL Server 認証ユーザー、Windows 認証ユーザー、または Windows 認証グループにマッピングする必要があります。

次の例では、`Notifications` プロファイルへのパブリックアクセスを許可します。

**プロファイルにユーザーを追加するには**
+ 次の SQL 文を使用します。

  ```
  USE msdb
  GO
  
  EXECUTE msdb.dbo.sysmail_add_principalprofile_sp  
      @profile_name       = 'Notifications',  
      @principal_name     = 'public',  
      @is_default         = 1;
  GO
  ```

## データベースメールの Amazon RDS ストアドプロシージャと関数
<a name="SQLServer.DBMail.StoredProc"></a>

Microsoft が提供する[ストアドプロシージャ](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/database-mail-stored-procedures-transact-sql)により、データベースメールの使用 (アカウントやプロファイルの作成、一覧表示、更新、削除) が可能です。加えて、RDS は、次の表に示すストアドプロシージャおよびデータベースメールの機能を提供します。


| プロシージャ/関数 | 説明 | 
| --- | --- | 
| rds\$1fn\$1sysmail\$1allitems | 送信メッセージ (他のユーザーの送信メッセージを含む) を表示します。 | 
| rds\$1fn\$1sysmail\$1event\$1log | イベント (他のユーザーの送信メッセージのイベントを含む) を表示します。 | 
| rds\$1fn\$1sysmail\$1mailattachments | 添付ファイル (他のユーザーの送信メッセージの添付ファイルも含む) を表示します。 | 
| rds\$1sysmail\$1control | メールキュー (DatabaseMail.exe プロセス) を開始および停止します。 | 
| rds\$1sysmail\$1delete\$1mailitems\$1sp | すべてのユーザーが送信した E メールメッセージをデータベースメール内部テーブルから削除します。 | 

# データベースメールを使用した E メールメッセージの送信
<a name="SQLServer.DBMail.Send"></a>

データベースメールを使用して E メールメッセージを送信するには、[sp\$1send\$1dbmail](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql) ストアドプロシージャを使用します。

## Usage
<a name="SQLServer.DBMail.Send.Usage"></a>

```
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'profile_name',
@recipients = 'recipient1@example.com[; recipient2; ... recipientn]',
@subject = 'subject',
@body = 'message_body',
[@body_format = 'HTML'],
[@file_attachments = 'file_path1; file_path2; ... file_pathn'],
[@query = 'SQL_query'],
[@attach_query_result_as_file = 0|1]';
```

以下のパラメータは必須です。
+ `@profile_name` – メッセージの送信元となるデータベースメールプロファイル名
+ `@recipients` – メッセージの送信先となるセミコロン区切りの E メールアドレスリスト
+ `@subject` – メッセージの件名
+ `@body` – メッセージの本文 宣言された変数を本文として使用することもできます。

以下のパラメータはオプションです。
+ `@body_format` – このパラメータは、HTML 形式で E メールを送信するため、宣言された変数と共に使用します。
+ `@file_attachments` – セミコロン区切りのメッセージ添付ファイルリスト。ファイルパスは絶対パスである必要があります。
+ `@query` – 実行する SQL クエリ クエリ結果は、ファイルで添付することも、メッセージの本文に含めることもできます。
+ `@attach_query_result_as_file` – クエリ結果をファイルでアタッチするかどうか。[いいえ] の場合は 0、[はい] の場合は 1 に設定します。デフォルトは 0 です。

## 例
<a name="SQLServer.DBMail.Send.Examples"></a>

次の例は、E メールメッセージを送信する方法をデモンストレーションします。

**Example 単一の受信者へのメッセージの送信の**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Automated DBMail message - 1',
     @body               = 'Database Mail configuration was successful.';
GO
```

**Example 複数の受信者へのメッセージの送信の**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'recipient1@example.com;recipient2@example.com',
     @subject            = 'Automated DBMail message - 2',
     @body               = 'This is a message.';
GO
```

**Example 添付ファイルでの SQL クエリ結果の送信の**  

```
USE msdb
GO

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test SQL query',
     @body               = 'This is a SQL query test.',
     @query              = 'SELECT * FROM abc.dbo.test',
     @attach_query_result_as_file = 1;
GO
```

**Example HTML 形式でのメッセージの送信の**  

```
USE msdb
GO

DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>';

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'Test HTML message',
     @body               = @HTML_Body,
     @body_format        = 'HTML';
GO
```

**Example データベースで特定のイベントが発生した時の、トリガーを使用したメッセージの送信の**  

```
USE AdventureWorks2017
GO
IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL
DROP TRIGGER Purchasing.iProductNotification
GO

CREATE TRIGGER iProductNotification ON Production.Product
   FOR INSERT
   AS
   DECLARE @ProductInformation nvarchar(255);
   SELECT
   @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!'
   FROM INSERTED i;

EXEC msdb.dbo.sp_send_dbmail
     @profile_name       = 'Notifications',
     @recipients         = 'nobody@example.com',
     @subject            = 'New product information',
     @body               = @ProductInformation;
GO
```

# メッセージ、ログ、添付ファイルの表示
<a name="SQLServer.DBMail.View"></a>

RDS ストアドプロシージャを使用して、メッセージ、イベントログ、および添付ファイルを表示します。

**すべての E メールメッセージを表示するには**
+ 次の SQL クエリを使用します。

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
  ```

**すべての E メールイベントログを表示するには**
+ 次の SQL クエリを使用します。

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
  ```

**すべての E メールの添付ファイルを表示するには**
+ 次の SQL クエリを使用します。

  ```
  SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
  ```

# メッセージの削除
<a name="SQLServer.DBMail.Delete"></a>

`rds_sysmail_delete_mailitems_sp` ストアドプロシージャを使用して、メッセージを削除します。

**注記**  
RDS は、データベースメール履歴データのサイズが 1 GB に達すると、メールテーブル項目を自動的に削除します。保持期間は最短 24 時間です。  
メールアイテムを長期間保持する場合、アーカイブできます。詳細については、Microsoft ドキュメントの「[データベースメールメッセージとイベントログをアーカイブする SQL Server Agent ジョブの作成](https://docs.microsoft.com/en-us/sql/relational-databases/database-mail/create-a-sql-server-agent-job-to-archive-database-mail-messages-and-event-logs)」を参照してください。

**E メールメッセージをすべて削除するには**
+ 次の SQL 文を使用します。

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE;
  GO
  ```

**特定のステータスの E メールメッセージをすべて削除するには**
+ 失敗したメッセージをすべて削除するには、次の SQL ステートメントを使用します。

  ```
  DECLARE @GETDATE datetime
  SET @GETDATE = GETDATE();
  EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed';
  GO
  ```

# メールキューの開始と停止
<a name="SQLServer.DBMail.StartStop"></a>

DB メールキューを開始および停止するには、次の手順に従います。

**Topics**
+ [メールキューの開始](#SQLServer.DBMail.Start)
+ [メールキューの停止](#SQLServer.DBMail.Stop)

## メールキューの開始
<a name="SQLServer.DBMail.Start"></a>

`rds_sysmail_control` ストアドプロシージャを使用して、データベースメールプロセスを開始します。

**注記**  
データベースメールを有効にすると、メールキューが自動的に開始します。

**メールキューを開始するには**
+ 次の SQL 文を使用します。

  ```
  EXECUTE msdb.dbo.rds_sysmail_control start;
  GO
  ```

## メールキューの停止
<a name="SQLServer.DBMail.Stop"></a>

`rds_sysmail_control` ストアドプロシージャを使用して、データベースメールプロセスを停止します。

**メールキューを停止するには**
+ 次の SQL 文を使用します。

  ```
  EXECUTE msdb.dbo.rds_sysmail_control stop;
  GO
  ```

## 添付ファイルの使用
<a name="SQLServer.DBMail.Files"></a>

SQL Server の RDS からのデータベースメールメッセージでは、次の添付ファイル拡張子をサポートしていません。.ade、.adp、.apk、.appx、.appxbundle、.bat、.bak、.cab、.chm、.cmd、.com、.cpl、.dll、.dmg、.exe、.hta、.inf1、.ins、.isp、.iso、.jar、.job、.js、.jse、.ldf、.lib、.lnk、.mde、.mdf、.msc、.msi、.msix、.msixbundle、.msp、.mst、.nsh、.pif、.ps、.ps1、.psc1、.reg、.rgs、.scr、.sct、.shb、.shs、.svg、.sys、.u3p、.vb、.vbe、.vbs、.vbscript、.vxd、.ws、wsc、.wsf、および.wsh

データベースメールは、現在のユーザーの Microsoft Windows セキュリティコンテキストを使用して、ファイルへのアクセスを制御します。SQL Server 認証でログインするユーザーは、`@file_attachments` ストアドプロシージャで`sp_send_dbmail` パラメータを使用してファイルをアタッチすることはできません。Windows では、リモートコンピュータから別のリモートコンピュータに、SQL Server が認証情報を提供することはできません。したがって、データベースメールは、SQL Server を実行しているコンピュータ以外のコンピュータからコマンドを実行すると、ネットワーク共有からファイルをアタッチすることはできません。

ただし、SQL Server Agent ジョブを使用して、ファイルをアタッチすることができます。SQL Server Agent の詳細については、Microsoft ドキュメントの「[Amazon RDS 用 SQL Server エージェントの使用](Appendix.SQLServer.CommonDBATasks.Agent.md)」および「[SQL Server Agent](https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent)」を参照してください。

## マルチ AZ 配置に関する考慮事項
<a name="SQLServer.DBMail.MAZ"></a>

マルチ AZ DB インスタンスでデータベースメールを設定しても、設定はセカンダリに自動的には反映されません。マルチ AZ インスタンスをシングル AZ インスタンスに変換し、データベースメールを設定した後に、DB インスタンスをマルチ AZ に戻すことをお勧めします。次に、プライマリノードとセカンダリノードの両方に、データベースメールの設定があります。

データベースメールを設定したマルチ AZ インスタンスからリードレプリカを作成すると、レプリカはその設定を継承しますが、SMTP サーバーのパスワードは継承しません。パスワードを使用して、データベースメールアカウントを更新します。

## SMTP (ポート 25) 制限の削除
<a name="SQLServer.DBMail.SMTP"></a>

デフォルトでは、AWS は RDS for SQL Server DB インスタンスの SMTP (ポート 25) でのアウトバウンドトラフィックをブロックします。これは、Elastic Network Interface 所有者のポリシーに基づいてスパムを防ぐために行われます。必要に応じて、この制限を削除できます。詳細については、「[Amazon EC2 インスタンスまたは Lambda 関数のポート 25 の制限を解除するにはどうすればよいですか?](https://repost.aws/knowledge-center/ec2-port-25-throttle)」を参照してください。

# Amazon RDS for SQL Server の tempdb データベースに対するインスタンスストアのサポート
<a name="SQLServer.InstanceStore"></a>

*インスタンスストア*は、DB インスタンスに一時ブロックレベルのストレージを提供します。このストレージは、ホストコンピュータに物理的にアタッチされたディスク上にあります。これらのディスクには、ソリッドステートドライブ (SSD) に基づく不揮発性メモリエクスプレス (NVMe) インスタンスストレージがあります。このストレージは、低レイテンシー、非常に高いランダム I/O パフォーマンス、高いシーケンシャル読み取りスループットを実現するために最適化されています。

`tempdb` データファイルと `tempdb` ログファイルをインスタンスストアに配置することで、Amazon EBS に基づく標準ストレージと比べて、読み取りおよび書き込みのレイテンシーを低く抑えることができます。

**注記**  
SQL Server データベースファイルとデータベースログファイルは、インスタンスストアに配置されません。

## インスタンスストアの有効化
<a name="SQLServer.InstanceStore.Enable"></a>

RDS が次のいずれかのインスタンスクラスを使用して DB インスタンスをプロビジョニングすると、`tempdb` データベースは自動的にインスタンスストアに配置されます。
+ db.m5d
+ db.r5d
+ db.x2iedn

インスタンスストアを有効にするには、次のいずれかの操作を行います。
+ これらのインスタンスタイプの 1 つを使用して SQL Server DB インスタンスを作成します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の SQL Server DB インスタンスを変更して、そのうちの 1 つを使用します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

インスタンスストアは、これらのインスタンスタイプの 1 つ以上がサポートされているすべての AWS リージョンで使用できます。`db.m5d` と `db.r5d` インスタンスクラスの詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。Amazon RDS for SQL Server でサポートされるインスタンスクラスの詳細については、[Microsoft SQL Server の DB インスタンスクラスのサポート](SQLServer.Concepts.General.InstanceClasses.md) を参照してください。

## ファイルの場所とサイズに関する考慮事項
<a name="SQLServer.InstanceStore.Files"></a>

インスタンスストアがないインスタンスでは、RDS は `tempdb` データとログファイルを `D:\rdsdbdata\DATA` ディレクトリに保存します。デフォルトでは、どちらのファイルも 8 MB から始まります。

インスタンスストアがあるインスタンスでは、RDS は `tempdb` データとログファイルを `T:\rdsdbdata\DATA` ディレクトリに保存します。

`tempdb` にデータファイル (`tempdb.mdf`) とログファイル (`templog.ldf`) が 1 つしかない場合、`templog.ldf` はデフォルトでは 8 MB から始まり、`tempdb.mdf` はインスタンスのストレージ容量の 80％以上から始まります。ストレージ容量の 20% または 200 GB のどちらか小さい方を、無料で起動できます。複数の `tempdb` データファイルは 80% のディスク領域を均等に分割しますが、ログファイルの初期サイズは常に 8 MB です。

例えば、DB インスタンスクラスを `db.m5.2xlarge` から `db.m5d.2xlarge` に変更すると、`tempdb` データファイルのサイズはそれぞれ 8 MB から合計 234 GB に増加します。

**注記**  
インスタンスストア (`tempdb`) の `T:\rdsdbdata\DATA` データとログファイルに加えて、データボリューム (`tempdb`) に追加の `D:\rdsdbdata\DATA` データとログファイルを作成することもできます。これらのファイルの初期サイズは常に 8 MB です。

## バックアップに関する考慮事項
<a name="SQLServer.InstanceStore.Backups"></a>

バックアップを長期間保持する必要がありますが、時間の経過とともにコストがかかる場合があります。`tempdb` データブロックとログブロックは、ワークロードに応じて非常に頻繁に変更されることがあります。これにより、DB スナップショットのサイズが大幅に増加する可能性があります。

`tempdb` がインスタンスストアにある場合、スナップショットに一時ファイルは含まれません。つまり、EBS のみのストレージと比べて、スナップショットのサイズが小さくなり、空いたバックアップ割り当ての使用量が少なくなります。

## ディスクがいっぱいになるエラー
<a name="SQLServer.InstanceStore.DiskFull"></a>

インスタンスストア内の使用可能な領域をすべて使用すると、次のようなエラーが表示されることがあります。
+ データベース「tempdb」のトランザクションログは「ACTIVE\$1TRANSACTION」のため、いっぱいになりました。
+ PRIMARY」ファイルグループがいっぱいであるため、データベース「tempdb」のオブジェクト「dbo.SORT の一時実行ストレージ: 140738941419520」に領域を割り当てられませんでした。不要なファイルの削除、ファイルグループ内のオブジェクトの削除、ファイルグループへのファイルの追加、またはファイルグループ内の既存のファイルの自動拡張を有効に設定して、ディスク領域を作ります。

インスタンスストアがいっぱいになると、次の項目のうちから 1 つまたは複数を実行できます。
+ ワークロードや `tempdb` の使用方法を調整します。
+ より多くの NVMe ストレージを持つ DB インスタンスクラスを使用するように拡張します。
+ インスタンスストアの使用を停止し、EBS ストレージのみを持つインスタンスクラスを使用します。
+ EBS ボリューム上の `tempdb` のセカンダリデータまたはログファイルを追加して、混合モードを使用します。

## インスタンスストアの削除
<a name="SQLServer.InstanceStore.Disable"></a>

インスタンスストアを削除するには、インスタンスストアをサポートしないインスタンスタイプ (db.m5、db.r5、db.x1e など) を使用するように SQL Server DB インスタンスを変更します。

**注記**  
インスタンスストアを削除すると、一時ファイルは `D:\rdsdbdata\DATA` ディレクトリに移動され、8 MB に縮小されます。

# Amazon RDS for Microsoft SQL Server で拡張イベントを使用する
<a name="SQLServer.ExtendedEvents"></a>

Microsoft SQL Server の拡張イベントを使用して、Amazon RDS for SQL Server のデバッグおよびトラブルシューティング情報をキャプチャできます。拡張イベントは、Microsoft によって非推奨にされている SQL Trace と Server Profiler を置き換えます。拡張イベントは、プロファイラートレースに似ていますが、トレースされるイベントをより細かく制御できます。拡張イベントは、Amazon RDS で SQL Server バージョン 2016 以降でサポートされています。詳細については、Microsoft のドキュメントの「[Extended events overview](https://docs.microsoft.com/en-us/sql/relational-databases/extended-events/extended-events)」を参照してください。

Amazon RDS for SQL Server のマスターユーザー特権を持つユーザーの場合、拡張イベントは自動的にオンになります。

**Topics**
+ [制限と推奨事項](#SQLServer.ExtendedEvents.Limits)
+ [RDS for SQL Server での拡張イベントの設定](#SQLServer.ExtendedEvents.Config)
+ [マルチ AZ 配置に関する考慮事項](#SQLServer.ExtendedEvents.MAZ)
+ [拡張イベントファイルのクエリ](#SQLServer.ExtendedEvents.Querying)

## 制限と推奨事項
<a name="SQLServer.ExtendedEvents.Limits"></a>

RDS for SQL Server で拡張イベントを使用する場合、次の制限が適用されます。
+ 拡張イベントは、Enterprise エディションと Standard エディションでのみサポートされます。
+ デフォルトの拡張イベントセッションは変更できません。
+ セッションメモリのパーティションモードを `NONE` に設定してください。
+ セッションイベント保持モードは、`ALLOW_SINGLE_EVENT_LOSS` または `ALLOW_MULTIPLE_EVENT_LOSS` のいずれかになります。
+ Event Tracing for Windows (ETW) ターゲットはサポートされていません。
+ ファイルターゲットが `D:\rdsdbdata\log` ディレクトリにあることを確認します。
+ ペアが一致するターゲットの場合は、`respond_to_memory_pressure` プロパティを `1` に設定します。
+ リングバッファーターゲットメモリは 4 MB を超えることはできません。
+ 次のアクションはサポートされていません。
  + `debug_break`
  + `create_dump_all_threads`
  + `create_dump_single_threads`
+ `rpc_completed` イベントは、15.0.4083.2、14.0.3370.1、13.0.5865.1、12.0.6433.1、11.0.7507.2 以降のバージョンでサポートされています。

## RDS for SQL Server での拡張イベントの設定
<a name="SQLServer.ExtendedEvents.Config"></a>

RDS for SQL Server では、拡張イベントセッションの特定のパラメータ値を設定できます。次の表では、設定可能なパラメータについて説明しています。


| パラメータ名 | 説明 | RDS デフォルト値 | 最小値 | 最大値 | 
| --- | --- | --- | --- | --- | 
| xe\$1session\$1max\$1memory | イベントバッファリングのためにセッションに割り当てるメモリの最大量を指定します。この値は、イベントセッションの max\$1memory 設定に対応しています。 | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1event\$1size | 大きなイベントで許可される最大メモリサイズを指定します。この値は、イベントセッションの max\$1event\$1size 設定に対応しています。 | 4 MB | 4 MB | 8 MB | 
| xe\$1session\$1max\$1dispatch\$1latency | 拡張イベントセッションターゲットにディスパッチされるまでにイベントがメモリにバッファされる時間を指定します。この値は、イベントセッションの max\$1dispatch\$1latency 設定に対応しています。 | 30 秒 | 1 秒 | 30 秒 | 
| xe\$1file\$1target\$1size | ファイルターゲットの最大サイズを指定します。この値は、ファイルターゲットの max\$1file\$1size 設定に対応します。 | 100 MB | 10 MB | 1 GB | 
| xe\$1file\$1retention | イベントセッションのファイルターゲットによって生成されたファイルの保存期間を日単位で指定します。 | 7 日間 | 0 日 | 7 日間 | 

**注記**  
`xe_file_retention` をゼロに設定すると、これらのファイルのロックが SQL Server によって解放された後、.xel ファイルが自動的に削除されます。ロックは、.xel ファイルが `xe_file_target_size` で設定されたサイズ制限に達すると解放されます。

`rdsadmin.dbo.rds_show_configuration` ストアドプロシージャを使用して、これらのパラメータの現在の値を表示できます。例えば、`xe_session_max_memory` の現在の設定を表示するには、次の SQL 文を使用します。

```
exec rdsadmin.dbo.rds_show_configuration 'xe_session_max_memory'
```

`rdsadmin.dbo.rds_set_configuration` ストアドプロシージャを使用して変更することができます。例えば、`xe_session_max_memory` を 4 MB に設定するには、次の SQL ステートメントを使用します。

```
exec rdsadmin.dbo.rds_set_configuration 'xe_session_max_memory', 4
```

## マルチ AZ 配置に関する考慮事項
<a name="SQLServer.ExtendedEvents.MAZ"></a>

プライマリ DB インスタンスで拡張イベントセッションを作成すると、そのセッションはスタンバイレプリカに伝達されません。新しいプライマリ DB インスタンスで、拡張イベントセッションをフェイルオーバーして作成できます。または、マルチ AZ 設定を削除してから再び追加して、拡張イベントセッションをスタンバイレプリカに伝達することもできます。RDS は、スタンバイレプリカ上のデフォルト以外の拡張イベントセッションをすべて停止し、これらのセッションがスタンバイ上のリソースを消費しません。このため、スタンバイレプリカがプライマリ DB インスタンスになった後、新しいプライマリで拡張イベントセッションを手動で開始するようにしてください。

**注記**  
このアプローチは、Always On 可用性グループとデータベースミラーリングの両方に適用されます。

SQL Server エージェントジョブを使用して、スタンバイレプリカを追跡し、スタンバイがプライマリになる場合はセッションを開始することもできます。例えば、SQL Server エージェントのジョブステップで次のクエリを使用して、プライマリ DB インスタンスでイベントセッションを再開します。

```
BEGIN
    IF (DATABASEPROPERTYEX('rdsadmin','Updateability')='READ_WRITE'
    AND DATABASEPROPERTYEX('rdsadmin','status')='ONLINE'
    AND (DATABASEPROPERTYEX('rdsadmin','Collation') IS NOT NULL OR DATABASEPROPERTYEX('rdsadmin','IsAutoClose')=1)
    )
    BEGIN
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe1')
            ALTER EVENT SESSION xe1 ON SERVER STATE=START
        IF NOT EXISTS (SELECT 1 FROM sys.dm_xe_sessions WHERE name='xe2')
            ALTER EVENT SESSION xe2 ON SERVER STATE=START
    END
END
```

このクエリにより、イベントセッション `xe1` と `xe2` が停止状態の場合は、これらのイベントセッションがプライマリ DB インスタンスで再開されます。また、このクエリに便利な間隔のスケジュールを追加することもできます。

## 拡張イベントファイルのクエリ
<a name="SQLServer.ExtendedEvents.Querying"></a>

SQL Server Management Studio または `sys.fn_xe_file_target_read_file` 関数を使用して、ファイルターゲットを使用する拡張イベントのデータを表示できます。この関数の詳細については、Microsoft ドキュメントの [sys.fn\$1xe\$1file\$1target\$1read\$1file (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/sys-fn-xe-file-target-read-file-transact-sql) を参照してください。

拡張イベントファイルターゲットは、RDS for SQL Server の `D:\rdsdbdata\log` ディレクトリにのみファイルを書き込むことができます。

例えば、次の SQL クエリを使用して、名前が `xe` で始まる拡張イベントセッションのすべてのファイルの内容を一覧表示します。

```
SELECT * FROM sys.fn_xe_file_target_read_file('d:\rdsdbdata\log\xe*', null,null,null);
```

# RDS for SQL Server によるトランザクションログのバックアップへのアクセス
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess"></a>

RDS for SQL Server のトランザクションログのバックアップにアクセスすることで、データベースのトランザクションログのバックアップファイルを一覧表示し、ターゲット Amazon S3 バケットにコピーできます。Amazon S3 バケットにトランザクションログのバックアップをコピーすることで、それらをデータベースの完全バックアップや差分バックアップと組み合わせて使用し、特定の時点でのデータベース復元を実行できます。RDS ストアドプロシージャを使用して、トランザクションログのバックアップへのアクセスを設定し、利用可能なトランザクションログバックアップを一覧表示して、Amazon S3 バケットにコピーします。

トランザクションログのバックアップにアクセスすると、次のような機能と利点を利用できます。
+ RDS for SQL Server DB インスタンスにあるデータベースの利用可能なトランザクションログのバックアップのメタデータを一覧表示して表示します。
+ 使用可能なトランザクションログのバックアップを RDS for SQL Server からターゲット Amazon S3 バケットにコピーします。
+ DB インスタンス全体を復元しなくても、データベースのポイントインタイム復元を実行できます。DB クラスターのポイントインタイム復元の方法については、「[Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)」を参照してください。

## 可用性およびサポート
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Availability"></a>

トランザクションログのバックアップへのアクセスは、すべての AWS リージョンでサポートされています。トランザクションログバックアップへのアクセスは、Amazon RDS でサポートされている Microsoft SQL Server のすべてのエディションとバージョンで使用できます。

## 要件
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements"></a>

トランザクションログのバックアップへのアクセスを有効にする前に、以下の要件を満たす必要があります。
+  DB インスタンスで自動バックアップを有効に設定し、バックアップの保存期間を 1 日以上の値に設定する必要があります。自動バックアップの有効化と保存ポリシーの設定の詳細については、「[自動バックアップの有効化](USER_WorkingWithAutomatedBackups.Enabling.md)」を参照してください。
+ Amazon S3 バケットは、ソース DB インスタンスと同じアカウントとリージョンに存在している必要があります。トランザクションログのバックアップへのアクセスを有効にする前に、トランザクションログのバックアップファイルに使用するため、既存の Amazon S3 バケットを選択するか、[新しいバケットを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)します。
+ Amazon RDS によってトランザクションログファイルをコピーできるように、Amazon S3 バケットのアクセス権限ポリシーを次のように設定する必要があります。

  1. バケットのオブジェクトアカウントの所有権プロパティを **[Bucket Owner Preferred]** (バケット所有者優先) に設定します。

  1. 以下のポリシーを追加します。デフォルトではポリシーがないため、バケットアクセスコントロールリスト (ACL) を使用してバケットポリシーを編集し、追加します。

  

  次の例では、ARN を使用してリソースを指定しています。リソースベースの信頼関係では `SourceArn` および `SourceAccount` のグローバル条件コンテキストキーを使用して、サービスに付与する特定のリソースへのアクセス許可を制限することをお勧めします。ARN での使用の詳細については、「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」および「[Amazon RDS の Amazon リソースネーム (ARN)](USER_Tagging.ARN.md)」を参照してください。

    
**Example トランザクションログのバックアップへのアクセスするための Amazon S3 権限ポリシーの例**  

------
#### [ JSON ]

****  

  ```
      {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Only allow writes to my bucket with bucket owner full control",
              "Effect": "Allow",
              "Principal": {
                  "Service": "backups.rds.amazonaws.com"
              },
              "Action": "s3:PutObject",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/{customer_path}/*",
              "Condition": {
                  "StringEquals": {
                      "s3:x-amz-acl": "bucket-owner-full-control",
                      "aws:sourceAccount": "{customer_account}",
                      "aws:sourceArn": "{db_instance_arn}"
                  }
              }
          }
      ]
  }
  ```

------
+ Amazon S3 バケットにアクセスするための AWS Identity and Access Management (IAM) ロール。IAM ロールが既にある場合はそれを使用できます。AWS マネジメントコンソール を使用して `SQLSERVER_BACKUP_RESTORE` オプションを追加する際に、新しい IAM ロールの作成を選択することもできます。または、手動で新しいロールを作成することもできます。`SQLSERVER_BACKUP_RESTORE` による IAM ロールの作成と設定の詳細については、「[ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)」を参照してください。
+ `SQLSERVER_BACKUP_RESTORE` オプションは、DB インスタンスのオプショングループに追加されている必要があります。`SQLSERVER_BACKUP_RESTORE` オプションの追加についての詳細は、「[SQL Server のネイティブバックアップおよび復元のサポート](Appendix.SQLServer.Options.BackupRestore.md)」を参照してください。
**注記**  
DB インスタンスでストレージ暗号化が有効になっている場合は、ネイティブバックアップと復元オプショングループで提供される IAM ロールに AWS KMS (KMS) アクションとキーを指定する必要があります。

  オプションで、`rds_restore_log` ストアドプロシージャを使用してデータベースのポイントインタイム復元を実行する場合は、ネイティブバックアップ、復元オプショングループ、トランザクションログのバックアップへのアクセスに、同じ Amazon S3 パスを使用することをお勧めします。この方法により、Amazon RDS がオプショングループから復元ログ機能を実行する役割を引き受けると、同じ Amazon S3 パスからトランザクションログのバックアップを取得できるようになります。
+ DB インスタンスが暗号化されている場合、暗号化タイプ (AWSマネージドキーまたはカスタマーマネージドキー) に関係なく、IAM ロールと `rds_tlog_backup_copy_to_S3` ストアドプロシージャでカスタマーマネージド KMS キーを指定する必要があります。

## 制限と推奨事項
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Limitations"></a>

トランザクションログのバックアップへのアクセスには、次の制限と推奨事項があります。
+  バックアップの保存期間が 1 日から 35 日の間に設定されている任意の DB インスタンスについて、過去 7 日間のトランザクションログのバックアップを一覧表示してコピーできます。
+  トランザクションログのバックアップのアクセスに使用する Amazon S3 バケットは、ソース DB インスタンスと同じアカウントとリージョンに存在している必要があります。クロスアカウントおよびクロスリージョンコピーはサポートされていません。
+  トランザクションログのバックアップのコピー先として設定できる Amazon S3 バケットは 1 つだけです。`rds_tlog_copy_setup` ストアドプロシージャを使用して、新しいターゲット Amazon S3 バケットを選択できます。新しいターゲット Amazon S3 バケットの選択の詳細については、「[トランザクションログのバックアップへのアクセス設定](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)」を参照してください。
+  RDS インスタンスでストレージ暗号化が有効になっていない場合、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを使用するときに KMS キーを指定することはできません。
+  マルチアカウントコピーはサポートされていません。コピーに使用される IAM ロールは、DB インスタンスの所有者アカウント内の Amazon S3 バケットへの書き込みアクセスのみを許可します。
+  RDS for SQL Server DB インスタンスでは、どのような種類のタスクでも 2 つまでしか実行できません。
+  1 つのデータベースに対して、同時に実行できるコピータスクは 1 つだけです。DB インスタンス上の複数のデータベースのトランザクションログのバックアップをコピーする場合は、データベースごとに個別のコピータスクを使用します。
+  既に Amazon S3 バケットに同じ名前で存在するトランザクションログのバックアップをコピーすると、既存のトランザクションログのバックアップは上書きされます。
+  プライマリ DB インスタンスのトランザクションログのバックアップへのアクセス権が提供されているストアドプロシージャのみを実行できます。これらのストアドプロシージャは、RDS for SQL Server のリードレプリカや、マルチ AZ DB クラスターのセカンダリインスタンスでは実行できません。
+  `rds_tlog_backup_copy_to_S3` ストアドプロシージャの実行中に RDS for SQL Server DB インスタンスを再起動すると、DB インスタンスがオンラインに戻ったときに、タスクは自動的に最初から再開されます。再起動前に、タスクの実行中に Amazon S3 バケットにコピーされたトランザクションログのバックアップはすべて上書きされます。
+ Microsoft SQL Server システムデータベースと `RDSAdmin` データベースは、トランザクションログのバックアップにアクセスするように設定できません。
+  SSE-KMS で暗号化されたバケットへのコピーはサポートされていません。

# トランザクションログのバックアップへのアクセス設定
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling"></a>

トランザクションログのバックアップへのアクセスを設定するには、[要件](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements) セクションの要件リストを入力して、次に `rds_tlog_copy_setup` ストアドプロシージャを実行します。この手順により、DB インスタンスレベルでトランザクションログのバックアップ機能にアクセスできるようになります。DB インスタンス上の個々のデータベースごとに実行する必要はありません。

**重要**  
トランザクションログのバックアップ機能へのアクセスを設定し、使用するには、データベースユーザーに SQL Server 内の各データベースの `db_owner` ロールを付与する必要があります。

**Example 使用例:**  

```
exec msdb.dbo.rds_tlog_copy_setup
@target_s3_arn='arn:aws:s3:::amzn-s3-demo-bucket/myfolder';
```

以下のパラメータは必須です。
+ `@target_s3_arn` – トランザクションログのバックアップファイルをコピーするターゲット Amazon S3 バケットの ARN。

**Example Amazon S3 バケットのターゲットバケットの設定例:**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket/mytestdb1';
```

設定を検証するには、`rds_show_configuration` ストアドプロシージャを呼び出します。

**Example 設定の検証例:**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

トランザクションログのバックアップへのアクセス先を別の Amazon S3 バケットに変更するには、現在の Amazon S3 バケット値を表示し、`@target_s3_arn` の新しい値を使用して、`rds_tlog_copy_setup` ストアドプロシージャを再実行します。

**Example トランザクションログのバックアップにアクセスするため設定された既存の Amazon S3 バケットの表示例**  

```
exec rdsadmin.dbo.rds_show_configuration @name='target_s3_arn_for_tlog_copy';
```

**Example 新しいターゲット Amazon S3 バケットへの更新例**  

```
exec msdb.dbo.rds_tlog_copy_setup @target_s3_arn='arn:aws:s3:::amzn-s3-demo-logging-bucket1/mynewfolder';
```

# 利用可能なトランザクションログのバックアップの一覧表示
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Listing"></a>

RDS for SQL Server では、完全な復旧モデルを使用するように設定されたデータベースで、DB インスタンスのバックアップ保存期間を 1 日以上に設定すると、トランザクションログのバックアップが自動で有効になります。トランザクションログのバックアップへのアクセスを有効にすると、最大 7 日間分のトランザクションログのバックアップを Amazon S3 バケットにコピーできるようになります。

トランザクションログのバックアップへのアクセスを有効にすると、それを使用して、利用可能なトランザクションログバックアップファイルの一覧表示と、コピーを開始できます。

**トランザクションログのバックアップの一覧表示**

個々のデータベースで利用可能なすべてのトランザクションログのバックアップを一覧表示するには、`rds_fn_list_tlog_backup_metadata` 関数を呼び出します。関数を呼び出すときは、`ORDER BY` または `WHERE` 句を使用できます。

**Example 利用可能なトランザクションログのバックアップファイルの一覧表示とフィルタリング例**  

```
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename');
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE rds_backup_seq_id = 3507;
SELECT * from msdb.dbo.rds_fn_list_tlog_backup_metadata('mydatabasename') WHERE backup_file_time_utc > '2022-09-15 20:44:01' ORDER BY backup_file_time_utc DESC;
```

![\[rds_fn_list_tlog_backup_metadata からの出力\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_func.png)


`rds_fn_list_tlog_backup_metadata` 関数は、次の出力を返します。


****  

| 列名 | データ型 | 説明 | 
| --- | --- | --- | 
| `db_name` | sysname | トランザクションログのバックアップを一覧表示するために指定されたデータベース名。 | 
| `db_id` | int | 入力パラメータ `db_name` の内部データベース識別子。 | 
| `family_guid` | uniqueidentifier | 作成時の元のデータベースの一意の ID。この値は、データベースが復元されても、データベース名が異なっても変わりません。 | 
| `rds_backup_seq_id` | int | RDS が各トランザクションログのバックアップファイルのシーケンス番号を保持するために内部で使用する ID。 | 
| `backup_file_epoch` | bigint | トランザクションのバックアップファイルが生成されたエポック時間。 | 
| `backup_file_time_utc` | datetime | `backup_file_epoch` 値の UTC 時刻変換後の値。 | 
| `starting_lsn` | numeric(25,0) | トランザクションログのバックアップファイルの最初または最も古いログレコードのログシーケンス番号。 | 
| `ending_lsn` | numeric(25,0) | トランザクションログのバックアップファイルの最後またはその次のログレコードのログシーケンス番号。 | 
| `is_log_chain_broken` | bit | 現在のトランザクションログのバックアップファイルと、以前のトランザクションログのバックアップファイル間でログチェーンが壊れているかどうかを示す boolean 値。 | 
| `file_size_bytes` | bigint | トランザクションのバックアップセットのサイズ (バイト単位)。 | 
| `Error` | varCHAR(4000) | `rds_fn_list_tlog_backup_metadata` 関数が例外をスローした場合のエラーメッセージ。例外がない場合は NULL です。 | 

# トランザクションログのバックアップのコピー
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying"></a>

個々のデータベースの利用可能なトランザクションログのバックアップセットを Amazon S3 バケットにコピーするには、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを呼び出します。`rds_tlog_backup_copy_to_S3` ストアドプロシージャでは、トランザクションログのバックアップをコピーする新しいタスクを開始します。

**注記**  
`rds_tlog_backup_copy_to_S3` ストアドプロシージャでは、`is_log_chain_broken` 属性を検証せずにトランザクションログのバックアップをコピーします。このため、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行する前に、ログチェーンが壊れていないことを手動で確認する必要があります。追加の説明については、「[トランザクションログのバックアップログチェーンの検証](#USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain)」を参照してください。

**Example `rds_tlog_backup_copy_to_S3` ストアドプロシージャの使用例**  

```
exec msdb.dbo.rds_tlog_backup_copy_to_S3
	@db_name='mydatabasename',
	[@kms_key_arn='arn:aws:kms:region:account-id:key/key-id'],	
	[@backup_file_start_time='2022-09-01 01:00:15'],
	[@backup_file_end_time='2022-09-01 21:30:45'],
	[@starting_lsn=149000000112100001],
	[@ending_lsn=149000000120400001],
	[@rds_backup_starting_seq_id=5],
	[@rds_backup_ending_seq_id=10];
```

次の入力パラメータが利用可能です。


****  

| パラメータ | 説明 | 
| --- | --- | 
| `@db_name` | トランザクションログのバックアップをコピーするためのデータベース名。 | 
| `@kms_key_arn` |  カスタマーマネージド KMS キー。AWS マネージド KMS キーで DB インスタンスを暗号化する場合は、カスタマーマネージドキーを作成する必要があります。カスタマーマネージドキーで DB インスタンスを暗号化する場合、同じ KMS キー ARN を使用できます。 | 
| `@backup_file_start_time` | `rds_fn_list_tlog_backup_metadata` 関数の `[backup_file_time_utc]` 列から提供された UTC タイムスタンプ。 | 
| `@backup_file_end_time` | `rds_fn_list_tlog_backup_metadata` 関数の `[backup_file_time_utc]` 列から提供された UTC タイムスタンプ。 | 
| `@starting_lsn` | `rds_fn_list_tlog_backup_metadata` 関数の `[starting_lsn]` 列から提供されたログシーケンス番号 (LSN) | 
| `@ending_lsn` | `rds_fn_list_tlog_backup_metadata` 関数の `[ending_lsn]` 列から提供されたログシーケンス番号 (LSN)。 | 
| `@rds_backup_starting_seq_id` | `rds_fn_list_tlog_backup_metadata` 関数の `[rds_backup_seq_id]` 列から提供されたシーケンス ID。 | 
| `@rds_backup_ending_seq_id` | `rds_fn_list_tlog_backup_metadata` 関数の `[rds_backup_seq_id]` 列から提供されたシーケンス ID。 | 

時間、LSN、シーケンス ID のいずれかのパラメータセットを指定できます。必要なパラメータは 1 セットだけです。

また、どのセットでもパラメータを 1 つだけ指定できます。例えば、`backup_file_end_time` パラメータの値のみを指定すると、7 日間の制限内であれば、それ以前に利用可能なすべてのトランザクションログのバックアップファイルが Amazon S3 バケットにコピーされます。

`rds_tlog_backup_copy_to_S3` ストアドプロシージャの有効な入力パラメータの組み合わせは次のとおりです。


****  

| 指定されたパラメータ | 予想される結果 | 
| --- | --- | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3  <br />	@db_name = 'testdb1',<br />            @backup_file_start_time='2022-08-23 00:00:00',<br />            @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 過去 7 日間のトランザクションログのバックアップをコピーします。このバックアップは、指定された `backup_file_start_time` から `backup_file_end_time` の範囲に存在します。この例では、ストアドプロシージャは「2022-08-23 00:00:00」から「2022-08-30 00:00:00」の間に生成されたトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />           @db_name = 'testdb1',<br />           @backup_file_start_time='2022-08-23 00:00:00';</pre>  | 指定された `backup_file_start_time` を起点として、過去 7 日間のトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは「2022-08-23 00:00:00」のトランザクションログのバックアップを最新のトランザクションログのバックアップにコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />          @db_name = 'testdb1',<br />          @backup_file_end_time='2022-08-30 00:00:00';</pre>  | 指定された `backup_file_end_time` まで、過去 7 日間のトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは「2022-08-23 00:00:00」から「2022-08-30 00:00:00」までのトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />         @db_name='testdb1',<br />         @starting_lsn =1490000000040007,<br />         @ending_lsn =  1490000000050009;</pre>  | 過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。このバックアップは、指定された `starting_lsn` から `ending_lsn` の範囲にあります。この例では、ストアドプロシージャは、LSN 範囲が 1490000000040007 から 1490000000050009 までの過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @starting_lsn =1490000000040007;</pre>  |  指定された `starting_lsn` から、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは LSN 1490000000040007 からのトランザクションログのバックアップを最新のトランザクションログのバックアップにコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />        @db_name='testdb1',<br />        @ending_lsn  =1490000000050009;</pre>  |  指定された `ending_lsn` まで、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは、LSN が 1490000000050009 までの過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000,<br />       @rds_backup_ending_seq_id= 5000;</pre>  |  過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。このバックアップは、指定された `rds_backup_starting_seq_id` から `rds_backup_ending_seq_id` の範囲に存在します。この例では、ストアドプロシージャは、seq\$1id 2000 から seq\$1id 5000 までの rds バックアップシーケンス ID の範囲内で、過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />       @db_name='testdb1',<br />       @rds_backup_starting_seq_id= 2000;</pre>  |  指定された `rds_backup_starting_seq_id` から、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは seq\$1id 2000 から始まる最新のトランザクションログのバックアップを最新のトランザクションログのバックアップにコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_ending_seq_id= 5000;</pre>  |  指定された `rds_backup_ending_seq_id` まで、過去 7 日間の利用可能なトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは、seq\$1id 5000 までの過去 7 日間のトランザクションログのバックアップをコピーします。  | 
|  <pre>exec msdb.dbo.rds_tlog_backup_copy_to_S3<br />      @db_name='testdb1',<br />      @rds_backup_starting_seq_id= 2000;<br />      @rds_backup_ending_seq_id= 2000;</pre>  |  過去 7 日以内に利用可能な場合、指定された `rds_backup_starting_seq_id` で 1 つのトランザクションログのバックアップをコピーします。この例では、ストアドプロシージャは、seq\$1id が 2000 の 1 つのトランザクションログのバックアップをコピーします (過去 7 日以内に存在する場合)。  | 

## トランザクションログのバックアップログチェーンの検証
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.LogChain"></a>

 トランザクションログのバックアップにアクセスするように設定されたデータベースでは、自動バックアップ保持が有効になっている必要があります。自動バックアップ保持により、DB インスタンスのデータベースが `FULL` 復旧モデルに設定されます。データベースのポイントインタイム復元をサポートするには、データベース復旧モデルを変更しないでください。データベース復旧モデルを変更すると、ログチェーンが壊れる可能性があります。データベースは `FULL` 復旧モデルに設定しておくことをお勧めします。

トランザクションログのバックアップをコピーする前にログチェーンを手動で検証するには、`rds_fn_list_tlog_backup_metadata` 関数を呼び出して `is_log_chain_broken` 列の値を確認します。値が「1」の場合、現在のログのバックアップと前回のログのバックアップの間でログチェーンが壊れていたことを示します。

次の例は、`rds_fn_list_tlog_backup_metadata` ストアドプロシージャからの出力のログチェーンが壊れていることを示しています。

![\[rds_fn_list_tlog_backup_metadata からの出力で、壊れたログチェーンを表示します。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_logchain_error.png)


通常のログチェーンでは、特定の rds\$1sequence\$1id の first\$1lsn のログシーケンス番号 (LSN) 値は、前の rds\$1sequence\$1id の last\$1lsn の値と一致する必要があります。この図では、rds\$1sequence\$1id が 45 の first\$1lsn の値は 90987 ですが、その前の rds\$1sequence\$1id が 44 の last\$1lsn 値 90985 と一致しません。

SQL Server のトランザクションログアーキテクチャとログシーケンス番号の詳細については、Microsoft SQL Server ドキュメントの「[トランザクションログの論理アーキテクチャ](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver15#Logical_Arch)」を参照してください。

# Amazon S3 バケットフォルダおよびファイル構造
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.S3namingConvention"></a>

Amazon S3 バケット内のトランザクションログのバックアップには、以下の標準構造と命名規則があります。
+ 各データベースの `target_s3_arn` パスの下に、`{db_id}.{family_guid}` という命名構造を持つ新しいフォルダが作成されます。
+ フォルダ内のトランザクションログのバックアップは、`{db_id}.{family_guid}.{rds_backup_seq_id}.{backup_file_epoch}` のようなファイル名構造を持ちます。
+ `rds_fn_list_tlog_backup_metadata` 関数を使用すると、`family_guid,db_id,rds_backup_seq_id and backup_file_epoch` の詳細を表示できます。

以下の例では、Amazon S3 バケット内の一連のトランザクションログのバックアップのフォルダおよびファイル構造を示しています。

![\[Amazon S3 バケット構造とトランザクションログへのアクセス\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/sql_accesstransactionlogs_s3.png)


# タスクのステータスの追跡
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus"></a>

 コピータスクのステータスを追跡するには、`rds_task_status` ストアドプロシージャを呼び出します。パラメータを何も指定しない場合、ストアドプロシージャによりすべてのタスクのステータスが返されます。

**Example 使用例:**  

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

以下のパラメータはオプションです。
+ `@db_name` – タスクのステータスを表示するデータベースの名前。
+ `@task_id` – タスクのステータスを表示するタスクの ID。

**Example 特定タスク ID のステータスの一覧表示例:**  

```
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 現在の DB インスタンスのすべてのタスクおよびステータスの一覧表示例:**  

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

# タスクのキャンセル
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.CancelTask"></a>

実行中のタスクをキャンセルするには、`rds_cancel_task` ストアドプロシージャを呼び出します。

**Example 使用例:**  

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

以下のパラメータは必須です。
+ `@task_id` – キャンセルするタスクの ID。`rds_task_status` ストアドプロシージャを呼び出すことにより、タスク ID を表示できます。

実行中のタスクの表示とキャンセルの詳細については、「[ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)」を参照してください。

# トランザクションログのバックアップへのアクセスについてのトラブルシューティング
<a name="USER.SQLServer.AddlFeat.TransactionLogAccess.Troubleshooting"></a>

トランザクションログのバックアップへのアクセスにストアドプロシージャを使用する場合、次のような問題が発生する場合があります。


****  

| ストアドプロシージャ | エラーメッセージ | 問題 | トラブルシューティングの推奨事項 | 
| --- | --- | --- | --- | 
| rds\$1tlog\$1copy\$1setup | この DB インスタンスでは、バックアップは無効になっています。DB インスタンスのバックアップを「1」以上の保持期間で有効にして、もう一度試してください。 | DB インスタンスの自動バックアップを有効化する。 |  DB インスタンスのバックアップの保持期間は、最低でも 1 日以上有効にする必要があります。自動バックアップの有効化バックアップの保持期間の設定の詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。 | 
| rds\$1tlog\$1copy\$1setup | rds\$1tlog\$1copy\$1setup ストアドプロシージャの実行中にエラーが発生しました。RDS エンドポイントに再接続して、もう一度試してください。 | 内部エラーが発生しました。 | RDS エンドポイントに再接続し、`rds_tlog_copy_setup` ストアドプロシージャを再実行します。 | 
| rds\$1tlog\$1copy\$1setup | rds\$1tlog\$1backup\$1copy\$1setup ストアドプロシージャをトランザクション内で実行することはサポートされていません。セッションに未処理のトランザクションがないことを確認して、もう一度試してください。 | ストアドプロシージャでは、`BEGIN` および `END` を使用してトランザクション内で試行されました。 | `rds_tlog_copy_setup` ストアドプロシージャを実行するときは、`BEGIN` および `END` を使用しないでください。 | 
| rds\$1tlog\$1copy\$1setup | 入力パラメータ `@target_s3_arn` の S3 バケット名には、スペース以外の文字が少なくとも 1 文字含まれている必要があります。 | 入力パラメータ `@target_s3_arn` に間違った値が指定されました。 | 入力パラメータ `@target_s3_arn` に完全な Amazon S3 バケット ARN が指定されていることを確認します。 | 
| rds\$1tlog\$1copy\$1setup | `SQLSERVER_BACKUP_RESTORE` オプションが有効になっていないか、有効化処理中です。オプションを有効にするか、後でもう一度試してください。 | `SQLSERVER_BACKUP_RESTORE` オプションが DB インスタンスで有効になっていないか、有効化されたばかりで内部アクティベーションが保留されています。 | 要件セクションで指定されている `SQLSERVER_BACKUP_RESTORE` オプションを有効にします。数分間待って、再度 `rds_tlog_copy_setup` ストアドプロシージャを実行してください。 | 
| rds\$1tlog\$1copy\$1setup | 入力パラメータ `@target_s3_arn` のターゲット S3 arn を空または null にすることはできません。 | 入力パラメータ `@target_s3_arn` に `NULL` 値が指定されたか、値が指定されませんでした。 | 入力パラメータ `@target_s3_arn` に完全な Amazon S3 バケット ARN が指定されていることを確認します。 | 
| rds\$1tlog\$1copy\$1setup | 入力パラメータ `@target_s3_arn` のターゲット S3 arn は、arn:aws で始まる必要があります。 | 入力パラメータ `@target_s3_arn` は、前に `arn:aws` を付けずに指定されました。 | 入力パラメータ `@target_s3_arn` に完全な Amazon S3 バケット ARN が指定されていることを確認します。 | 
| rds\$1tlog\$1copy\$1setup | ターゲット S3 ARN は、既に指定された値が設定されています。 | `rds_tlog_copy_setup` ストアドプロシージャは前に実行され、Amazon S3 バケット ARN で設定されていました。 | トランザクションログのバックアップにアクセスするために Amazon S3 バケット値を変更するには、別の `target S3 ARN` を指定します。 | 
| rds\$1tlog\$1copy\$1setup | トランザクションログのバックアップへのアクセスを有効にする認証情報を生成できません。`rds_tlog_copy_setup` で指定されている S3 パス ARN を確認し、後でもう一度試してください。 | トランザクションログのバックアップにアクセスするための認証情報の生成中に、不明なエラーが発生しました。 | 設定設定を確認して、もう一度試してください。 | 
| rds\$1tlog\$1copy\$1setup | 保留中のタスクがある間は、rds\$1tlog\$1copy\$1setup ストアドプロシージャを実行できません。保留中のタスクが完了するのを待ち、もう一度試してください。 | 一度に実行できるタスクは 2 つだけです。完了を待っている保留中のタスクがあります。 | 保留中のタスクを表示して、完了するのを待ちます。モニタリングタスクのステータスの詳細については、「[タスクのステータスの追跡](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)」をご参照ください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | T-log バックアップファイルコピータスクがデータベース: %s、タスク ID: %d で既に発行されています。後でもう一度試してください。 | 特定のデータベースに対して、同時に実行できるコピータスクは 1 つだけです。完了を待っている保留中のコピータスクがあります。 | 保留中のタスクを表示して、完了するのを待ちます。モニタリングタスクのステータスの詳細については、「[タスクのステータスの追跡](USER.SQLServer.AddlFeat.TransactionLogAccess.TrackTaskStatus.md)」をご参照ください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | これらの 3 セットのパラメータセットのうち、少なくとも 1 セットを指定する必要があります。SET-1:(@backup\$1file\$1start\$1time、@backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn、@ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id、@rds\$1backup\$1ending\$1seq\$1id) | 3 セットのパラメータセットのいずれも指定されていないか、指定されたパラメータセットに必要なパラメータが不足しています。 | 時間、lsn、シーケンス ID のいずれかのパラメータを指定できます。これら 3 セットのパラメータのうち 1 セットが必要です。必要なパラメータの詳細については、「[トランザクションログのバックアップのコピー](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | インスタンスでは、バックアップは無効になっています。バックアップを有効にして、しばらくしてからもう一度試してください。 | DB インスタンスの自動バックアップを有効化する。 |  自動バックアップの有効化バックアップの保持期間の設定の詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 指定されたデータベース %s が見つかりません。 | 入力パラメータ `@db_name` に指定された値が DB インスタンスのデータベース名と一致しません。 | 正しいデータベース名を使用してください。すべてのデータベースを名前で一覧表示するには、`SELECT * from sys.databases` を実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | SQL Server システムデータベースまたは rdsadmin データベースの RDS\$1TLOG\$1Backup\$1copy\$1to\$1S3 ストアドプロシージャを実行できません。 | 入力パラメータ `@db_name` として指定された値は、SQL Server システムデータベース名または RDSAdmin データベースと一致します。 | データベース `master, model, msdb, tempdb, RDSAdmin.` は、トランザクションログバックアップへのアクセスには使用できません。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ @db\$1name のデータベース名を空または null にすることはできません。 | 入力パラメータ `@db_name` に空または `NULL` の値が指定されました。 | 正しいデータベース名を使用してください。すべてのデータベースを名前で一覧表示するには、`SELECT * from sys.databases` を実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | rds\$1tlog\$1backup\$1copy\$1setup ストアドプロシージャを実行するには、DB インスタンスのバックアップ保持期間を少なくとも 1 に設定する必要があります。 | DB インスタンスの自動バックアップを有効化する。 | 自動バックアップの有効化バックアップの保持期間の設定の詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | ストアドプロシージャ rds\$1tlog\$1backup\$1copy\$1to\$1S3 の実行中にエラーが発生しました。RDS エンドポイントに再接続して、もう一度試してください。 | 内部エラーが発生しました。 | RDS エンドポイントに再接続し、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを再実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | これらの 3 セットのパラメータセットのうち、1 セットのみ指定できます。SET-1:(@backup\$1file\$1start\$1time、@backup\$1file\$1end\$1time) \$1 SET-2:(@starting\$1lsn、@ending\$1lsn) \$1 SET-3:(@rds\$1backup\$1starting\$1seq\$1id、@rds\$1backup\$1ending\$1seq\$1id) | 複数のパラメータセットが指定されました。 | 時間、lsn、シーケンス ID のいずれかのパラメータを指定できます。これら 3 セットのパラメータのうち 1 セットが必要です。必要なパラメータの詳細については、「[トランザクションログのバックアップのコピー](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | rds\$1tlog\$1backup\$1copy\$1to\$1S3 ストアドプロシージャをトランザクション内で実行することはサポートされていません。セッションに未処理のトランザクションがないことを確認して、もう一度試してください。 | ストアドプロシージャでは、`BEGIN` および `END` を使用してトランザクション内で試行されました。 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行するときは、`BEGIN` および `END` を使用しないでください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 指定されたパラメータは、トランザクションバックアップログの保持期間外です。使用可能なトランザクションログのバックアップファイルを一覧表示するには、rds\$1fn\$1list\$1tlog\$1backup\$1metadata 関数を実行します。  | 指定された入力パラメータで、コピー保持期間内で該当するトランザクションのログバックアップはありませんでした。 | 有効なパラメータセットを使用してもう一度試してください。必要なパラメータの詳細については、「[トランザクションログのバックアップのコピー](USER.SQLServer.AddlFeat.TransactionLogAccess.Copying.md)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | リクエストの処理中にアクセス許可エラーがありました。バケットが DB インスタンスと同じアカウントとリージョンにあることを確認し、公開ドキュメントのテンプレートに対する S3 バケットポリシーのアクセス許可を確認してください。  | 指定された S3 バケットまたはそのポリシーのアクセス許可で問題が検出されました。 | トランザクションログのバックアップにアクセスするための設定が正しいことを確認します。S3 バケットの設定要件の詳細については、「[要件](USER.SQLServer.AddlFeat.TransactionLogAccess.md#USER.SQLServer.AddlFeat.TransactionLogAccess.Requirements)」を参照してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | RDS リードレプリカインスタンスで `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行することは許可されていません。 | RDS リードレプリカインスタンスでストアドプロシージャが試行されました。 | RDS プライマリ DB インスタンスに接続して、`rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ `@starting_lsn` の LSN は `@ending_lsn` 未満である必要があります。 | 入力パラメータ `@starting_lsn` に指定された値が、入力パラメータ `@ending_lsn` に指定された値より大きい。 | 入力パラメータ `@starting_lsn` に指定された値が、入力パラメータ `@ending_lsn` に指定された値より小さいことを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャは、ソースデータベース内の `db_owner` ロールのメンバーのみが実行できます。 | 指定された `db_name` で `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行しようとしているアカウントには、`db_owner` ロールが付与されていません。 | ストアドプロシージャを実行しているアカウントに、指定された `db_name` の `db_owner` ロールが付与されていることを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ `@rds_backup_starting_seq_id` のシーケンス ID は、`@rds_backup_ending_seq_id` 以下である必要があります。 | 入力パラメータ `@rds_backup_starting_seq_id` に指定された値が、入力パラメータ `@rds_backup_ending_seq_id` に指定された値より大きい。 | 入力パラメータ `@rds_backup_starting_seq_id` に指定された値が、入力パラメータ `@rds_backup_ending_seq_id` に指定された値より小さいことを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | SQLSERVER\$1BACKUP\$1RESTORE オプションが有効になっていないか、有効化処理中です。オプションを有効にするか、後でもう一度試してください。 | `SQLSERVER_BACKUP_RESTORE` オプションが DB インスタンスで有効になっていないか、有効化されたばかりで内部アクティベーションが保留されています。 | 要件セクションで指定されている `SQLSERVER_BACKUP_RESTORE` オプションを有効にします。数分間待って、再度 `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | 入力パラメータ `@backup_file_start_time` の開始時刻は `@backup_file_end_time` より早い必要があります。 | 入力パラメータ `@backup_file_start_time` に指定された値が、入力パラメータ `@backup_file_end_time` に指定された値より遅い。 | 入力パラメータ `@backup_file_start_time` に指定された値が、入力パラメータ `@backup_file_end_time` に指定された値より小さいことを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | アクセスできないため、リクエストを処理できませんでした。機能の設定とアクセス許可を確認してください。 | Amazon S3 バケットのアクセス許可に問題があるか、指定された Amazon S3 バケットが別のアカウントまたはリージョンにある可能性があります。 | Amazon S3 バケットポリシーのアクセス許可が、RDS のアクセスを許可するように設定されていることを確認してください。Amazon S3 バケットが DB インスタンスと同じアカウントとリージョンにあることを確認してください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | ストレージが暗号化されていないインスタンスのストアドプロシージャへの入力パラメータとして、KMS Key ARN は指定できません。 | DB インスタンスでストレージ暗号化が有効化されていない場合は、入力パラメータ `@kms_key_arn` を指定しないでください。 | `@kms_key_arn` の入力パラメータは指定しないでください。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | ストレージ暗号化インスタンスのストアドプロシージャへの入力パラメータとして、KMS キー ARN を指定する必要があります。 | DB インスタンスでストレージ暗号化が有効化されている場合は、入力パラメータ `@kms_key_arn` を指定する必要があります。 | `@kms_key_arn` の入力パラメータに、トランザクションログのバックアップに使用する Amazon S3 バケットの ARN と一致する値を指定します。 | 
| rds\$1tlog\$1backup\$1copy\$1to\$1S3 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行する前に、`rds_tlog_copy_setup` ストアドプロシージャを実行して、`@target_s3_arn` を設定する必要があります。 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャの実行を試行する前に、トランザクションログのバックアップへのアクセスのセットアップ手順が完了しませんでした。 | `rds_tlog_backup_copy_to_S3` ストアドプロシージャを実行する前に、`rds_tlog_copy_setup` ストアドプロシージャを実行してください。トランザクションログのバックアップにアクセスするためのセットアップ手順の実行の詳細については、「[トランザクションログのバックアップへのアクセス設定](USER.SQLServer.AddlFeat.TransactionLogAccess.Enabling.md)」を参照してください。 | 

# Microsoft SQL Server データベースエンジンのオプション
<a name="Appendix.SQLServer.Options"></a>

このセクションでは、Microsoft SQL Server DB エンジンを実行する Amazon RDS インスタンスに使用できるオプションについて説明します。これらのオプションを有効にするには、オプショングループに追加してから、そのオプショングループを DB インスタンスに関連付けます。詳細については、「[オプショングループを使用する](USER_WorkingWithOptionGroups.md)」を参照してください。

RDS オプショングループを介して追加されないオプション機能 (SSL、Microsoft Windows 認証、Amazon S3 統合など) を必要とする場合は、「[Amazon RDS での Microsoft SQL Server の追加機能](User.SQLServer.AdditionalFeatures.md)」を参照してください。

Amazon RDS では、Microsoft SQL Server DB インスタンスの以下のオプションがサポートされています。


****  

| オプション | オプション ID | エンジンのエディション | 
| --- | --- | --- | 
|  [Oracle OLEDB とリンクされたサーバー](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md)  |  `OLEDB_ORACLE`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [ネイティブバックアップおよび復元](Appendix.SQLServer.Options.BackupRestore.md)  |  `SQLSERVER_BACKUP_RESTORE`  |  SQL Server Enterprise Edition SQL Server Standard Edition SQL Server Web Edition SQL Server Express Edition  | 
|  [透過的なデータ暗号化](Appendix.SQLServer.Options.TDE.md)  |  `TRANSPARENT_DATA_ENCRYPTION` (RDS コンソール) `TDE` (AWS CLI と RDS API)  |  SQL Server 2016–2022 Enterprise Edition SQL Server 2022 Standard Edition | 
|  [SQL Server Audit](Appendix.SQLServer.Options.Audit.md)  |  `SQLSERVER_AUDIT`  |  RDS では、SQL Server 2016 以降、SQL Server のすべてのエディションでサーバーレベルの監査がサポートされており、Enterprise Edition でもデータベースレベルの監査がサポートされています。 SQL Server SQL Server 2016 (13.x) SP1 以降では、すべてのエディションでサーバーレベルとデータベースレベルの両方の監査がサポートされています。 詳細については、SQL Server ドキュメントの「[SQL Server Audit (database engine)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-2017)」を参照してください。 | 
|  [SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)  |  `SSAS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)  |  `SSIS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [SQL Server Reporting Services](Appendix.SQLServer.Options.SSRS.md)  |  `SSRS`  |  SQL Server Enterprise Edition SQL Server Standard Edition  | 
|  [Microsoft 分散トランザクションコーディネーター](Appendix.SQLServer.Options.MSDTC.md)  |  `MSDTC`  |  RDS では、SQL Server 2016 以降、SQL Server のすべてのエディションで分散トランザクションがサポートされています。  | 
|  [SQL Server リソースガバナー](Appendix.SQLServer.Options.ResourceGovernor.md)  |  `RESOURCE_GOVERNOR`  |  SQL Server Enterprise Edition SQL Server 2022 Developer Edition  | 

## SQL Server のバージョンとエディションで使用できるオプションの一覧表示
<a name="Appendix.SQLServer.Options.Describe"></a>

`describe-option-group-options` AWS CLI コマンドを使用して、SQL Server のバージョンとエディションで使用可能なオプション、およびそれらのオプションの設定を一覧表示できます。

次の例は、SQL Server 2019 Enterprise Edition のオプションとオプションの設定を示しています。`--engine-name` オプションは必須です。

```
aws rds describe-option-group-options --engine-name sqlserver-ee --major-engine-version 15.00
```

出力は次のようになります。

```
{
    "OptionGroupOptions": [
        {
            "Name": "MSDTC",
            "Description": "Microsoft Distributed Transaction Coordinator",
            "EngineName": "sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "MinimumRequiredMinorEngineVersion": "4043.16.v1",
            "PortRequired": true,
            "DefaultPort": 5000,
            "OptionsDependedOn": [],
            "OptionsConflictsWith": [],
            "Persistent": false,
            "Permanent": false,
            "RequiresAutoMinorEngineVersionUpgrade": false,
            "VpcOnly": false,
            "OptionGroupOptionSettings": [
                {
                    "SettingName": "ENABLE_SNA_LU",
                    "SettingDescription": "Enable support for SNA LU protocol",
                    "DefaultValue": "true",
                    "ApplyType": "DYNAMIC",
                    "AllowedValues": "true,false",
                    "IsModifiable": true,
                    "IsRequired": false,
                    "MinimumEngineVersionPerAllowedValue": []
                },
        ...

        {
            "Name": "TDE",
            "Description": "SQL Server - Transparent Data Encryption",
            "EngineName": "sqlserver-ee",
            "MajorEngineVersion": "15.00",
            "MinimumRequiredMinorEngineVersion": "4043.16.v1",
            "PortRequired": false,
            "OptionsDependedOn": [],
            "OptionsConflictsWith": [],
            "Persistent": true,
            "Permanent": false,
            "RequiresAutoMinorEngineVersionUpgrade": false,
            "VpcOnly": false,
            "OptionGroupOptionSettings": []
        }
    ]
}
```

# Amazon RDS for SQL Server での Oracle OLEDB によるリンクされたサーバーのサポート
<a name="Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB"></a>

RDS for SQL Server 上の Oracle Provider for OLEDB とリンクされたサーバーを使用すると、Oracle データベース上の外部データソースにアクセスできます。リモート Oracle データソースからデータを読み取り、RDS for SQL Server DB インスタンスの外部にあるリモート Oracle データベースサーバーに対してコマンドを実行できます。Oracle OLEDB とリンクされたサーバーを使用すると、次のことが可能になります。
+ SQL Server 以外のデータソースに直接アクセスする
+ データを移動することなく、同じクエリでさまざまな Oracle データソースに対してクエリを実行する
+ エンタープライズエコシステム全体のデータソースに対して分散クエリ、更新、コマンド、トランザクションを発行する
+ Microsoft ビジネスインテリジェンススイート (SSIS、SSRS、SSAS) 内から Oracle データベースへの接続を統合する
+ Oracle データベースから RDS for SQL サーバーに移行

既存または新しい RDS for SQL Server DB インスタンスで、Oracle 用の 1 つ以上のリンクされたサーバーをアクティブ化できます。その後、外部の Oracle データソースを DB インスタンスと統合できます。

**Contents**
+ [サポート対象のバージョンとリージョン](#LinkedServers_Oracle_OLEDB.VersionRegionSupport)
+ [制限と推奨事項](#LinkedServers_Oracle_OLEDB.Limitations)
+ [Oracle とリンクされたサーバーのアクティベーション](#LinkedServers_Oracle_OLEDB.Enabling)
  + [OLEDB\$1ORACLE のオプショングループの作成](#LinkedServers_Oracle_OLEDB.OptionGroup)
  + [`OLEDB_ORACLE` オプションのオプショングループへの追加](#LinkedServers_Oracle_OLEDB.Add)
  + [`OLEDB_ORACLE` バージョンオプションを別のバージョンに変更する](#LinkedServers_Oracle_OLEDB.Modify)
  + [オプショングループを DB インスタンスに関連付ける](#LinkedServers_Oracle_OLEDB.Apply)
+ [OLEDB プロバイダーのプロパティの変更](#LinkedServers_Oracle_OLEDB.ModifyProviderProperties)
+ [OLEDB ドライバープロパティの変更](#LinkedServers_Oracle_OLEDB.ModifyDriverProperties)
+ [Oracle とリンクされたサーバーの非アクティブ化](#LinkedServers_Oracle_OLEDB.Disable)

## サポート対象のバージョンとリージョン
<a name="LinkedServers_Oracle_OLEDB.VersionRegionSupport"></a>

RDS for SQL Server は、すべてのリージョンで、SQL Server Standard と Enterprise エディションの次のバージョンについて Oracle OLEDB とリンクしたサーバーをサポートします。
+ SQL Server 2022、すべてのバージョン
+ SQL Server 2019、すべてのバージョン
+ SQL Server 2017、すべてのバージョン

Oracle OLEDB とリンクされたサーバーは、以下の Oracle Database バージョンでサポートされています。
+ Oracle Database 21c、すべてのバージョン
+ Oracle Database 19c、すべてのバージョン
+ Oracle Database 18c、すべてのバージョン

Oracle OLEDB とリンクされたサーバーは、以下の OLEDB Oracle ドライバーバージョンでサポートされています。
+ 21.7
+ 21.16

## 制限と推奨事項
<a name="LinkedServers_Oracle_OLEDB.Limitations"></a>

Oracle OLEDB とリンクされたサーバーに適用される次の制約事項および推奨事項に注意してください。
+ 各 RDS for SQL Server DB インスタンスのセキュリティグループに適切な TCP ポートを追加して、ネットワークトラフィックを許可します。例えば、EC2 Oracle DB インスタンスと RDS for SQL Server DB インスタンスの間にリンクされたサーバーを設定する場合、EC2 Oracle DB インスタンスの IP アドレスからのトラフィックを許可する必要があります。また、SQL Server がデータベース通信をリッスンするために使用しているポートでのトラフィックを許可する必要があります。セキュリティグループの詳細については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。
+ オプショングループの `OLEDB_ORACLE` オプションをオン、オフ、または変更した後、RDS for SQL Server DB インスタンスを再起動します。オプショングループのステータスにはこれらのイベントに `pending_reboot` が表示され、必須です。常時オプションやミラーリングオプションが有効になっている RDS for SQL Server のマルチ AZ インスタンスの場合、インスタンスの新規作成後または復元後にインスタンスを再起動すると、フェイルオーバーが予想されます。
+ Oracle データソースのユーザー名とパスワードによる簡易認証のみをサポートします。
+ Open Database Connectivity (ODBC) ドライバーはサポートされていません。上記の OLEDB ドライバーバージョンのみがサポートされています。
+ 分散トランザクション (XA) はサポートされています。分散トランザクションを有効にするには、DB インスタンスのオプショングループで `MSDTC` オプションを有効にし、XA トランザクションが有効になっていることを確認します。詳細については、「[RDS for SQL Server での Microsoft 分散トランザクションコーディネーターのサポート](Appendix.SQLServer.Options.MSDTC.md)」を参照してください。
+ 接続文字列のショートカットとして使用するデータソース名 (DSN) の作成はサポートされていません。
+ OLEDB ドライバーのトレースはサポートされていません。SQL Server 拡張イベントを使用して OLEDB イベントをトレースできます。詳細については、「[RDS for SQL Server で拡張イベントを設定する](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)」を参照してください。
+ SQL Server Management Studio (SSMS) を使用して Oracle リンクサーバーのカタログフォルダにアクセスすることはサポートされていません。

## Oracle とリンクされたサーバーのアクティベーション
<a name="LinkedServers_Oracle_OLEDB.Enabling"></a>

RDS for SQL Server DB インスタンスに `OLEDB_ORACLE` オプションを追加して、Oracle とリンクされたサーバーを有効にします。以下のプロセスを使用します。

1. 新しいオプショングループを作成するか、既存のオプショングループを選択します。

1. オプショングループに [`OLEDB_ORACLE`] オプションを追加します。

1. 使用する OLEDB ドライバーのバージョンを選択します。

1. オプショングループを DB インスタンスに関連付けます。

1. DB インスタンスを再起動します。

### OLEDB\$1ORACLE のオプショングループの作成
<a name="LinkedServers_Oracle_OLEDB.OptionGroup"></a>

Oracle とリンクされたサーバーを使用するには、使用する DB インスタンスの SQL Server のエディションとバージョンに対応するオプショングループを作成または変更します。この手順を完了するには、AWS マネジメントコンソール または AWS CLI を使用してください。

#### コンソール
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.Console"></a>

次の手順では、SQL Server Standard Edition 2019 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. **[Create group]** (グループの作成) を選択します。

1. [**Create subnet group**(オプショングループの作成)] ウィンドウで以下を行います。

   1. [**名前**] に、AWS アカウント内で一意のオプショングループ名 (**oracle-oledb-se-2019** など) を入力します。名前には、英字、数字、ハイフンのみを使用できます。

   1. [**説明**] に、オプショングループの簡単な説明 (**OLEDB\$1ORACLE option group for SQL Server SE 2019** など) を入力します。この説明は表示用に使用されます。

   1. [**エンジン**] で [**sqlserver-se**] を選択します。

   1. **[Major engine version]** (メジャーエンジンのバージョン) で、**[15.00]** を選択します。

1. **[作成]** を選択します。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.OptionGroup.CLI"></a>

次の手順では、SQL Server Standard Edition 2019 のオプショングループを作成します。

**オプショングループを作成するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --engine-name sqlserver-se \
      --major-engine-version 15.00 \
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

  Windows の場合:

  ```
  aws rds create-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --engine-name sqlserver-se ^
      --major-engine-version 15.00 ^
      --option-group-description "OLEDB_ORACLE option group for SQL Server SE 2019"
  ```

### `OLEDB_ORACLE` オプションのオプショングループへの追加
<a name="LinkedServers_Oracle_OLEDB.Add"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `OLEDB_ORACLE` オプションをオプショングループに追加します。

#### コンソール
<a name="LinkedServers_Oracle_OLEDB.Add.Console"></a>

**OLEDB\$1ORACLE オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 作成したオプショングループ (この例では **oracle-oledb-se-2019**) を選択します。

1. **[オプションの追加]** を選択します。

1. **[Option details]** (オプションの詳細) で、**[Option name]** (オプション名) として **[OLEDB\$1ORACLE]** を選択します。

1. **Version** で、インストールする OLEDB Oracle ドライバーのバージョンを選択します。

1. **[スケジュール]** で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[オプションを追加]** を選択します。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

**OLEDB\$1ORACLE オプションを追加するには**
+ オプショングループに [`OLEDB_ORACLE`] オプションを追加します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.16 ^
      --apply-immediately
  ```

### `OLEDB_ORACLE` バージョンオプションを別のバージョンに変更する
<a name="LinkedServers_Oracle_OLEDB.Modify"></a>

`OLEDB_ORACLE` オプションバージョンを別のバージョンに変更するには、AWS マネジメントコンソール または AWS CLI を使用します。

#### コンソール
<a name="LinkedServers_Oracle_OLEDB.Modify.Console"></a>

**OLEDB\$1ORACLE オプションを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `OLEDB_ORACLE` オプションが含まれているオプショングループ (前の例では **oracle-oledb-se-2019**) を選択します。

1. **[Modify option]** (オプションの変更) を選択します。

1. **[Option details]** (オプションの詳細) で、**[Option name]** (オプション名) として **[OLEDB\$1ORACLE]** を選択します。

1. **[バージョン]** で、使用する OLEDB Oracle ドライバーのバージョンを選択します。

1. **[スケジュール]** で、オプションをすぐに変更するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[Modify option]** (オプションの変更) を選択します。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Add.CLI"></a>

`OLEDB_ORACLE` オプションバージョンを変更するには、使用するオプショングループおよびオプションバージョンを指定して、[https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html) AWS CLI コマンドを使用します。

**OLEDB\$1ORACLE オプションを変更するには**
+   
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-option-to-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds add-option-to-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OptionName=OLEDB_ORACLE, OptionVersion=21.7 ^
      --apply-immediately
  ```

### オプショングループを DB インスタンスに関連付ける
<a name="LinkedServers_Oracle_OLEDB.Apply"></a>

`OLEDB_ORACLE` オプショングループおよびパラメータグループを DB インスタンスに関連付けるには、AWS マネジメントコンソールまたは AWS CLI を使用します。

#### コンソール
<a name="LinkedServers_Oracle_OLEDB.Apply.Console"></a>

Oracle のリンクされたサーバーの有効化を完了するには、`OLEDB_ORACLE` オプショングループを新規または既存の DB インスタンスに関連付けます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

#### CLI
<a name="LinkedServers_Oracle_OLEDB.Apply.CLI"></a>

`OLEDB_ORACLE` オプショングループおよびパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

**`OLEDB_ORACLE` オプショングループおよびパラメータグループを使用してインスタンスを作成するには**
+ オプショングループの作成時に使用したのと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 15.0.4236.7.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 15.0.4236.7.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name
  ```

**インスタンスを変更して `OLEDB_ORACLE` オプショングループを関連付けるには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestsqlserveroracleoledbinstance \
      --option-group-name oracle-oledb-se-2019 \
      --db-parameter-group-name my-parameter-group-name \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestsqlserveroracleoledbinstance ^
      --option-group-name oracle-oledb-se-2019 ^
      --db-parameter-group-name my-parameter-group-name ^
      --apply-immediately
  ```

## OLEDB プロバイダーのプロパティの変更
<a name="LinkedServers_Oracle_OLEDB.ModifyProviderProperties"></a>

OLEDB プロバイダーのプロパティを表示および変更することができます。`master` ユーザーのみが、このタスクを実行できます。DB インスタンス上に作成された Oracle のリンクされたサーバーはすべて、その OLEDB プロバイダーの同じプロパティを使用します。`sp_MSset_oledb_prop` ストアドプロシージャを呼び出して、OLEDB プロバイダーのプロパティを変更します。

OLEDB プロバイダーのプロパティを変更するには

```
				
USE [master]
GO
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1 
EXEC sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'DynamicParameters', 0
GO
```

次のプロパティを変更できます。


****  

| プロパティ名 | 推奨値 (1 = オン、0 = オフ) | Description | 
| --- | --- | --- | 
| `Dynamic parameter` | 1 | パラメータ化されたクエリで SQL プレースホルダー ('?' で表されます) を許可します。 | 
| `Nested queries` | 1 | サブクエリなど、`FROM` 句内のネストされた `SELECT` ステートメントを許可します。 | 
| `Level zero only` | 0 | プロバイダーに対して呼び出されるのは、ベースレベルの OLEDB インターフェイスだけです。 | 
| `Allow inprocess` | 1 | Microsoft SQL Server を有効にすると、プロバイダーをインプロセスサーバーとしてインスタンス化できます。Oracle リンクサーバーを使用するには、このプロパティを 1 に設定します。 | 
| `Non transacted updates` | 0 | 0 以外の場合、SQL Server は更新を許可します。 | 
| `Index as access path` | 誤 | 0 以外の場合、SQL Server はプロバイダーのインデックスを使用してデータを取得しようとします。 | 
| `Disallow adhoc access` | 誤 | 設定すると、SQL Server は OLEDB プロバイダーに対するパススルークエリの実行を許可しません。このオプションはチェックできますが、パススルークエリを実行するのが適切な場合もあります。 | 
| `Supports LIKE operator` | 1 | プロバイダーが LIKE キーワードを使用したクエリをサポートしていることを示します。 | 

## OLEDB ドライバープロパティの変更
<a name="LinkedServers_Oracle_OLEDB.ModifyDriverProperties"></a>

Oracle にリンクされたサーバーを作成するとき、OLEDB ドライバーのプロパティを表示および変更できます。`master` ユーザーのみが、このタスクを実行できます。[Driver] (ドライバー) プロパティは、リモート Oracle データソースを使用するときに OLEDB ドライバーがデータを処理する方法を定義します。[Driver] (ドライバー) プロパティは、DB インスタンスで作成された各 Oracle リンクサーバーに固有です。`master.dbo.sp_addlinkedserver` ストアドプロシージャを呼び出して、OLEDB プロバイダーのプロパティを変更します。

例: リンクされたサーバーを作成して OLEDB ドライバー `FetchSize` プロパティを変更するには

```
	
EXEC master.dbo.sp_addlinkedserver
@server = N'Oracle_link2',
@srvproduct=N'Oracle',
@provider=N'OraOLEDB.Oracle',
@datasrc=N'my-oracle-test.cnetsipka.us-west-2.rds.amazonaws.com:1521/ORCL',
@provstr='FetchSize=200'
GO
```

```
	
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'Oracle_link2',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'master',
@rmtpassword='Test#1234'
GO
```

**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

## Oracle とリンクされたサーバーの非アクティブ化
<a name="LinkedServers_Oracle_OLEDB.Disable"></a>

Oracle でリンクされた Server を無効にするには、オプショングループから `OLEDB_ORACLE` オプションを削除します。

**重要**  
このオプションを削除しても、DB インスタンス上の既存のリンクされたサーバー設定は削除されません。DB インスタンスから削除するには、手動で削除する必要があります。  
削除後に `OLEDB_ORACLE` オプションを再度有効にすると、DB インスタンスで以前に設定したリンクされたサーバー設定を再利用できます。

### コンソール
<a name="LinkedServers_Oracle_OLEDB.Disable.Console"></a>

以下の手順では、`OLEDB_ORACLE` オプションを削除します。

**OLEDB\$1ORACLE オプションをオプショングループから削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `OLEDB_ORACLE` オプションが含まれているオプショングループ (前の例では `oracle-oledb-se-2019`) を選択します。

1. **[オプションを削除]** を選択します。

1. **[Deletion options]** (オプションの削除) で、**[Options to delete]** (削除するオプション) として **[OLEDB\$1ORACLE]** を選択します。

1. **[Apply immediately]** (すぐに適用) で、オプションをすぐに削除する場合は **[Yes]** (はい) を選択し、次のメンテナンスウィンドウで削除する場合は **[No]** (いいえ) を選択します。

1. **[削除]** を選択します。

### CLI
<a name="LinkedServers_Oracle_OLEDB.Disable.CLI"></a>

以下の手順では、`OLEDB_ORACLE` オプションを削除します。

**OLEDB\$1ORACLE オプションをオプショングループから削除するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name oracle-oledb-se-2019 \
      --options OLEDB_ORACLE \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name oracle-oledb-se-2019 ^
      --options OLEDB_ORACLE ^
      --apply-immediately
  ```

# RDS for SQL Server での Teradata ODBC を使用したリンクサーバー
<a name="USER_SQLServerTeradata"></a>

RDS for SQL Server での Teradata ODBC ドライバーを使用したリンクサーバーのサポートにより、Teradata データベース上の外部データソースにアクセスできます。RDS for SQL Server インスタンスの外部にあるリモート Teradata データベースサーバーからデータを読み取ってコマンドを実行できます。Teradata ODBC を使用したリンクサーバーを使用すると、次の機能が有効になります。
+ SQL Server 以外のデータソースに直接アクセスする。
+ データを移動することなく、同じクエリでさまざまな Teradata データソースに対してクエリを実行する。
+ エンタープライズエコシステム全体のデータソースに対して分散クエリ、更新、コマンド、トランザクションを発行する。
+ Microsoft ビジネスインテリジェンススイート (SSIS、SSRS、SSAS) 内から Teradata データベースへの接続を統合する。
+ Teradata データベースから RDS for SQL Server に移行する。

既存の RDS for SQL Server DB インスタンスまたは新しい RDS for SQL Server DB インスタンスで、Teradata 用のリンクサーバーを 1 つ以上アクティブ化できます。その後、外部の Teradata データソースを DB インスタンスと統合できます。

**Topics**
+ [サポート対象のバージョンとリージョン](#USER_SQLServerTeradata.VersionRegionSupport)
+ [制限と推奨事項](#USER_SQLServerTeradata.LimitsandRecommendations)
+ [マルチ AZ 配置に関する考慮事項](#USER_SQLServerTeradata.MultiAZ)
+ [Teradata とのリンクサーバーのアクティブ化](USER_SQLServerTeradata.Activate.md)
+ [Teradata とのリンクサーバーの作成](USER_SQLServerTeradata.CreateLinkedServers.md)
+ [Teradata にリンクされたサーバーの非アクティブ化](USER_SQLServerTeradata.Deactivate.md)

## サポート対象のバージョンとリージョン
<a name="USER_SQLServerTeradata.VersionRegionSupport"></a>

RDS for SQL Server は、すべての AWS リージョンで、SQL Server Standard Edition と SQL Server Enterprise Edition の次のバージョンについて Teradata ODBC を使用したリンクサーバーをサポートしています。
+ SQL Server 2022、すべてのバージョン
+ SQL Server 2019、すべてのバージョン
+ SQL Server 2017、すべてのバージョン

次の Teradata データベースバージョンは、RDS for SQL Server とのリンクをサポートしています。
+ Teradata 17.20、すべてのバージョン

## 制限と推奨事項
<a name="USER_SQLServerTeradata.LimitsandRecommendations"></a>

Teradata ODBC を使用したリンクサーバーには、次の制限が適用されます。
+ RDS for SQL Server は、Teradata ソースのユーザー名とパスワードによる簡易認証のみをサポートします。
+ RDS for SQL Server は、Teradata ODBC ドライバーのバージョン 17.20.0.33 のみをサポートします。
+ RDS for SQL Server は、接続文字列のショートカットとして使用するデータソース名 (DSN) の作成をサポートしません。
+ RDS for SQL Server は、ODBC ドライバーのトレースをサポートしません。ODBC イベントをトレースするには、SQL Server 拡張イベントを使用します。詳細については、「[RDS for SQL Server で拡張イベントを設定する](https://aws.amazon.com/blogs/database/set-up-extended-events-in-amazon-rds-for-sql-server/)」を参照してください。
+ RDS for SQL Server は、SQL Server Management Studio (SSMS) の使用時に Teradata リンクサーバーのカタログフォルダにアクセスすることをサポートしていません。

Teradata ODBC を使用したリンクサーバーを使用する際には、次の推奨事項を考慮してください。
+ 各 RDS for SQL Server DB インスタンスのセキュリティグループに適切な TCP ポートを追加して、ネットワークトラフィックを許可します。EC2 Teradata DB インスタンスと RDS for SQL Server DB インスタンスの間にリンクサーバーを設定する場合、EC2 Teradata DB インスタンスの IP アドレスからのトラフィックを許可する必要があります。また、RDS for SQL Server DB インスタンスがデータベース通信をリッスンするために使用しているポートでのトラフィックを許可する必要があります。セキュリティグループの詳細については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。
+ 分散トランザクション (XA) はサポートされています。分散トランザクションをアクティブにするには、DB インスタンスのオプショングループで `MSDTC` オプションを有効にし、XA トランザクションが有効になっていることを確認します。詳細については、「[RDS for SQL Server での Microsoft 分散トランザクションコーディネーターのサポート](Appendix.SQLServer.Options.MSDTC.md)」を参照してください。
+ リンクされた Teradata ODBC は、Teradata Server で設定されている限り、SSL/TLS をサポートします。詳細については、「[Enable TLS Connectivity on Teradata Vantage](https://docs.teradata.com/r/Enterprise_IntelliFlex_Lake_VMware/Teradata-Call-Level-Interface-Version-2-Reference-for-Workstation-Attached-Systems-20.00/Mainframe-TLS-Connectivity-Supplement/Enable-TLS-Connectivity-on-Teradata-Vantage)」を参照してください。

## マルチ AZ 配置に関する考慮事項
<a name="USER_SQLServerTeradata.MultiAZ"></a>

RDS for SQL Server は現在、マルチ AZ 配置内のミラーリングされたデータベースサーバー (または Always-On 可用性グループのセカンダリサーバー) にリンクサーバーをレプリケートしません。設定を変更してミラーリングまたは Always-On を追加する前にリンクサーバーを追加した場合、リンクサーバーは既存のリンクサーバーに対してコピーされます。

または、プライマリインスタンスにリンクサーバーを作成し、高可用性サーバーインスタンスにフェイルオーバーしてから、リンクサーバーを再度作成する方法でも、リンクサーバーを両方の RDS for SQL Server インスタンス上に存在させることができます。

# Teradata とのリンクサーバーのアクティブ化
<a name="USER_SQLServerTeradata.Activate"></a>

RDS for SQL Server DB インスタンスに `ODBC_TERADATA` オプションを追加して、Teradata とのリンクサーバーをアクティブ化します。以下のプロセスを使用します。

**Topics**
+ [`ODBC_TERADATA` のオプショングループの作成](#USER_SQLServerTeradata.Activate.CreateOG)
+ [`ODBC_TERADATA` オプションのオプショングループへの追加](#USER_SQLServerTeradata.Activate.AddOG)
+ [`ODBC_TERADATA` オプションを DB インスタンスに関連付ける](#USER_SQLServerTeradata.Activate.AssociateOG)

## `ODBC_TERADATA` のオプショングループの作成
<a name="USER_SQLServerTeradata.Activate.CreateOG"></a>

Teradata とのリンクサーバーを使用するには、オプショングループを作成するか、使用する DB インスタンスの SQL Server エディションおよびバージョンに対応するオプショングループを変更します。この手順を完了するには、AWS マネジメントコンソール または AWS CLI を使用してください。

### コンソール
<a name="USER_SQLServerTeradata.Activate.CreateOG.Console"></a>

次の手順を使用して、SQL Server Standard Edition 2019 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. **[Create group]** (グループの作成) を選択します。

1. **[Create option group]** (オプショングループを作成) ウィンドウで次の操作を行います。

   1. **[Name]** (名前) に、AWS アカウント 内で一意のオプショングループ名 (`teradata-odbc-se-2019` など) を入力します。名前には、英字、数字、ハイフンのみ使用できます。

   1. **[説明]** に、オプショングループの簡単な説明を入力します。

   1. [**エンジン**] で [**sqlserver-se**] を選択します。

   1. **[Major engine version]** (メジャーエンジンのバージョン) で、**[15.00]** を選択します。

1. **[作成]** を選択します。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.CreateOG.CLI"></a>

次の手順では、SQL Server Standard Edition 2019 のオプショングループを作成します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds create-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --engine-name sqlserver-se \
    --major-engine-version 15.00 \
    --option-group-description "ODBC_TERADATA option group for SQL Server SE 2019"
```

**Example**  
Windows の場合:  

```
aws rds create-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --engine-name sqlserver-se ^
    --major-engine-version 15.00 ^
    --option-group-description "ODBC_TERADATA option group for SQL Server SE 2019"
```

## `ODBC_TERADATA` オプションのオプショングループへの追加
<a name="USER_SQLServerTeradata.Activate.AddOG"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `ODBC_Teradata` オプションをオプショングループに追加します。

### コンソール
<a name="USER_SQLServerTeradata.Activate.AddOG.Console"></a>

次の手順を使用して、SQL Server Standard Edition 2019 のオプショングループを作成します。

**`ODBC_TERADATA` オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 新しいオプショングループを選択します。

1. **[オプションを追加]** を選択します。

1. **[オプションの詳細]** で以下を実行します。

   1. **[オプション名]** で **ODBC\$1TERADATA** を選択します。

   1. **オプションのバージョン**として `17.20.33.00` を選択します。

1. [スケジューリング] で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[オプションを追加]** を選択します。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.AddOG.CLI"></a>

次の手順では、オプショングループに `ODBC_TERADATA` オプションを追加します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds add-option-to-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --options "OptionName=ODBC_TERADATA,OptionVersion=17.20.33.00" \
    --apply-immediately
```

**Example**  
Windows の場合:  

```
aws rds add-option-to-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --options "OptionName=ODBC_TERADATA,OptionVersion=17.20.33.00" ^
    --apply-immediately
```

## `ODBC_TERADATA` オプションを DB インスタンスに関連付ける
<a name="USER_SQLServerTeradata.Activate.AssociateOG"></a>

`ODBC_TERADATA` オプショングループを DB インスタンスに関連付けるには、AWS マネジメントコンソールまたは AWS CLI を使用します。

### コンソール
<a name="USER_SQLServerTeradata.Activate.AssociateOG.Console"></a>

Teradata 用のリンクサーバーのアクティブ化を完了するには、オプショングループを新規または既存の DB インスタンスに関連付けます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれを関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

### AWS CLI
<a name="USER_SQLServerTeradata.Activate.AssociateOG.CLI"></a>

オプショングループの作成時に使用したのと同じ DB エンジンのタイプとメジャーバージョンを指定します。

Linux、macOS、Unix の場合:

```
aws rds create-db-instance \
    --db-instance-identifier mytestsqlserverteradataodbcinstance \
    --db-instance-class db.m5.2xlarge \
    --engine sqlserver-se \
    --engine-version 15.00 \
    --license-model license-included \
    --allocated-storage 100 \
    --master-username admin \
    --master-user-password password \
    --storage-type gp2 \
    --option-group-name teradata-odbc-se-2019
```

Windows の場合:

```
aws rds create-db-instance ^
    --db-instance-identifier mytestsqlserverteradataodbcinstance ^
    --db-instance-class db.m5.2xlarge ^
    --engine sqlserver-se ^
    --engine-version 15.00 ^
    --license-model license-included ^ 
    --allocated-storage 100 ^
    --master-username admin ^
    --master-user-password password ^
    --storage-type gp2 ^
    --option-group-name teradata-odbc-se-2019
```

インスタンスを変更して新しいオプショングループを関連付けるには:

Linux、macOS、Unix の場合:

```
aws rds modify-db-instance \
    --db-instance-identifier mytestsqlserverteradataodbcinstance \
    --option-group-name teradata-odbc-se-2019 \
    --apply-immediately
```

Windows の場合:

```
aws rds modify-db-instance ^
    --db-instance-identifier mytestsqlserverteradataodbcinstance ^
    --option-group-name teradata-odbc-se-2019 ^
    --apply-immediately
```

# Teradata とのリンクサーバーの作成
<a name="USER_SQLServerTeradata.CreateLinkedServers"></a>

Teradata とのリンクサーバーを作成するには、次のコマンドを実行します。

```
EXECUTE master.dbo.sp_addlinkedserver 
    @server = N'LinkedServer_NAME', 
    @srvproduct=N'', 
    @provider=N'MSDASQL', 
    @provstr=N'"PROVIDER=MSDASQL;DRIVER={Teradata Database ODBC Driver 17.20};
                DBCName=Server;UID=user_name;PWD=user_password;
                UseDataEncryption=YES/NO;SSLMODE=PREFER/ALLOW/DISABLE>;"', 
    @catalog='database'
```

```
EXECUTE master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'LinkedServer_NAME', 
    @locallogin = NULL , 
    @useself = N'False', 
    @rmtuser = N'user_name', 
    @rmtpassword = N'user_password'
```

上のコマンドの例を次に示します。

```
EXECUTE master.dbo.sp_addlinkedserver 
    @server = N'LinkedServerToTeradata', 
    @srvproduct=N'', 
    @provider=N'MSDASQL', 
    @provstr=N'"PROVIDER=MSDASQL;DRIVER={Teradata Database ODBC Driver 17.20};
                DBCName=my-teradata-test.cnetsipka.us-west-2.rds.amazonaws.com;
                UID=master;
                PWD=Test#1234;
                UseDataEncryption=YES;
                SSLMODE=PREFER;"', 
    @catalog='MyTestTeradataDB'

EXECUTE master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname = N'LinkedServerToTeradata', 
    @locallogin = NULL , 
    @useself = N'False', 
    @rmtuser = N'master', 
    @rmtpassword = N'Test#1234'
```

**注記**  
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

# Teradata にリンクされたサーバーの非アクティブ化
<a name="USER_SQLServerTeradata.Deactivate"></a>

Teradata へのリンクサーバーを非アクティブにするには、オプショングループから `ODBC_TERADATA` オプションを削除します。

**重要**  
このオプションを削除しても、DB インスタンス上のリンクサーバー設定は削除されません。DB インスタンスから削除するには、手動で削除する必要があります。  
削除後に `ODBC_TERADATA` を再度アクティブにすると、DB インスタンスで以前に設定したリンクサーバー設定を再利用できます。

## コンソール
<a name="USER_SQLServerTeradata.Deactivate.Console"></a>

オプショングループから `ODBC_TERADATA` オプションを削除するには

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `ODBC_TERADATA` オプションを含むオプショングループを選択します。

1. **[削除]** を選択します。

1. **[削除オプション]** で、**[削除するオプション]** の下の `ODBC_TERADATA` を選択します。

1. **[Apply immediately]** (すぐに適用) で、オプションをすぐに削除する場合は **[Yes]** (はい) を選択し、次のメンテナンスウィンドウで削除する場合は **[No]** (いいえ) を選択します。

1. **[削除]** を選択します。

## AWS CLI
<a name="USER_SQLServerTeradata.Deactivate.CLI"></a>

以下のコマンドは、`ODBC_TERADATA` オプションを削除します。

Linux、macOS、Unix の場合:

```
aws rds remove-option-from-option-group \
    --option-group-name teradata-odbc-se-2019 \
    --options ODBC_TERADATA \
    --apply-immediately
```

Windows の場合:

```
aws rds remove-option-from-option-group ^
    --option-group-name teradata-odbc-se-2019 ^
    --options ODBC_TERADATA ^
    --apply-immediately
```

# SQL Server のネイティブバックアップおよび復元のサポート
<a name="Appendix.SQLServer.Options.BackupRestore"></a>

SQL Server データベースのネイティブバックアップおよび復元を使用すると、オンプレミスデータベースの差分バックアップまたは完全バックアップを作成し、バックアップファイルを Amazon S3 に保存できます。これで、SQL Server を実行する既存の Amazon RDS DB インスタンスに復元できます。また、RDS for SQL Server データベースをバックアップして Amazon S3 に保存し、他の場所に復元することもできます。さらに、オンプレミスサーバーや SQL サーバーが実行されている別の Amazon RDS DB インスタンスにバックアップを復元できます。詳細については、「[ネイティブバックアップと復元を使用した SQL Server データベースのインポートとエクスポート](SQLServer.Procedural.Importing.md)」を参照してください。

Amazon RDS では、差分および完全バックアップファイル (.bak ファイル) を使用した、Microsoft SQL Server データベースのネイティブバックアップと復元をサポートしています。

## ネイティブバックアップおよび復元オプションの追加
<a name="Appendix.SQLServer.Options.BackupRestore.Add"></a>

DB インスタンスにネイティブバックアップおよび復元オプションを追加する一般的な手順は以下のとおりです。

1. 新しいオプショングループを作成するか、既存のオプショングループをコピーまたは変更します。

1. オプショングループに [`SQLSERVER_BACKUP_RESTORE`] オプションを追加します。

1. AWS Identity and Access Management (IAM) ロールとオプションを関連付けます。IAM ロールには、データベースバックアップを復元できるように S3 バケットのアクセス権限を付与します。

   つまり、オプションには、有効な Amazon リソースネーム (ARN) を`arn:aws:iam::account-id:role/role-name` 形式で設定するオプションが必要となります。詳細については、*AWS 全般のリファレンス* の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)」を参照してください。

   IAM ロールには、信頼関係と許可ポリシーがアタッチされている必要もあります。信頼関係は RDS がロールを引き受けることを許可し、許可ポリシーはロールが実行できるアクションを定義します。詳細については、「[ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM)」を参照してください。

1. オプショングループを DB インスタンスに関連付けます。

ネイティブバックアップおよび復元オプションを追加したら、DB インスタンスを再起動する必要はありません。オプショングループがアクティブになるとすぐ、バックアップと復元をスタートできます。

### コンソール
<a name="Add.Native.Backup.Restore.Console"></a>

**ネイティブバックアップおよび復元オプションを追加**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 新しいオプショングループを作成するか、既存のオプショングループを使用します。カスタム DB オプションの作成方法については、「[オプショングループを作成する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」を参照してください。

   既存のオプショングループを使用する場合は、次のステップに進んでください。

1. オプショングループに [**SQLSERVER\$1BACKUP\$1RESTORE**] オプションを追加します。オプションの追加方法の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。

1. 次のいずれかを行ってください。
   + 既存の IAM ロールおよびAmazon S3 設定を使用するには、**IAM ロール**に対して既存の IAM ロールを選択します。既存の IAM ロールを使用すると、RDS は、このロールに対して設定した Amazon S3 設定を使用します。
   + 新規ロールを作成し、Amazon S3 設定を構成するには、次の手順を実行します。

     1. **[IAM role]** (IAM ロール) は、**[Create a new role]** (新しいロールの作成) を選択します。

     1. 「**S3 バケット**」 で、リストからS3 バケットを選択します。

     1. 「**S3 プレフィックス (オプション)**」 で、Amazon S3 バケットに保存されているファイルに使用するプレフィックスを指定します。

        このプレフィックスにはファイルパスを含めることはできますが、必須ではありません。プレフィックスを提供すると、RDS はそのプレフィックスをすべてのバックアップファイルにアタッチします。その後、復元中に、RDS はプレフィックスを使用して関連ファイルを特定し、非関連ファイルを無視します。例えば、バックアップファイルを保持する以外の目的で、S3 バケットを使用することが可能です。この場合、RDS が、特定のフォルダやサブフォルダでネイティブバックアップおよび復元を実行するため、プレフィックスを使うことが可能です。

        プレフィックスを空白にした場合、RDS はプレフィックスを使用しないでバックアップファイルの特定およびファイルの復元を実行します。その結果、複数ファイルの復元中に、RDS は S3 バケットの各フォルダのすべてのファイルの復元を試みます。

     1. バックアップファイルを暗号化する場合は、「**暗号化を有効化する**」の チェックボックスを選択します。バックアップファイルを暗号化しない場合は、チェックボックスをオフにします (デフォルト)。

        「**暗号化を有効化する**」 を選択した場合、「**AWS KMS key**」で暗号化キーを選択します。暗号化キーの詳細については、*AWS Key Management Service デベロッパーガイド*の「[スタート方法](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html)」を参照してください。

1. [**オプションの追加**] を選択します。

1. 新規または既存の DB インスタンスに、DB オプショングループを適用します。
   + 新しい DB インスタンスの場合は、インスタンスを起動するときにオプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
   + 既存の DB インスタンスの場合は、インスタンスを修正し、新しいオプショングループを添付することで、オプショングループを適用します。(詳しくは、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。) 

### CLI
<a name="Add.Native.Backup.Restore.CLI"></a>

この手順では、以下を前提とします。
+ 既存のオプショングループに SQLSERVER\$1BACKUP\$1RESTORE オプションを追加します。オプションの追加方法の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。
+ このオプションを既存の IAM ロールに関連付けます。また、バックアップを保存するための S3 バケットへのアクセス権があります。
+ オプショングループを既存の DB インスタンスに適用します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

**ネイティブバックアップおよび復元オプションを追加**

1. オプショングループに [`SQLSERVER_BACKUP_RESTORE`] オプションを追加します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws rds add-option-to-option-group \
   	--apply-immediately \
   	--option-group-name mybackupgroup \
   	--options "OptionName=SQLSERVER_BACKUP_RESTORE, \
   	  OptionSettings=[{Name=IAM_ROLE_ARN,Value=arn:aws:iam::account-id:role/role-name}]"
   ```

   Windows の場合:

   ```
   aws rds add-option-to-option-group ^
   	--option-group-name mybackupgroup ^
   	--options "[{\"OptionName\": \"SQLSERVER_BACKUP_RESTORE\", ^
   	\"OptionSettings\": [{\"Name\": \"IAM_ROLE_ARN\", ^
   	\"Value\": \"arn:aws:iam::account-id:role/role-name"}]}]" ^
   	--apply-immediately
   ```
**注記**  
Windows コマンドプロンプトを使用する場合、JSON コードでは、二重引用符 (") の前にバックスラッシュ (\$1) を付けてエスケープする必要があります。

1. DB インスタンスにオプショングループを適用します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws rds modify-db-instance \
   	--db-instance-identifier mydbinstance \
   	--option-group-name mybackupgroup \
   	--apply-immediately
   ```

   Windows の場合:

   ```
   aws rds modify-db-instance ^
   	--db-instance-identifier mydbinstance ^
   	--option-group-name mybackupgroup ^
   	--apply-immediately
   ```

## ネイティブバックアップおよび復元オプションの設定の変更
<a name="Appendix.SQLServer.Options.BackupRestore.ModifySettings"></a>

ネイティブバックアップおよび復元オプションを有効にすると、オプションの設定を変更できます。オプション設定の変更方法の詳細については、「[オプションの設定を変更する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)」を参照してください。

## ネイティブバックアップおよび復元オプションの削除
<a name="Appendix.SQLServer.Options.BackupRestore.Remove"></a>

DB インスタンスからオプションを削除することによって、ネイティブバックアップおよび復元をオフにすることができます。ネイティブバックアップおよび復元オプションを削除したら、DB インスタンスを再起動する必要はありません。

DB インスタンスからネイティブバックアップおよび復元オプションを削除するには、次のいずれかを実行します。
+  オプションを所属するオプショングループから削除します。この変更はそのオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「[オプショングループからオプションを削除する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)」を参照してください。
+ DB インスタンスを修正して、ネイティブバックアップおよび復元オプションが含まれない別オプショングループを指定します。この変更は、単一の DB インスタンスに影響します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

# SQL サーバーの透過的なデータの暗号化サポート
<a name="Appendix.SQLServer.Options.TDE"></a>

Amazon RDS は、透過的なデータ暗号化 (TDE) を使用して、Microsoft SQL Server を実行する DB インスタンスのデータの暗号化をサポートします。TDE は、ストレージへの書き込み前に自動的にデータを暗号化し、ストレージからのデータの読み取り時に自動的にデータを復号します。

Amazon RDS は、次の SQL Server のバージョンおよびエディションの TDE をサポートしています。
+ SQL Server 2022: Standard および Enterprise Edition
+ SQL Server 2019: Standard および Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

**注記**  
RDS for SQL Server は、読み取り専用データベースの TDE をサポートしていません。

SQL Server の 透過的データ暗号化では、2 階層キーアーキテクチャを使用して暗号化キーの管理を行っています。証明書は、データベースマスターキーから生成され、データ暗号化キーの保護に使用されます。データベース暗号化キーにより、ユーザーデータベースのデータの実際の暗号化と復号が実行されます。データベースマスターキーと TDE 証明書は、Amazon RDS によりバックアップおよび管理されます。

透過的データ暗号化 (TDE) は、機密データの暗号化が必要なシナリオで使用されます。例えば、データファイルとバックアップをサードパーティーに提供したり、セキュリティ関連の規制遵守の問題に対処したりすることができます。`model` データベースや `master` データベースなど、SQL Server のシステムデータベースを暗号化することはできません。

透過的データ暗号化の詳細はこのガイドの範囲外ですが、暗号化アルゴリズムとキーのそれぞれのセキュリティ上の長所と短所を理解しておく必要があります。SQL Server の透過的データ暗号化の詳細については、Microsoft のドキュメントで「[透過的データ暗号化 (TDE)](http://msdn.microsoft.com/en-us/library/bb934049.aspx)」を参照してください。

**Topics**
+ [RDS for SQL Server の TDE をオンにする](#TDE.Enabling)
+ [RDS for SQL Server でのデータの暗号化](TDE.Encrypting.md)
+ [RDS for SQL Server での TDE 証明書のバックアップと復元](TDE.BackupRestoreRDS.md)
+ [オンプレミスデータベースの TDE 証明書のバックアップと復元](TDE.BackupRestoreOnPrem.md)
+ [RDS for SQL Server の TDE をオフにする](TDE.Disabling.md)

## RDS for SQL Server の TDE をオンにする
<a name="TDE.Enabling"></a>

RDS for SQL Server DB インスタンスに対して透過的なデータ暗号化 (TDE) をオンにするには、DB インスタンスに関連付けられている RDS オプショングループで TDE オプションを指定します。

1. DB インスタンスが、TDE オプションが含まれているオプショングループにすでに関連付けられているかどうかを確認します。DB インスタンスが関連付けられているオプショングループを表示するには、RDS コンソール、AWS CLI コマンド ([describe-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html))、または API オペレーション [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) を使用します。

1.  TDE がオンになっているオプショングループに DB インスタンスが関連付けられていない場合は、2 つのオプションから選択できます。オプショングループを作成して TDE オプションを追加するか、オプションを追加するように関連するオプショングループを変更することもできます。
**注記**  
RDS コンソールの場合、このオプション名は `TRANSPARENT_DATA_ENCRYPTION` です。AWS CLI と RDS API の場合、名前は `TDE` です。

   オプショングループの作成または変更の詳細については、「[オプショングループを使用する](USER_WorkingWithOptionGroups.md)」を参照してください。オプショングループへのオプションの追加の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。

1.  [TDE] オプションを持つオプショングループに DB インスタンスを関連付けます。オプショングループへの DB インスタンスの関連付けの詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

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

TDE オプションは、永続オプションです。すべての DB インスタンスおよびバックアップがオプショングループに関連付けられていない限り、オプショングループから削除することはできません。オプショングループに TDE オプションを追加したら、そのオプショングループは、TDE を使用する DB インスタンスにのみ関連付けることができます。オプショングループの永続オプションの詳細については、「[オプショングループの概要](USER_WorkingWithOptionGroups.md#Overview.OptionGroups)」を参照してください。

TDE オプションは永続オプションであるため、オプショングループおよび関連付けられている DB インスタンスとの間に競合が生じることがあります。次の状況で競合が生じることがあります。
+ TDE オプションを含む現在のオプショングループを、TDE オプションを含まないオプショングループに置き換えた。
+ DB スナップショットから復元した先の新しい DB インスタンスに TDE オプションを含むオプショングループがない。このシナリオの詳細については、「[オプショングループの考慮事項](USER_CopySnapshot.md#USER_CopySnapshot.Options)」を参照してください。

### SQL Server のパフォーマンスに関する考慮事項
<a name="TDE.Perf"></a>

透過的データ暗号化の使用は、SQL Server DB インスタンスのパフォーマンスに影響を与えることがあります。

暗号化されていないデータベースが DB インスタンスにあり、そのインスタンスに暗号化されたデータベースが 1 つでもあれば、暗号化されていないデータベースのパフォーマンスも低下することがあります。したがって、暗号化されたデータベースと暗号化されていないデータベースは別々の DB インスタンスに維持することをお勧めします。

# RDS for SQL Server でのデータの暗号化
<a name="TDE.Encrypting"></a>

TDE オプションがオプショングループに追加されると、暗号化プロセスに使用される証明書が Amazon RDS によって生成されます。その後、証明書を使用して、DB インスタンス上のデータベースのデータを暗号化する SQL ステートメントを実行できます。

以下の例では、RDS によって生成された `RDSTDECertificateName` という証明書を使用して、`myDatabase` というデータベースを暗号化しています。

```
 1. ---------- Turning on TDE -------------
 2. 
 3. -- Find an RDS TDE certificate to use
 4. USE [master]
 5. GO
 6. SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%'
 7. GO
 8. 
 9. USE [myDatabase]
10. GO
11. -- Create a database encryption key (DEK) using one of the certificates from the previous step
12. CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
13. ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName]
14. GO
15. 
16. -- Turn on encryption for the database
17. ALTER DATABASE [myDatabase] SET ENCRYPTION ON
18. GO
19. 
20. -- Verify that the database is encrypted
21. USE [master]
22. GO
23. SELECT name FROM sys.databases WHERE is_encrypted = 1
24. GO
25. SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys
26. GO
```

TDE を使用した SQL Server データベースの暗号化にかかる時間は、いくつかの要因によって異なります。例えば、DB インスタンスのサイズ、プロビジョンド IOPS ストレージがインスタンスに対して有効になっているかどうか、データ量などです。

# RDS for SQL Server での TDE 証明書のバックアップと復元
<a name="TDE.BackupRestoreRDS"></a>

RDS for SQL Server には、TDE 証明書のバックアップ、復元、および削除のためのストアドプロシージャが用意されています。RDS for SQL Server には、復元されたユーザー TDE 証明書を表示するための機能も用意されています。

ユーザー TDE 証明書は、オンプレミスで TDE がオンになっている RDS for SQL Server にデータベースを復元するために使用されます。これらの証明書には、プレフィックス `UserTDECertificate_` が付いています。データベースを復元した後、それらを使用できるようにする前に、RDS は、TDE を オンにしたデータベースを変更し、RDS で生成された TDE 証明書を使用するようにします。これらの証明書には、プレフィックス `RDSTDECertificate` が付いています。

ユーザー TDE 証明書は、`rds_drop_tde_certificate` ストアドプロシージャを使って削除しない限り、RDS for SQL Server DB インスタンスに残ります。(詳しくは、「[復元された TDE 証明書の削除](#TDE.BackupRestoreRDS.Drop)」を参照してください。)

ユーザー TDE 証明書を使用して、移行元 DB インスタンスから他のデータベースを復元できます。復元するデータベースは同じ TDE 証明書を使用し、TDE がオンになっている必要があります。同じ証明書を再度インポート (復元) する必要はありません。

**Topics**
+ [前提条件](#TDE.BackupRestoreRDS.Prereqs)
+ [制限事項](#TDE.Limitations)
+ [TDE 証明書のバックアップ](#TDE.BackupRestoreRDS.Backup)
+ [TDE 証明書の復元](#TDE.BackupRestoreRDS.Restore)
+ [復元された TDE 証明書の表示](#TDE.BackupRestoreRDS.Show)
+ [復元された TDE 証明書の削除](#TDE.BackupRestoreRDS.Drop)

## 前提条件
<a name="TDE.BackupRestoreRDS.Prereqs"></a>

RDS for SQL Server で TDE 証明書をバックアップまたは復元する前に、次のタスクを実行してください。最初の 3 つについては、「[ネイティブバックアップおよび復元のセットアップ](SQLServer.Procedural.Importing.Native.Enabling.md)」を参照してください。

1. バックアップおよび復元するファイルを保存するための Amazon S3 汎用バケットまたはディレクトリバケットを作成します。

   データベースバックアップと TDE 証明書のバックアップには、別々のバケットを使用することをお勧めします。

1. ファイルのバックアップと復元用の IAM ロールを作成します。

   IAM ロールは、AWS KMS key のユーザーおよび管理者の両方である必要があります。

   ディレクトリバケットを使用する場合、ディレクトリバケットで [ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM) に必要なアクセス許可以外、追加のアクセス許可は必要ありません。

   S3 リソースを使用する場合、[ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM) に必要なアクセス許可に加えて、IAM ロールには次のアクセス許可も必要です。
   + S3 バケットリソースの `s3:GetBucketAcl`、`s3:GetBucketLocation`、および`s3:ListBucket`

1. DB インスタンスのオプショングループに追加された `SQLSERVER_BACKUP_RESTORE` オプション。

   これは、`TRANSPARENT_DATA_ENCRYPTION` (`TDE`) オプションへの追加です。

1. 対称暗号化 KMS キーであることを確認します。次のオプションがあります。
   + アカウントに既存の KMS キーがある場合は、それを使用できます。これ以上の操作は不要です。
   + アカウントに既存の対称暗号化 KMS キーがない場合は、*AWS Key Management Serviceデベロッパーガイド*の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)」の手順に従って KMS キーを作成します。

1. Amazon S3 統合を有効にして、DB インスタンスと Amazon S3 の間でファイルを転送します。

   Amazon S3 統合を有効にするための詳細については、「[Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)」を参照してください。

   ディレクトリバケットは S3 統合ではサポートされていないことにご注意ください。このステップは、[オンプレミスデータベースの TDE 証明書のバックアップと復元](TDE.BackupRestoreOnPrem.md) にのみ必要です。

## 制限事項
<a name="TDE.Limitations"></a>

ストアドプロシージャを使用して TDE 証明書をバックアップおよび復元する場合、次の制限があります。
+ `SQLSERVER_BACKUP_RESTORE` および `TRANSPARENT_DATA_ENCRYPTION` (`TDE`) オプションはどちらも DB インスタンスに関連付けられたオプショングループに追加されている必要があります。
+ TDE 証明書のバックアップと復元は、マルチ AZ DB インスタンスではサポートされていません。
+ TDE 証明書のバックアップおよび復元タスクのキャンセルはサポートされていません。
+ RDS for SQL Server DB インスタンス上の他のデータベースの TDE 暗号化にユーザー TDE 証明書を使用することはできません。これを使用して復元できるのは、TDE がオンになっていて、同じ TDE 証明書を使用する移行元 DB インスタンスから他のデータベースのみです。
+ 削除できるのはユーザー TDE 証明書のみです。
+ RDS でサポートされているユーザー TDE 証明書の最大数は 10 です。数が 10 を超える場合は、未使用の TDE 証明書を削除して、もう一度試してください。
+ 証明書名を空または null にすることはできません。
+ 証明書を復元する場合、証明書名にキーワード `RDSTDECERTIFICATE` を含めることはできません。また、プレフィックス `UserTDECertificate_` で始まる必要があります。
+ `@certificate_name` パラメータには、a ～ z、0 ～ 9、@、\$1、\$1、下線 (\$1) の文字のみを含めることができます。
+ `@certificate_file_s3_arn` のファイル拡張子は .cer (大文字小文字を区別しない) にする必要があります。
+ `@private_key_file_s3_arn` のファイル拡張子は .pvk (大文字小文字を区別しない) にする必要があります。
+ プライベートキーファイルの S3 メタデータには、`x-amz-meta-rds-tde-pwd` タグが含まれる必要があります。詳細については、「[オンプレミスデータベースの TDE 証明書のバックアップと復元](TDE.BackupRestoreOnPrem.md)」を参照してください。
+ RDS for SQL Server は、TDE のクロスアカウントキーの使用をサポートしていません。

## TDE 証明書のバックアップ
<a name="TDE.BackupRestoreRDS.Backup"></a>

TDE 証明書をバックアップするには、`rds_backup_tde_certificate` ストアドプロシージャを使用します。これには、以下の構文があります。

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id',
    [@overwrite_s3_files=0|1];
```

以下のパラメータは必須です。
+ `@certificate_name` — バックアップする TDE 証明書の名前。
+ `@certificate_file_s3_arn` — Amazon S3 の証明書バックアップファイルの送信先 Amazon リソースネーム (ARN)。
+ `@private_key_file_s3_arn` — TDE 証明書を保護するぷらいべーとキーファイルの送信先 S3 ARN。
+ `@kms_password_key_arn` — プライベートキーのパスワードの暗号化に使用される対称 KMS キーの ARN。

次のパラメータはオプションです。
+ `@overwrite_s3_files` — S3 内の既存の証明書および秘密キーファイルを上書きするかどうかを示します。
  + `0` – 既存のファイルを上書きしません。この値はデフォルト値です。

    設定 `@overwrite_s3_files` を 0 にすると、ファイルが既に存在している場合はエラーが返されます。
  + `1` – バックアップファイルではない場合でも、指定された名前を持つ既存のファイルを上書きします。

**Example TDE 証明書のバックアップ**  

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='RDSTDECertificate20211115T185333',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE',
    @overwrite_s3_files=1;
```

## TDE 証明書の復元
<a name="TDE.BackupRestoreRDS.Restore"></a>

ユーザー TDE 証明書を復元 (インポート) するには `rds_restore_tde_certificate` ストアドプロシージャを使用します。これには、以下の構文があります。

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';
```

以下のパラメータは必須です。
+ `@certificate_name` — 復元する TDE 証明書の名前。名前はプレフィックス `UserTDECertificate_` で開始する必要があります。
+ `@certificate_file_s3_arn` — TDE 証明書を復元するために使用されるバックアップファイルの S3 ARN。
+ `@private_key_file_s3_arn` — 復元する TDE 証明書のプライベートキーバックアップファイルの S3 ARN。
+ `@kms_password_key_arn` — プライベートキーのパスワードの暗号化に使用される対称 KMS キーの ARN。

**Example TDE 証明書の復元**  

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_myTDEcertificate',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

## 復元された TDE 証明書の表示
<a name="TDE.BackupRestoreRDS.Show"></a>

復元 (インポート) したユーザー TDE 証明書を表示するには `rds_fn_list_user_tde_certificates` 関数を使用します。これには、以下の構文があります。

```
SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();
```

出力は以下のようになります。すべての列がここに表示されるわけではありません。


|  |  |  |  |  |  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |--- |--- |
| name | certificate\$1id | principal\$1id | pvt\$1key\$1encryption\$1type\$1desc | issuer\$1name | cert\$1serial\$1number | thumbprint | subject | start\$1date | expiry\$1date | pvt\$1key\$1last\$1backup\$1date | 
| UserTDECertificate\$1tde\$1cert | 343 | 1 | ENCRYPTED\$1BY\$1MASTER\$1KEY | AnyCompany Shipping | 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af | 0x6BB218B34110388680B FE1BA2D86C695096485B5 | AnyCompany Shipping | 2022-04-05 19:49:45.0000000 | 2023-04-05 19:49:45.0000000 | NULL | 

## 復元された TDE 証明書の削除
<a name="TDE.BackupRestoreRDS.Drop"></a>

使用していない復元された (インポートされた) ユーザー TDE 証明書を削除するには、`rds_drop_tde_certificate` ストアドプロシージャを使用します。これには、以下の構文があります。

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
```

以下のパラメータは必須です。
+ `@certificate_name`— 削除する TDE 証明書の名前。

復元された (インポートされた) TDE 証明書のみを削除できます。RDS で作成された証明書は削除できません。

**Example TDE 証明書の削除**  

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';
```

# オンプレミスデータベースの TDE 証明書のバックアップと復元
<a name="TDE.BackupRestoreOnPrem"></a>

オンプレミスデータベースの TDE 証明書をバックアップし、後でそれらを RDS for SQL Server に復元できます。RDS for SQL Server TDE 証明書をオンプレミス DB インスタンスに復元することもできます。

**注記**  
RDS for SQL Server は、TDE のクロスアカウントキーの使用をサポートしていません。

次の手順では、TDE 証明書とプライベートキーをバックアップします。プライベートキーは、対称暗号化 KMS キーから生成されたデータキーを使用して暗号化されます。

**オンプレミスの TDE 証明書をバックアップするには**

1. AWS CLI [generate-data-key](https://docs.aws.amazon.com/cli/latest/reference/kms/generate-data-key.html) コマンドを使用して、データキーを生成します。

   ```
   aws kms generate-data-key \
       --key-id my_KMS_key_ID \
       --key-spec AES_256
   ```

   出力は以下のようになります。

   ```
   {
   "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
   BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
   2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==",
   "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=",
   "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33"
   }
   ```

   次のステップで、プレーンテキスト出力をプライベートキーのパスワードとして使用します。

1. 次の例に示すように、TDE 証明書をバックアップします。

   ```
   BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (
   FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk',
   ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
   ```

1. 証明書のバックアップファイルを Amazon S3 証明書バケットに保存します。

1. プライベートキーのバックアップファイルを S3 証明書バケットに保存し、ファイルのメタデータに次のタグを付けます。
   + キー – `x-amz-meta-rds-tde-pwd`
   + 値 — データキーの生成による `CiphertextBlob` 値、以下の例を参照。

     ```
     AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B
     BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ
     2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==
     ```

次の手順では、RDS for SQL Server TDE 証明書をオンプレミス DB インスタンスに復元します。証明書のバックアップ、対応するプライベートキーファイル、およびデータキーを使用して、移行先 DB インスタンスに TDE 証明書をコピーして復元します。復元された証明書は、新しいサーバーのデータベースマスターキーによって暗号化されます。

**TDE 証明書を復元するには**

1. TDE 証明書のバックアップファイルとプライベートキーファイルを Amazon S3 から移行先インスタンスにコピーします。Amazon S3 からのファイルコピーの詳細については、「[RDS for SQL Server と Amazon S3 間のファイル転送](Appendix.SQLServer.Options.S3-integration.using.md)」を参照してください。

1. KMS キーを使用して出力暗号テキストを復号化し、データキーのプレーンテキストを取得します。暗号テキストは、プライベートキーバックアップファイルの S3 メタデータにあります。

   ```
   aws kms decrypt \
       --key-id my_KMS_key_ID \
       --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \
       --output text \
       --query Plaintext
   ```

   次のステップで、プレーンテキスト出力をプライベートキーのパスワードとして使用します。

1. 次の SQL コマンドを使用して、TDE 証明書を復元します。

   ```
   CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer'
   WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk',
   DECRYPTION BY PASSWORD = 'plain_text_output');
   ```

KMS の復号化の詳細については、「*AWS CLI コマンドリファレンス*」の KMS セクションの「[復号](https://docs.aws.amazon.com/cli/latest/reference/kms/decrypt.html)」を参照してください。

TDE 証明書が移行先 DB インスタンスで復元された後、その証明書を使用して暗号化されたデータベースを復元できます。

**注記**  
同じ TDE 証明書を使用して、移行元 DB インスタンス上の複数の SQL Server データベースを暗号化できます。複数のデータベースを移行先インスタンスに移行するには、それらに関連付けられた TDE 証明書を移行先インスタンスに一度だけコピーします。

# RDS for SQL Server の TDE をオフにする
<a name="TDE.Disabling"></a>

RDS for SQL Server DB インスタンスの TDE をオフにするには、まず、DB インスタンスに暗号化されたオブジェクトが残っていないようにします。これを行うには、オブジェクトを復号化するか、削除します。暗号化されたオブジェクトが DB インスタンスに残っている場合は、DB インスタンスに対して TDE をオフにすることはできません。暗号化用のユーザー TDE 証明書が復元 (インポート) された場合は、削除する必要があります。コンソールを使用してオプショングループから TDE オプションを削除すると、処理中であることがコンソールに示されます。さらに、オプショングループが暗号化された DB インスタンスまたは DB スナップショットに関連付けられている場合は、エラーイベントが作成されます。

以下の例では、`customerDatabase` というデータベースから TDE 暗号化を削除しています。

```
 1. ------------- Removing TDE ----------------
 2. 
 3. USE [customerDatabase]
 4. GO
 5. 
 6. -- Turn off encryption of the database
 7. ALTER DATABASE [customerDatabase]
 8. SET ENCRYPTION OFF
 9. GO
10. 
11. -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while
12. SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys
13. GO
14. 
15. -- Drop the DEK used for encryption
16. DROP DATABASE ENCRYPTION KEY
17. GO
18. 
19. -- Drop a user TDE certificate if it was restored (imported)
20. EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
21. 
22. -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated
23. USE [master]
24. GO
25. ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE
26. GO
```

すべてのオブジェクトを復号すると、2 つのオプションを使用できます。

1. DB インスタンスを変更して TDE オプションが含まれていないオプショングループに関連付けることができます。

1. オプショングループから TDE オプションを削除できます。

# SQL Server Audit
<a name="Appendix.SQLServer.Options.Audit"></a>

Amazon RDS では、組み込みの SQL Server 監査メカニズムを使用して、Microsoft SQL Server データベースを監査することができます。監査と監査の仕様は、オンプレミスのデータベースサーバー用にそれらを作成するのと同じ方法で作成することができます。

RDS は、完了した監査ログを S3 バケットにアップロードします。この際、作成されたロールを IAM 使用します。保存を有効にしている場合、RDS は設定された期間、監査ログを DB インスタンスに保存します。

詳細については、Microsoft SQL Server ドキュメントの「[SQL Server Audit (database engine)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)」を参照してください。

## データベースアクティビティストリームを使用した SQL Server Audit
<a name="Appendix.SQLServer.DAS.Audit"></a>

RDS のデータベースアクティビティストリームを使用すると、SQL Server Audit イベントを Imperva、McAfee、IBM のデータベースアクティビティ監視ツールと統合できます。RDS SQL Server のデータベースアクティビティストリームによる監査の詳細については、「[Microsoft SQL Server での監査](DBActivityStreams.md#DBActivityStreams.Overview.SQLServer-auditing)」を参照してください。

**Topics**
+ [データベースアクティビティストリームを使用した SQL Server Audit](#Appendix.SQLServer.DAS.Audit)
+ [SQL Server Audit のサポート](#Appendix.SQLServer.Options.Audit.Support)
+ [SQL Server Audit を DB インスタンスオプションに追加する](Appendix.SQLServer.Options.Audit.Adding.md)
+ [SQL Server Audit を使用する](Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications.md)
+ [監査ログの表示](Appendix.SQLServer.Options.Audit.AuditRecords.md)
+ [マルチ AZ インスタンスで SQL Server Audit を使用する](#Appendix.SQLServer.Options.Audit.Multi-AZ)
+ [S3 バケットを設定する](Appendix.SQLServer.Options.Audit.S3bucket.md)
+ [SQL Server Audit の IAM ロールを手動で作成する](Appendix.SQLServer.Options.Audit.IAM.md)

## SQL Server Audit のサポート
<a name="Appendix.SQLServer.Options.Audit.Support"></a>

Amazon RDS では、SQL Server 2016 以降、SQL Server のすべてのエディションでサーバーレベルの監査がサポートされており、Enterprise エディションでもデータベースレベルの監査がサポートされています。SQL サーバー 2016 (13.x) SP1 以降では、すべてのエディションでサーバーレベルとデータベースレベルの両方の監査がサポートされています。詳細については、SQL Server ドキュメントの「[SQL Server Audit (database engine)](https://docs.microsoft.com/sql/relational-databases/security/auditing/sql-server-audit-database-engine)」を参照してください。

RDS では、SQL Server Audit に関する次のオプション設定の構成をサポートしています。


| オプション設定 | 有効な値 | 説明 | 
| --- | --- | --- | 
| IAM\$1ROLE\$1ARN | 形式 arn:aws:iam::account-id:role/role-name の有効な Amazon リソースネーム (ARN)。 | 監査ログを保存する S3 バケットへのアクセスを許可する IAM ロールの ARN。詳細については、AWS 全般のリファレンス の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-iam)」を参照してください。 | 
| S3\$1BUCKET\$1ARN | arn:aws:s3:::amzn-s3-demo-bucket 形式または arn:aws:s3:::amzn-s3-demo-bucket/key-prefix 形式の有効な ARN。 | 監査ログを保存する S3 バケットの ARN。 | 
| ENABLE\$1COMPRESSION | true または false | 監査ログの圧縮を行います。デフォルトでは、圧縮は有効です (true に設定されている)。 | 
| RETENTION\$1TIME | 0 ～840  | SQL Server 監査レコードが RDS インスタンスに保持される保持期間 (時間単位)。保持設定は、デフォルトでは無効になります。 | 

# SQL Server Audit を DB インスタンスオプションに追加する
<a name="Appendix.SQLServer.Options.Audit.Adding"></a>

SQL Server 監査を有効にするには、DB インスタンスでオプションを有効にすることと、SQL Server 内の機能を有効にすることの 2 つのステップを行う必要があります。SQL Server Audit オプションを DB インスタンスに追加するプロセスは次のとおりです。

1. 新しいオプショングループを作成するか、既存のオプショングループをコピーまたは変更します。

1. すべての必須オプションを追加して構成します。

1. オプショングループを DB インスタンスに関連付けます。

SQL Server Audit オプションを追加後、DB インスタンスを再起動する必要はありません。オプショングループがアクティブになった時点で、監査を作成して監査ログを S3 バケットに保存できるようになります。

**DB インスタンスのオプショングループに SQL Server Audit を追加して設定するには**

1. 次のいずれかを選択します。
   + 既存のオプショングループを使用します。
   + カスタムの DB オプショングループを作成し、そのオプショングループを使用します。詳細については、「[オプショングループを作成する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)」を参照してください。

1. オプショングループに [**SQLSERVER\$1AUDIT**] オプションを追加し、オプション設定を構成します。オプションの追加方法の詳細については、「[オプショングループにオプションを追加する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)」を参照してください。
   + 必要なポリシーがアタッチされた IAM ロールがある場合は、[**IAM ロール**] で、そのロールを選択できます。新しい IAM ロールを作成するには、[**新しいロールの作成**] を選択します。必要なポリシーの詳細については、[SQL Server Audit の IAM ロールを手動で作成する](Appendix.SQLServer.Options.Audit.IAM.md) を参照してください。
   + 使用する S3 バケットが既にある場合は、[**S3 送信先の選択**] で、そのバケットを選択します。S3 バケットを作成するには、[**新しい S3 バケットの作成**] を選択します。
   + 監査ファイルを圧縮する場合は、[**圧縮の有効化**] オプションをオンにします。デフォルトでは、圧縮は有効になっています。圧縮を無効にするには、[**Enable Compression (圧縮の有効化)**] をオフにします。
   + DB インスタンスの監査レコードを保持するには、[**Audit log retention (監査ログの保持**)] オプションをオンにします。保持期間 (時間) を指定します。最大保持期間は 35 日間です。

1. 新規または既存の DB インスタンスに、DB オプショングループを適用します。次のいずれかを選択します。
   + 新しい DB インスタンスを作成する場合は、インスタンスを起動するときにオプショングループを適用します。
   + 既存の DB インスタンスで、インスタンスを変更し、新しいオプショングループをアタッチして、オプショングループを適用します。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

## SQL Server Audit オプションを変更する
<a name="Appendix.SQLServer.Options.Audit.Modifying"></a>

SQL Server Audit オプションを有効にしたら、設定を変更できます。オプション設定の変更方法の詳細については、「[オプションの設定を変更する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)」を参照してください。

## DB インスタンスオプションから SQL Server Audit を削除する
<a name="Appendix.SQLServer.Options.Audit.Removing"></a>

SQL Server Audit 機能をオフにするには、監査を無効にし、オプションを削除します。

**監査を削除するには**

1. SQL Server 内の監査設定をすべて無効にします。監査が実行されている場所を確認するには、SQL Server セキュリティカタログビューをクエリします。詳細については、Microsoft SQL Server ドキュメントの「[Security catalog views](https://docs.microsoft.com/sql/relational-databases/system-catalog-views/security-catalog-views-transact-sql)」を参照してください。

1. DB インスタンスから SQL Server Audit オプションを削除します。次のいずれかを選択します。
   + DB インスタンスで使用しているオプショングループから SQL Server Audit オプションを削除します。この変更は同じオプショングループを使用するすべての DB インスタンスに影響します。詳細については、「[オプショングループからオプションを削除する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)」を参照してください。
   + DB インスタンスを変更し、オプショングループを選択します (SQL Server Audit オプションはオフ)。この変更は、変更した DB インスタンスにのみ影響します。デフォルト (空) のオプショングループや別のカスタムオプショングループを指定できます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

1. DB インスタンスから SQL Server Audit オプションを削除後、インスタンスを再起動する必要はありません。S3 バケットから不要な監査ファイルを削除します。

# SQL Server Audit を使用する
<a name="Appendix.SQLServer.Options.Audit.CreateAuditsAndSpecifications"></a>

サーバー監査、サーバー監査の仕様、およびデータベース監査の仕様は、オンプレミスデータベースサーバーの場合と同じ方法で制御することができます。

## 監査の作成
<a name="Appendix.SQLServer.Options.Audit.CreateAudits"></a>

サーバーの監査は、オンプレミスデータベースサーバーで作成した方法と同じ方法で作成することができます。サーバー監査の作成方法については、Microsoft SQL Server ドキュメントの「[CREATE SERVER AUDIT](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-transact-sql)」を参照してください。

エラーを回避するには、次の制限に準拠します。
+ インスタンスごとにサポートされるサーバー監査の最大数 50 を超えない。
+ データをバイナリファイルに書き込むように SQL Server に指示する。
+ サーバーの監査名のプリフィックスとして `RDS_` を使用しない。
+ `FILEPATH` で、`D:\rdsdbdata\SQLAudit` を指定する。
+ `MAXSIZE` で、2 MB～50 MB の間のサイズを指定する。
+ `MAX_ROLLOVER_FILES` または `MAX_FILES` を設定しない。
+ 監査レコードの書き込みに失敗した場合に DB インスタンスをシャットダウンするように SQL Server を構成しない。

## 監査仕様の作成
<a name="Appendix.SQLServer.Options.Audit.CreateSpecifications"></a>

サーバー監査仕様とデータベース監査仕様は、オンプレミスデータベースサーバーで作成するのと同じ方法で作成します。監査仕様の作成方法については、Microsoft SQL Server のドキュメントの「[CREATE SERVER AUDIT SPECIFICATION](https://docs.microsoft.com/sql/t-sql/statements/create-server-audit-specification-transact-sql)」および「[CREATE DATABASE AUDIT SPECIFICATION](https://docs.microsoft.com/sql/t-sql/statements/create-database-audit-specification-transact-sql)」を参照してください。

エラーを回避するために、データベース監査仕様またはサーバー監査仕様の名前のプリフィックスとして `RDS_` を使用しないでください。

# 監査ログの表示
<a name="Appendix.SQLServer.Options.Audit.AuditRecords"></a>

監査ログは `D:\rdsdbdata\SQLAudit` に格納されます。

ファイルがサイズ制限に達している場合に SQL Server が監査ログファイルへの書き込みを完了すると、Amazon RDS はファイルを S3 バケットにアップロードします。保持設定が有効になっている場合、Amazon RDS は、このファイルを保持フォルダ (`D:\rdsdbdata\SQLAudit\transmitted`) に移動します。

保持設定については、[SQL Server Audit を DB インスタンスオプションに追加する](Appendix.SQLServer.Options.Audit.Adding.md) を参照してください。

監査ログファイルがアップロードされるまで、監査レコードは DB インスタンスに維持されます。監査レコードを表示するには、次のコマンドを実行します。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\*.sqlaudit'
	             , default
	             , default )
```

同じコマンドを使用して、保持フォルダの監査レコードを表示するには、フィルタを `D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit` に変更します。

```
SELECT   * 
	FROM     msdb.dbo.rds_fn_get_audit_file
	             ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit'
	             , default
	             , default )
```

## マルチ AZ インスタンスで SQL Server Audit を使用する
<a name="Appendix.SQLServer.Options.Audit.Multi-AZ"></a>

マルチ AZ インスタンスで、監査ログファイルを Amazon S3 に送信するためのプロセスは、単一 AZ インスタンスのプロセスと似ています。ただし、重要な相違点がいくつかあります。
+ データベース監査仕様オブジェクトはすべてのノードにレプリケートされます。
+ サーバー監査およびサーバー監査仕様は、セカンダリノードにはレプリケートされません。その代わりに、手動で作成または変更する必要があります。

サーバー監査またはサーバー監査仕様を両方のノードからキャプチャするには

1. サーバー監査またはサーバー監査仕様をプライマリノードに作成します。

1. セカンダリノードにフェイルオーバーし、セカンダリノードに同じ名前と GUID を持つサーバー監査仕様またはサーバー監査仕様を作成します。GUID を指定するには、`AUDIT_GUID` パラメータを使用します。

# S3 バケットを設定する
<a name="Appendix.SQLServer.Options.Audit.S3bucket"></a>

監査ログファイルは、DB インスタンスから S3 バケットに自動的にアップロードされます。監査ファイルのターゲットとして使用する S3 バケットには、以下の制限が適用されます。
+ DB インスタンスと同じ AWS リージョンおよび AWS アカウントにある必要があります。
+ 公開することは禁止されています。
+ バケット所有者は IAM ロール所有者でもある必要があります。
+ IAM ロールには、S3 バケットのサーバー側の暗号化に関連付けられたカスタマー管理の KMS キーに対するアクセス許可が必要です。

データを格納するために使用されるターゲットキーは、次の命名スキーマに従います: `amzn-s3-demo-bucket/key-prefix/instance-name/audit-name/node_file-name.ext` 

**注記**  
バケット名とキープレフィックス値の両方を (`S3_BUCKET_ARN`) オプションで設定します。

このスキーマは、以下の要素で構成されています。
+ ***amzn-s3-demo-bucket*** – S3 バケットの名前。
+ **`key-prefix`** - 監査ログに使用するカスタムキープレフィックス。
+ **`instance-name`** - Amazon RDS インスタンスの名前。
+ **`audit-name`** - 監査の名前。
+ **`node`** - 監査ログの出典であるノードの識別子 (`node1` または `node2`)。シングル AZ インスタンスには 1 つのノード、マルチ AZ インスタンスには 2 つのレプリケーションノードがあります。プライマリノードとセカンダリノードのロールは時間とともに変化するため、これらはプライマリノードとセカンダリノードではありません。その代わりに、ノード識別子はシンプルなラベルです。
  + **`node1`** - 初期のレプリケーションノード (シングル AZ には 1 つのノードのみがあります)。
  + ** 2 `node2`** -番目のレプリケーションノード (マルチ AZ には 2 つのノードがあります)。
+ **`file-name`** - ターゲットファイルの名前。ファイル名は SQL Server からそのまま取得されます。
+ **`ext`** - ファイルの拡張子 (`zip` または `sqlaudit`)。
  + **`zip`** - 圧縮が有効になっているかどうか (デフォルト)。
  + **`sqlaudit`** - 圧縮が無効になっているかどうか。

# SQL Server Audit の IAM ロールを手動で作成する
<a name="Appendix.SQLServer.Options.Audit.IAM"></a>

通常、新しいオプションを作成すると、AWS マネジメントコンソール は IAM ロールと IAM 信頼ポリシーを作成します。ただし、SQL Server Audits で使用する新しい IAM ロールを手動で作成して、必要に応じてその他の要件に合わせてカスタマイズできます。そのためには、Amazon RDS サービスで Amazon S3 バケットを使用できるように、IAM ロールを作成して、アクセス許可を委任します。この IAM ロールを作成したら、信頼ポリシーとアクセス許可ポリシーをアタッチします。信頼ポリシーを使用することで、Amazon RDS はこのロールを引き受けることができます。アクセス許可ポリシーでは、このロールが実行できるアクションを定義します。詳細については、*AWS Identity and Access Management ユーザーガイド*の[AWS のサービスに許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を参照してください。

必要な信頼関係とアクセス許可ポリシーは、このセクションの例を使用して作成できます。

以下の例は、SQL Server Audit の信頼関係を示しています。この例では、*サービスプリンシパル* `rds.amazonaws.com` を使用して、RDS で S3 バケットに書き込めるようにしています。*サービスプリンシパル*は、サービスにアクセス許可を付与するために使用される識別子です。このように、いつでも `rds.amazonaws.com` にアクセス許可を付与できます。これにより、RDS はお客様に代わってアクションを実行できるようになります。サービスプリンシパルの詳細については、[AWS JSON ポリシーの要素: プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)を参照してください。

**Example SQL Server Audit の信頼関係**    
****  

```
{
	    "Version":"2012-10-17",		 	 	 
	    "Statement": [
	        {
	            "Effect": "Allow",
	            "Principal": {
	                "Service": "rds.amazonaws.com"
	            },
	            "Action": "sts:AssumeRole"
	        }
	    ]
	}
```

リソースベースの信頼関係では [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)に対する最も効果的な保護方法です。

両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合は、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
+ 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
+ そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

信頼関係では、`aws:SourceArn` グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。SQL Server Audit の場合は、次の例に示すように、DB オプショングループと DB インスタンスの両方を必ず含めるようにしてください。

**Example SQL Server Audit のグローバル条件コンテキストキーとの信頼関係**    
****  

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

SQL Server Audit のアクセス許可ポリシーの次の例では、Amazon S3 バケットの ARN を指定します。ARN を使用して、アクセス許可を付与する特定のアカウント、ユーザー、またはロールを識別します。ARN の使用の詳細については、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) を参照してください。

**Example SQL Server Audit のアクセス許可ポリシー**    
****  

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

**注記**  
`s3:ListAllMyBuckets` アクションは、同じ AWS アカウントが S3 バケットと SQL Server DB インスタンスの両方を所有していることを確認するために必要です。このアクションは、アカウント内のバケットの名前を一覧表示します。  
S3 バケットの名前空間はグローバルです。誤ってバケットを削除した場合は、別のユーザーが同じ名前のバケットを別のアカウントで作成できます。次に、SQL Server 監査データが新しいバケットに書き込まれます。

# Amazon RDS for SQL Server での SQL Server Analysis Services のサポート
<a name="Appendix.SQLServer.Options.SSAS"></a>

Microsoft SQL Server Analysis Services (SSAS) は、Microsoft ビジネスインテリジェンス (MSBI) スイートの一部です。SSAS は、SQL Server 内にインストールされているオンライン分析処理 (OLAP) およびデータマイニングツールです。SSAS を使用してデータを分析し、ビジネス上の意思決定に役立てます。SSAS は、ビジネスインテリジェンス環境の一般的なクエリや計算用に最適化されているという点で、SQL Server リレーショナルデータベースとは異なります。

 SSAS は、既存または新規の DB インスタンスに対してオンにすることができます。データベースエンジンと同じ DB インスタンスにインストールされます。SSAS の詳細については、Microsoft の [Analysis Services のドキュメント](https://docs.microsoft.com/en-us/analysis-services)を参照してください。

Amazon RDS は、次のバージョンで SQL Server スタンダードエディションおよびエンタープライズエディションの SSAS をサポートします。
+ 表形式モード:
  + SQL Server 2019、バージョン 15.00.4043.16.v1 以降
  + SQL Server 2017、バージョン 14.00.3223.3.v1 以降
  + SQL Server 2016、バージョン 13.00.5426.0.v1 以降
+ 多次元モード:
  + SQL Server 2019、バージョン 15.00.4153.1.v1 以降
  + SQL Server 2017、バージョン 14.00.3381.3.v1 以降
  + SQL Server 2016、バージョン 13.00.5882.1.v1 以降

**Contents**
+ [制約事項](#SSAS.Limitations)
+ [SSAS をオンにする](SSAS.Enabling.md)
  + [SSAS のオプショングループの作成](SSAS.Enabling.md#SSAS.OptionGroup)
  + [SSAS オプションをオプショングループに追加する](SSAS.Enabling.md#SSAS.Add)
  + [オプショングループを DB インスタンスに関連付ける](SSAS.Enabling.md#SSAS.Apply)
  + [VPC セキュリティグループへのインバウンドアクセスの許可](SSAS.Enabling.md#SSAS.InboundRule)
  + [Amazon S3 統合の有効化](SSAS.Enabling.md#SSAS.EnableS3)
+ [Amazon RDS への SSAS プロジェクトのデプロイ](SSAS.Deploy.md)
+ [デプロイタスクのステータスのモニタリング](SSAS.Monitor.md)
+ [Amazon RDS での SSAS の使用](SSAS.Use.md)
  + [SSAS 用の Windows 認証ユーザーの設定](SSAS.Use.md#SSAS.Use.Auth)
  + [データベース管理者としてのドメインユーザーの追加](SSAS.Use.md#SSAS.Admin)
  + [SSAS プロキシの作成](SSAS.Use.md#SSAS.Use.Proxy)
  + [SQL Server エージェントを使用した SSAS データベース処理のスケジュール](SSAS.Use.md#SSAS.Use.Schedule)
  + [プロキシからの SSAS アクセスの取り消し](SSAS.Use.md#SSAS.Use.Revoke)
+ [SSAS データベースのバックアップ](SSAS.Backup.md)
+ [SSAS データベースの復元](SSAS.Restore.md)
  + [特定の時点への DB インスタンスの復元](SSAS.Restore.md#SSAS.PITR)
+ [SSAS モードの変更](SSAS.ChangeMode.md)
+ [SSAS をオフにする](SSAS.Disable.md)
+ [SSAS の問題のトラブルシューティング](SSAS.Trouble.md)

## 制約事項
<a name="SSAS.Limitations"></a>

RDS for SQL Server で SSAS を使用する場合は、次の制限が適用されます。
+ RDS for SQL Server は、表形式モードまたは多次元モードでの SSAS の実行をサポートしています。詳細については、Microsoft のドキュメントの「[テーブルソリューションと多次元ソリューションの比較](https://docs.microsoft.com/en-us/analysis-services/comparing-tabular-and-multidimensional-solutions-ssas)」を参照してください。
+ 一度に使用できる SSAS モードは 1 つだけです。モードを変更する前に、すべての SSAS データベースを必ず削除してください。

  詳細については、「[SSAS モードの変更](SSAS.ChangeMode.md)」を参照してください。
+ マルチ AZ インスタンスはサポートされていません。
+ インスタンスは自己管理型の Active Directory または AWS Directory Service for Microsoft Active Directory for SSAS 認証を使用する必要があります。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。
+ ユーザーには、SSAS サーバーの管理者アクセス権は付与されませんが、データベースレベルの管理者アクセス権が付与されます。
+ SSAS へのアクセスにサポートされているポートは 2383 のみです。
+ プロジェクトを直接デプロイすることはできません。これを行うには、用意されている RDS ストアドプロシージャを使用できます。詳細については、「[Amazon RDS への SSAS プロジェクトのデプロイ](SSAS.Deploy.md)」を参照してください。
+ デプロイ中の処理はサポートされていません。
+ デプロイでの .xmla ファイルの使用はサポートされていません。
+ SSAS のプロジェクト入力ファイルとデータベースバックアップ出力ファイルは、DB インスタンスの `D:\S3` フォルダにのみ配置できます。

# SSAS をオンにする
<a name="SSAS.Enabling"></a>

DB インスタンスの SSAS をオンにするには、次のプロセスを使用します。

1. 新しいオプショングループを作成するか、既存のオプショングループを選択します。

1. オプショングループに [`SSAS`] オプションを追加します。

1. オプショングループを DB インスタンスに関連付けます。

1. SSAS リスナーポートの仮想プライベートクラウド (VPC) セキュリティグループへのインバウンドアクセスを許可します。

1. Amazon S3 統合をオンにします。

## SSAS のオプショングループの作成
<a name="SSAS.OptionGroup"></a>

AWS マネジメントコンソール または AWS CLI を使用して、使用する DB インスタンスの SQL Server エンジンおよびバージョンに対応するオプショングループを作成します。

**注記**  
既存のオプショングループが正しい SQL Server エンジンおよびバージョンに対応している場合は、それを使用することもできます。

### コンソール
<a name="SSAS.OptionGroup.Console"></a>

次の手順では、コンソールを使用して SQL Server Standard Edition 2017 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. **[Create group]** (グループの作成) を選択します。

1. [**オプショングループの作成**] ウィンドウで、次の操作を行います。

   1. [**名前**] に、AWS アカウント内で一意のオプショングループ名 (**ssas-se-2017** など) を入力します。名前には、英字、数字、ハイフンのみを使用できます。

   1. [**説明**] に、オプショングループの簡単な説明 (**SSAS option group for SQL Server SE 2017** など) を入力します。この説明は表示用に使用されます。

   1. [**エンジン**] で [**sqlserver-se**] を選択します。

   1. [**メジャーエンジンのバージョン**] で、[**14.00**] を選択します。

1. [**Create**] (作成) を選択します。

### CLI
<a name="SSAS.OptionGroup.CLI"></a>

次の例では、CLI を使用して SQL Server Standard Edition 2017 のオプショングループを作成します。

**オプショングループを作成するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-option-group \
      --option-group-name ssas-se-2017 \
      --engine-name sqlserver-se \
      --major-engine-version 14.00 \
      --option-group-description "SSAS option group for SQL Server SE 2017"
  ```

  Windows の場合:

  ```
  aws rds create-option-group ^
      --option-group-name ssas-se-2017 ^
      --engine-name sqlserver-se ^
      --major-engine-version 14.00 ^
      --option-group-description "SSAS option group for SQL Server SE 2017"
  ```

## SSAS オプションをオプショングループに追加する
<a name="SSAS.Add"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `SSAS` オプションをオプショングループに追加します。

### コンソール
<a name="SSAS.Add.Console"></a>

**SSAS オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 先ほど作成したオプショングループを選択します。

1. [**オプションの追加**] を選択します。

1. [**オプションの詳細**] で、[**オプション名**] として **SSAS** を選択します。

1. [**オプション設定**] で、次の操作を行います。

   1. **[Max memory]** (最大メモリ) に、10～80 の範囲の値を入力します。

      [**最大メモリ**] は、メモリの上限しきい値を指定します。この値を超えると、実行中のリクエスト用と新しい優先順位の高いリクエスト用のスペースを確保するために、SSAS がメモリの解放を積極的にスタートします。この値は、DB インスタンスの合計メモリに対する割合 (%) です。指定できる値は 10〜80 で、デフォルトは 45 です。

   1. **[Mode]** (モード) で、SSAS サーバーモードとして **[Tabular]** (表形式) または **[Multidimensional]** (多次元) を選択します。

      **[Mode]** (モード) オプション設定が表示されない場合は、自身の AWS リージョンで多次元モードがサポートされていないことを意味します。詳細については、「[制約事項](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations)」を参照してください。

      **[Tabular]** (表形式) はデフォルトです。

   1. **[セキュリティグループ]** で、オプションに関連付ける VPC セキュリティグループを選択します。
**注記**  
SSAS にアクセスするためのポート 2383 は事前に設定されています。

1. **[スケジュール]** で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[オプションを追加]** を選択します。

### CLI
<a name="SSAS.Add.CLI"></a>

**SSAS オプションを追加するには**

1. 次のパラメータを使用して JSON ファイル (`ssas-option.json` など) を作成します。
   + `OptionGroupName` - 以前に作成または選択したオプショングループの名前 (次の例では `ssas-se-2017`)。
   + `Port` - SSAS にアクセスするために使用するポート。サポートされているポートは 2383 のみです。
   + `VpcSecurityGroupMemberships` – RDS DB インスタンスの VPC セキュリティグループのメンバーシップ。
   + `MAX_MEMORY` - メモリの上限しきい値。この値を超えると、実行中のリクエスト用および新しい優先順位の高いリクエスト用のスペースを確保するために、SSAS がメモリの解放を積極的にスタートします。この値は、DB インスタンスの合計メモリに対する割合 (%) です。指定できる値は 10〜80 で、デフォルトは 45 です。
   + `MODE` – SSAS サーバモード。`Tabular` または `Multidimensional`。`Tabular` がデフォルトです。

     `MODE` オプション設定が有効ではないというエラーは、多次元モードが自身の AWS リージョンでサポートされていないという意味です。詳細については、「[制約事項](Appendix.SQLServer.Options.SSAS.md#SSAS.Limitations)」を参照してください。

   SSAS オプション設定を含む JSON ファイルの例を次に示します。

   ```
   {
   "OptionGroupName": "ssas-se-2017",
   "OptionsToInclude": [
   	{
   	"OptionName": "SSAS",
   	"Port": 2383,
   	"VpcSecurityGroupMemberships": ["sg-0abcdef123"],
   	"OptionSettings": [{"Name":"MAX_MEMORY","Value":"60"},{"Name":"MODE","Value":"Multidimensional"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. オプショングループに [`SSAS`] オプションを追加します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://ssas-option.json \
       --apply-immediately
   ```

   Windows の場合:

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://ssas-option.json ^
       --apply-immediately
   ```

## オプショングループを DB インスタンスに関連付ける
<a name="SSAS.Apply"></a>

コンソールまたは CLI を使用して、オプショングループを DB インスタンスに関連付けることができます。

### コンソール
<a name="SSAS.Apply.Console"></a>

オプショングループを新規または既存の DB インスタンスに関連付けます。
+ 新規の DB インスタンスの場合は、DB インスタンスの起動時にオプショングループを DB インスタンスと関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、DB インスタンスを変更してから、新しいオプショングループと関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
**注記**  
既存のインスタンスを使用する場合は、このインスタンスに Active Directory ドメインと AWS Identity and Access Management (IAM) ロールが既に関連付けられている必要があります。新しいインスタンスを作成する場合は、既存の Active Directory ドメインと IAM ロールを指定します。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

### CLI
<a name="SSAS.Apply.CLI"></a>

オプショングループを新規または既存の DB インスタンスに関連付けることができます。

**注記**  
既存のインスタンスを使用する場合は、このインスタンスに Active Directory ドメインと IAM ロールが既に関連付けられている必要があります。新しいインスタンスを作成する場合は、既存の Active Directory ドメインと IAM ロールを指定します。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

**オプショングループを使用する DB インスタンスを作成するには**
+ オプショングループの作成時に使用したのと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssasinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 14.00.3223.3.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssas-se-2017
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssasinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 14.00.3223.3.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssas-se-2017
  ```

**DB インスタンスを変更してオプショングループを関連付けるには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssasinstance \
      --option-group-name ssas-se-2017 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssasinstance ^
      --option-group-name ssas-se-2017 ^
      --apply-immediately
  ```

## VPC セキュリティグループへのインバウンドアクセスの許可
<a name="SSAS.InboundRule"></a>

DB インスタンスに関連付けられた VPC セキュリティグループで、指定した SSAS リスナーポートのインバウンドルールを作成します。セキュリティグループの設定の詳細については、「[セキュリティグループを作成して VPC 内の DB インスタンスへのアクセスを提供する](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)」を参照してください。

## Amazon S3 統合の有効化
<a name="SSAS.EnableS3"></a>

モデル設定ファイルをホストにダウンロードしてデプロイするには、Amazon S3 統合を使用します。詳細については、「[Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)」を参照してください。

# Amazon RDS への SSAS プロジェクトのデプロイ
<a name="SSAS.Deploy"></a>

RDS では、SQL Server Management Studio (SSMS) を使用して SSAS プロジェクトを直接デプロイすることはできません。プロジェクトをデプロイするには、RDS ストアドプロシージャを使用します。

**注記**  
デプロイでの .xmla ファイルの使用はサポートされていません。

プロジェクトをデプロイする前に、以下を確認してください。
+ Amazon S3 統合がオンになっている。詳細については、「[Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)」を参照してください。
+ `Processing Option` 構成設定が `Do Not Process` に設定されている。この設定は、デプロイ後に処理が実行されないことを意味します。
+ `myssasproject.asdatabase` ファイルと `myssasproject.deploymentoptions` ファイルの両方がある。これらは、SSAS プロジェクトの構築時に自動的に生成されます。

**SSAS プロジェクトを RDS にデプロイするには**

1. 次の例に示すように、`.asdatabase` (SSAS モデル) を S3 バケットから DB インスタンスにダウンロードします。ダウンロードパラメータの詳細については、「[Amazon S3 バケットから SQL Server DB インスタンスにファイルをダウンロードする](Appendix.SQLServer.Options.S3-integration.using.md#Appendix.SQLServer.Options.S3-integration.using.download)」を参照してください。

   ```
   exec msdb.dbo.rds_download_from_s3 
   @s3_arn_of_file='arn:aws:s3:::bucket_name/myssasproject.asdatabase', 
   [@rds_file_path='D:\S3\myssasproject.asdatabase'],
   [@overwrite_file=1];
   ```

1. `.deploymentoptions` ファイルを S3 バケットから DB インスタンスにダウンロードします。

   ```
   exec msdb.dbo.rds_download_from_s3
   @s3_arn_of_file='arn:aws:s3:::bucket_name/myssasproject.deploymentoptions', 
   [@rds_file_path='D:\S3\myssasproject.deploymentoptions'],
   [@overwrite_file=1];
   ```

1. プロジェクトをデプロイします。

   ```
   exec msdb.dbo.rds_msbi_task
   @task_type='SSAS_DEPLOY_PROJECT',
   @file_path='D:\S3\myssasproject.asdatabase';
   ```

# デプロイタスクのステータスのモニタリング
<a name="SSAS.Monitor"></a>

デプロイ (またはダウンロード) タスクのステータスを追跡するには、`rds_fn_task_status` 関数を呼び出します。2 つのパラメータを使用します。1 つめのパラメータは、SSAS に適用されないため、常に `NULL` を設定してください。2 つめのパラメータは、タスク ID を受け入れます。

全タスクのリストを見るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータを `0` に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

特定のタスクを受け取るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータをタスク ID に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 機能は次の情報を返します。


| 出力パラメータ | 説明 | 
| --- | --- | 
| `task_id` | タスクの ID。 | 
| `task_type` | SSAS では、次のタスクタイプを使用できます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SSAS.Monitor.html)  | 
| `database_name` | SSAS タスクは該当しません。 | 
| `% complete` | タスクの進行状況の割合。 | 
| `duration (mins)` | タスクにかかった時間 (分単位)。 | 
| `lifecycle` |  タスクのステータス。有効な状態には以下のものがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SSAS.Monitor.html)  | 
| `task_info` | タスクに関する追加情報。処理中にエラーが発生した場合、この列にエラーに関する情報が含まれます。 詳細については、「[SSAS の問題のトラブルシューティング](SSAS.Trouble.md)」を参照してください。 | 
| `last_updated` | タスクのステータスが最後に更新された日時。 | 
| `created_at` | タスクが作成された日時。 | 
| `S3_object_arn` |  SSAS タスクは該当しません。  | 
| `overwrite_S3_backup_file` | SSAS タスクは該当しません。 | 
| `KMS_master_key_arn` |  SSAS タスクは該当しません。  | 
| `filepath` |  SSAS タスクは該当しません。  | 
| `overwrite_file` |  SSAS タスクは該当しません。  | 
| `task_metadata` | SSAS タスクに関連付けられたメタデータ。 | 

# Amazon RDS での SSAS の使用
<a name="SSAS.Use"></a>

SSAS プロジェクトをデプロイすると、SSMS で OLAP データベースを直接処理できます。

**RDS で SSAS を使用するには**

1. SSMS で、Active Directory ドメインのユーザー名とパスワードを使用して SSAS に接続します。

1. [**データベース**] を展開します。新しくデプロイした SSAS データベースが表示されます。

1. 接続文字列を見つけて、ユーザー名とパスワードを、ソース SQL データベースにアクセスできるように更新します。この操作は、SSAS オブジェクトを処理するために必要です。

   1. 表形式モードの場合、次の操作を行います。

      1. **[Connections]** (接続) タブを展開します。

      1. 右クリックで接続オブジェクトのメニューを開き、**[Properties]** (プロパティ) を選択します。

      1. 接続文字列のユーザー名とパスワードを更新します。

   1. 多次元モードの場合、次の操作を行います。

      1. **[Data Sources]** (データソース) タブを展開します。

      1. 右クリックでデータソースオブジェクトのメニューを開き、**[Properties]** (プロパティ) を選択します。

      1. 接続文字列のユーザー名とパスワードを更新します。

1. 作成した SSAS データベースのコンテキスト (右クリック) メニューを開き、[**データベースの処理**] を選択します。

   入力データのサイズによっては、処理オペレーションが完了するまでに数分かかる場合があります。

**Topics**
+ [SSAS 用の Windows 認証ユーザーの設定](#SSAS.Use.Auth)
+ [データベース管理者としてのドメインユーザーの追加](#SSAS.Admin)
+ [SSAS プロキシの作成](#SSAS.Use.Proxy)
+ [SQL Server エージェントを使用した SSAS データベース処理のスケジュール](#SSAS.Use.Schedule)
+ [プロキシからの SSAS アクセスの取り消し](#SSAS.Use.Revoke)

## SSAS 用の Windows 認証ユーザーの設定
<a name="SSAS.Use.Auth"></a>

メイン管理者ユーザー (マスターユーザーと呼ばれることもあります) は、以下のコード例を使用して、Windows 認証ログインを設定し、必要な手順に対するアクセス許可を付与できます。これにより、ドメインユーザーに SSAS カスタマータスクの実行、S3 ファイル転送手順の使用、認証情報の作成、および SQL Server エージェントプロキシの操作を行うアクセス許可が付与されます。詳細については、Microsoft ドキュメントの「[Credentials (Database Engine)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15)」および「[Create a SQL Server Agent Proxy](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)」を参照してください。

必要に応じて、Windows 認証ユーザーに以下のアクセス許可の一部またはすべてを付与できます。

**Example**  

```
-- Create a server-level domain user login, if it doesn't already exist
USE [master]
GO
CREATE LOGIN [mydomain\user_name] FROM WINDOWS
GO

-- Create domain user, if it doesn't already exist
USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]
GO

-- Grant necessary privileges to the domain user
USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO

USE [msdb]
GO
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] with grant option
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO
```

## データベース管理者としてのドメインユーザーの追加
<a name="SSAS.Admin"></a>

次の方法で、ドメインユーザーを SSAS データベース管理者として追加できます。
+ データベース管理者は、SSMS を使用して `admin` 権限を持つロールを作成し、そのロールにユーザーを追加できます。
+ 次のストアドプロシージャを使用できます。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSAS_ADD_DB_ADMIN_MEMBER',
  @database_name='myssasdb',
  @ssas_role_name='exampleRole',
  @ssas_role_member='domain_name\domain_user_name';
  ```

  以下のパラメータは必須です。
  + `@task_type` - MSBI タスクのタイプ (この例では `SSAS_ADD_DB_ADMIN_MEMBER`)。
  + `@database_name` - 管理者権限を付与する先の SSAS データベースの名前。
  + `@ssas_role_name` - SSAS データベース管理者ロールの名前。ロールがまだ存在しない場合は、作成されます。
  + `@ssas_role_member` - 管理者ロールに追加する SSAS データベースユーザー。

## SSAS プロキシの作成
<a name="SSAS.Use.Proxy"></a>

SQL Server エージェントを使用して SSAS データベース処理をスケジュールできるようにするには、SSAS 認証情報と SSAS プロキシを作成します。これらの手順を Windows 認証ユーザーとして実行します。

**SSAS 認証情報を作成するには**
+ プロキシの認証情報を作成します。そのためには、SSMS または以下の SQL ステートメントを使用できます。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSAS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注記**  
`IDENTITY` はドメイン認証ログインであることが必要です。`mysecret` をドメイン認証ログインのパスワードに置き換えます。

**SSAS プロキシを作成するには**

1. 以下の SQL ステートメントを使用して、プロキシを作成します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSAS_Proxy',@credential_name=N'SSAS_Credential',@description=N''
   GO
   ```

1. 以下の SQL ステートメントを使用して、他のユーザーにプロキシへのアクセスを許可します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSAS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 以下の SQL ステートメントを使用して、SSAS サブシステムにプロキシへのアクセスを許可します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

**プロキシとそのプロキシに対する許可を表示するには**

1. 以下の SQL ステートメントを使用して、プロキシの被付与者を表示します。

   ```
   USE [msdb]
   GO
   EXEC sp_help_proxy
   GO
   ```

1. 以下の SQL ステートメントを使用して、サブシステムの許可を表示します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_enum_proxy_for_subsystem
   GO
   ```

## SQL Server エージェントを使用した SSAS データベース処理のスケジュール
<a name="SSAS.Use.Schedule"></a>

認証情報とプロキシを作成し、SSAS にプロキシへのアクセスを許可したら、SQL Server エージェントジョブを作成して SSAS データベース処理をスケジュールできます。

**SSAS データベース処理をスケジュールするには**
+ SSMS または T-SQL を使用して、SQL Server エージェントジョブを作成します。以下の例では T-SQL を使用しています。SSMS または T-SQL を使用して、ジョブスケジュールをさらに設定できます。
  + `@command` パラメータは、SQL Server エージェントジョブによって実行される XML for Analysis (XMLA) コマンドの概要を示します。この例では、SSAS 多次元データベース処理を設定します。
  + `@server` パラメータは、SQL Server エージェントジョブのターゲット SSAS サーバー名の概要を示しています。

    SQL Server エージェントジョブが存在する同じ RDS DB インスタンス内で SSAS サービスを呼び出すには、`localhost:2383` を使用します。

    RDS DB インスタンスの外部から SSAS サービスを呼び出すには、RDS エンドポイントを使用します。RDS DB インスタンスが同じドメインで参加している場合、Kerberos Active Directory (AD) エンドポイント (`your-DB-instance-name.your-AD-domain-name`) も使用できます。外部 DB インスタンスの場合は、RDS DB インスタンスに関連付けられた VPC セキュリティグループをセキュアな接続用に適切に設定してください。

  クエリをさらに編集して、さまざまな XMLA オペレーションをサポートできます。T-SQL クエリを直接変更するか、SQL Server エージェントジョブの作成後に SSMS UI を使用して編集を行います。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'SSAS_Job', 
      @enabled=1, 
      @notify_level_eventlog=0, 
      @notify_level_email=0, 
      @notify_level_netsend=0, 
      @notify_level_page=0, 
      @delete_level=0, 
      @category_name=N'[Uncategorized (Local)]', 
      @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver 
      @job_name=N'SSAS_Job', 
      @server_name = N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'SSAS_Job', @step_name=N'Process_SSAS_Object', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=1, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'ANALYSISCOMMAND', 
      @command=N'<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
          <Parallel>
              <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" 
                  xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" 
                  xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" 
                  xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" 
                  xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" 
                  xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
                  <Object>
                      <DatabaseID>Your_SSAS_Database_ID</DatabaseID>
                  </Object>
                  <Type>ProcessFull</Type>
                  <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
              </Process>
          </Parallel>
      </Batch>', 
      @server=N'localhost:2383', 
      @database_name=N'master', 
      @flags=0, 
      @proxy_name=N'SSAS_Proxy'
  GO
  ```

## プロキシからの SSAS アクセスの取り消し
<a name="SSAS.Use.Revoke"></a>

以下のストアドプロシージャを使用して、SSAS サブシステムへのアクセスを取り消し、SSAS プロキシを削除できます。

**アクセスを取り消してプロキシを削除するには**

1. サブシステムのアクセスを取り消します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

1. プロキシに対する許可を取り消します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSAS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. プロキシを削除します。

   ```
   USE [msdb]
   GO
   EXEC dbo.sp_delete_proxy @proxy_name = N'SSAS_Proxy'
   GO
   ```

# SSAS データベースのバックアップ
<a name="SSAS.Backup"></a>

SSAS データベースのバックアップファイルは、DB インスタンスの `D:\S3` フォルダにのみ作成できます。バックアップファイルを S3 バケットに移動するには、Amazon S3 を使用します。

SSAS データベースをバックアップするには、次のようにします。
+ 特定のデータベースに対する `admin` ロールを持つドメインユーザーは、SSMS を使用してデータベースを `D:\S3` フォルダにバックアップできます。

  詳細については、「[データベース管理者としてのドメインユーザーの追加](SSAS.Use.md#SSAS.Admin)」を参照してください。
+ 次のストアドプロシージャを使用できます。このストアドプロシージャは、暗号化をサポートしていません。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSAS_BACKUP_DB',
  @database_name='myssasdb',
  @file_path='D:\S3\ssas_db_backup.abf',
  [@ssas_apply_compression=1],
  [@ssas_overwrite_file=1];
  ```

  以下のパラメータは必須です。
  + `@task_type` - MSBI タスクのタイプ (この例では `SSAS_BACKUP_DB`)。
  + `@database_name` - バックアップする SSAS データベースの名前。
  + `@file_path` - SSAS バックアップファイルのパス。`.abf` 拡張子は必須です。

  以下のパラメータはオプションです。
  + `@ssas_apply_compression` - SSAS バックアップを圧縮するかどうか。有効な値は 1 (はい) と 0 (いいえ) です。
  + `@ssas_overwrite_file` - SSAS バックアップファイルを上書きするかどうか。有効な値は 1 (はい) と 0 (いいえ) です。

# SSAS データベースの復元
<a name="SSAS.Restore"></a>

SSAS データベースをバックアップから復元するには、次のストアドプロシージャを使用します。

同じ名前の既存の SSAS データベースがある場合は、データベースを復元できません。復元用のストアドプロシージャは、暗号化されたバックアップファイルをサポートしていません。

```
exec msdb.dbo.rds_msbi_task
@task_type='SSAS_RESTORE_DB',
@database_name='mynewssasdb',
@file_path='D:\S3\ssas_db_backup.abf';
```

以下のパラメータは必須です。
+ `@task_type` - MSBI タスクのタイプ (この例では `SSAS_RESTORE_DB`)。
+ `@database_name` - 復元先の新しい SSAS データベースの名前。
+ `@file_path` - SSAS バックアップファイルへのパス。

## 特定の時点への DB インスタンスの復元
<a name="SSAS.PITR"></a>

ポイントインタイムリカバリ (PITR) は SSAS データベースには適用されません。PITR を実行すると、復元されたインスタンスでは、リクエストした時刻より前の最後のスナップショットの SSAS データのみを使用できます。

**復元された DB インスタンスで最新の SSAS データベースを使用するには**

1. SSAS データベースを出典インスタンスの `D:\S3` フォルダにバックアップします。

1. バックアップファイルを S3 バケットに転送します。

1. S3 バケットから復元されたインスタンスの `D:\S3` フォルダにバックアップファイルを転送します。

1. 復元されたインスタンスに SSAS データベースを復元するためのストアドプロシージャを実行します。

   SSAS プロジェクトを再処理してデータベースを復元することもできます。

# SSAS モードの変更
<a name="SSAS.ChangeMode"></a>

SSAS の実行モードは、表形式または多次元に変更できます。モードを変更するには、AWS マネジメントコンソール または AWS CLI を使用して、SSAS オプションのオプション設定を変更します。

**重要**  
一度に使用できる SSAS モードは 1 つだけです。モードを変更する前に、必ずすべての SSAS データベースを削除してください。そうしないと、エラーが発生します。

## コンソール
<a name="SSAS.ChangeMode.CON"></a>

次の Amazon RDS コンソールの手順では、SSAS モードを表形式に変更し、`MAX_MEMORY` パラメータを 70% にします。

**SSAS オプションを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `SSAS` オプションで、変更するオプショングループ (前の例では`ssas-se-2017`) を選択します。

1. **[Modify option]** (オプションの変更) を選択します。

1. オプション設定を次のように変更します。

   1. **[Max memory]** (最大メモリ) に、**70** を入力します。

   1. **[Mode]** (モード) で、**[Tabular]** (表形式) を選択します。

1. **[Modify option]** (オプションの変更) を選択します。

## AWS CLI
<a name="SSAS.ChangeMode.CLI"></a>

次の AWS CLI の例では、SSAS モードを表形式に変更し、`MAX_MEMORY` パラメータを 70% に設定します。

CLI コマンドが機能するためには、変更していない場合でも、必要なパラメータをすべて含めてください。

**SSAS オプションを変更するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-option-to-option-group \
      --option-group-name ssas-se-2017 \
      --options "OptionName=SSAS,VpcSecurityGroupMemberships=sg-12345e67,OptionSettings=[{Name=MAX_MEMORY,Value=70},{Name=MODE,Value=Tabular}]" \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds add-option-to-option-group ^
      --option-group-name ssas-se-2017 ^
      --options OptionName=SSAS,VpcSecurityGroupMemberships=sg-12345e67,OptionSettings=[{Name=MAX_MEMORY,Value=70},{Name=MODE,Value=Tabular}] ^
      --apply-immediately
  ```

# SSAS をオフにする
<a name="SSAS.Disable"></a>

SSAS をオフにするには、オプショングループから `SSAS` オプションを削除します。

**重要**  
`SSAS` オプションを削除する前に、SSAS データベースを削除します。  
SSAS データベースを削除して `SSAS` オプションを削除する前に、SSAS データベースをバックアップすることを強くお勧めします。

## コンソール
<a name="SSAS.Disable.Console"></a>

**SSAS オプションをオプショングループから削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `SSAS` オプションで、削除するオプショングループ (前の例では `ssas-se-2017`) を選択します。

1. [**オプションの削除**] を選択します。

1. [**オプションの削除**] で、[**削除するオプション**] として [**SSAS**] を選択します。

1. [**すぐに適用**] で、オプションをすぐに削除する場合は [**はい**] を選択し、次のメンテナンスウィンドウで削除する場合は [**いいえ**] を選択します。

1. [**削除**] を選択します。

## AWS CLI
<a name="SSAS.Disable.CLI"></a>

**SSAS オプションをオプショングループから削除するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssas-se-2017 \
      --options SSAS \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssas-se-2017 ^
      --options SSAS ^
      --apply-immediately
  ```

# SSAS の問題のトラブルシューティング
<a name="SSAS.Trouble"></a>

SSAS の使用時に、次の問題が発生することがあります。


| 問題 | タイプ | トラブルシューティングの推奨事項 | 
| --- | --- | --- | 
| SSAS オプションを設定できません。要求された SSAS モードは new\$1mode ですが、現在の DB インスタンスには number 個の current\$1mode データベースがあります。new\$1mode モードに切り替える前に既存のデータベースを削除します。データベースを削除するために current\$1mode モードへのアクセスを取り戻すには、現在の DB オプショングループを更新するか、SSAS オプションの MODE オプション設定値として %s を使用して新しいオプショングループをアタッチします。 | RDS イベント | 現在のモードを使用する SSAS データベースがまだある場合は、SSAS モードを変更できません。SSAS データベースを削除してから、もう一度試してください。 | 
| number 個の既存 mode のデータベースがあるため、SSAS オプションを削除できません。SSAS オプションは、すべての SSAS データベースが削除されるまで削除できません。SSAS オプションを再度追加し、すべての SSAS データベースを削除して、もう一度試してください。 | RDS イベント | SSAS データベースがまだある場合は、SSAS をオフにすることはできません。SSAS データベースを削除してから、もう一度試してください。 | 
| SSAS オプションが有効になっていないか、有効化中です。後ほどもう一度試してください。」 | RDS ストアドプロシージャ | SSAS ストアドプロシージャは、このオプションがオフになっているときやオンになる途中のときには実行できません。 | 
| SSAS オプションが正しく設定されていません。オプショングループのメンバーシップステータスが「in-sync」であることを確認し、RDS イベントログで関連する SSAS 設定エラーメッセージを確認します。これらを調べてから、もう一度試してください。エラーが引き続き発生する場合は、AWS サポートにお問い合わせください。 | RDS ストアドプロシージャ |  オプショングループのメンバーシップが `in-sync` ステータスでないときは、SSAS ストアドプロシージャを実行できません。これにより、SSAS オプションは誤った設定状態になります。 SSAS オプションの変更により、オプショングループのメンバーシップステータスが `failed` に変更された場合、次の 2 つの理由が考えられます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SSAS.Trouble.html) RDS では、一度に 1 つの SSAS モードのみが可能で、SSAS データベースが存在する場合の SSAS オプションの削除がサポートされていないので、SSAS オプションを再構成します。 RDS イベントログで SSAS インスタンスの設定エラーを確認し、それに応じて問題を解決します。  | 
| デプロイに失敗しました。変更は、deployment\$1file\$1mode モードで実行されているサーバーにのみデプロイできます。現在のサーバーモードは current\$1mode です。 | RDS ストアドプロシージャ |  表形式データベースを多次元サーバーにデプロイしたり、多次元データベースを表形式サーバーにデプロイしたりすることはできません。 正しいモードのファイルを使用していることを確認し、`MODE` オプション設定が適切な値に設定されていることを確認します。  | 
| 復元に失敗しました。バックアップファイルは、restore\$1file\$1mode モードで実行されているサーバー上でのみ復元できます。現在のサーバーモードは current\$1mode です。 | RDS ストアドプロシージャ |  表形式データベースを多次元サーバーに復元したり、多次元データベースを表形式サーバーに復元することはできません。 正しいモードのファイルを使用していることを確認し、`MODE` オプション設定が適切な値に設定されていることを確認します。  | 
| 復元に失敗しました。バックアップファイルと RDS DB インスタンスのバージョンに互換性がありません。 | RDS ストアドプロシージャ |  SQL Server インスタンスのバージョンと互換性のないバージョンで SSAS データベースを復元することはできません。 詳細については、Microsoft のドキュメントの「[テーブルモデルの互換性レベル](https://docs.microsoft.com/en-us/analysis-services/tabular-models/compatibility-level-for-tabular-models-in-analysis-services)」と「[多次元データベースの互換性レベル](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/compatibility-level-of-a-multidimensional-database-analysis-services)」を参照してください。  | 
| 復元に失敗しました。復元オペレーションで指定されたバックアップファイルが破損しているか、SSAS バックアップファイルではありません。@rds\$1file\$1path が正しいフォーマットであることを確認してください。 | RDS ストアドプロシージャ |  破損したファイルで SSAS データベースを復元することはできません。 ファイルが破損したり、破壊されていたりしていないことを確認してください。 このエラーは、`@rds_file_path` が正しくフォーマットされていない場合 (例えば、`D:\S3\\incorrect_format.abf` のように二重のバックスラッシュがある場合) にも発生します。  | 
| 復元に失敗しました。復元されたデータベース名には、予約語や無効な文字 (. , ; ' ` : / \$1\$1 \$1 \$1 ? \$1" & % \$1 \$1 \$1 = ( ) [ ] \$1 \$1 <>)、または 100 文字を超える文字を含めることはできません。 | RDS ストアドプロシージャ |  復元されたデータベース名には、予約語や有効でない文字、または 100 文字を超える文字を含めることはできません。 SSAS オブジェクトの命名規則については、Microsoft のドキュメントの「[オブジェクトの名前付け規則](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)」を参照してください。  | 
| 無効なロール名が指定されました。ロール名に予約文字列を含めることはできません。 | RDS ストアドプロシージャ |  ロール名に予約文字列を含めることはできません。 SSAS オブジェクトの命名規則については、Microsoft のドキュメントの「[オブジェクトの名前付け規則](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)」を参照してください。  | 
| 無効なロール名が指定されました。ロール名には、予約文字 (. , ; ' ` : / \$1\$1 \$1 \$1 ? \$1" & % \$1 \$1 \$1 = ( ) [ ] \$1 \$1 <>) を含めることはできません。 | RDS ストアドプロシージャ |  ロール名に予約文字を含めることはできません。 SSAS オブジェクトの命名規則については、Microsoft のドキュメントの「[オブジェクトの名前付け規則](https://docs.microsoft.com/en-us/analysis-services/multidimensional-models/olap-physical/object-naming-rules-analysis-services)」を参照してください。  | 

# Amazon RDS for SQL Server での SQL Server Integration Services のサポート
<a name="Appendix.SQLServer.Options.SSIS"></a>

Microsoft SQL Server Integration Services (SSIS) は、幅広いデータ移行タスクの実行に使用できるコンポーネントです。SSIS は、データ統合およびワークフローアプリケーションに対応したプラットフォームです。データの抽出、変換、ロード (ETL) に使用されるデータウェアハウジングツールを備えています。このツールを使用して、SQL Server データベースのメンテナンスと多次元キューブデータの更新を自動化することもできます。

SSIS プロジェクトはパッケージに編成されて、XML ベースの .dtsx ファイルとして保存されます。パッケージには、制御フローとデータフローを含めることができます。データフローを使用して、ETL オペレーションを表します。デプロイ後、パッケージは SQL Server の SSISDB データベースに保存されます。SSISDB は、完全復旧モードで動作するオンライントランザクション処理 (OLTP) データベースです。

Amazon RDS for SQL Server は RDS DB インスタンスでの SSIS の直接実行をサポートしています。既存または新規の DB インスタンスで SSIS を有効にできます。SSIS はデータベースエンジンと同じ DB インスタンスにインストールされます。

RDS は、次のバージョンで SQL Server スタンダードエディションおよびエンタープライズエディションの SSIS をサポートします。
+ SQL Server 2022、すべてのバージョン
+ SQL Server 2019、バージョン 15.00.4043.16.v1 以降
+ SQL Server 2017、バージョン 14.00.3223.3.v1 以降
+ SQL Server 2016、バージョン 13.00.5426.0.v1 以降

**Contents**
+ [制限と推奨事項](#SSIS.Limitations)
+ [SSIS の有効化](#SSIS.Enabling)
  + [SSIS のオプショングループの作成](#SSIS.OptionGroup)
  + [オプショングループへの SSIS オプションの追加](#SSIS.Add)
  + [SSIS のパラメータグループの作成](#SSIS.CreateParamGroup)
  + [SSIS のパラメータの変更](#SSIS.ModifyParam)
  + [オプショングループとパラメータグループを DB インスタンスに関連付ける](#SSIS.Apply)
  + [S3 統合を有効にする](#SSIS.EnableS3)
+ [SSISDB の管理権限](SSIS.Permissions.md)
  + [SSIS 用の Windows 認証ユーザーの設定](SSIS.Permissions.md#SSIS.Use.Auth)
+ [SSIS プロジェクトのデプロイ](SSIS.Deploy.md)
+ [デプロイタスクのステータスのモニタリング](SSIS.Monitor.md)
+ [SSIS の使用](SSIS.Use.md)
  + [SSIS プロジェクトのデータベース接続マネージャーの設定](SSIS.Use.md#SSIS.Use.ConnMgrs)
  + [SSIS プロキシの作成](SSIS.Use.md#SSIS.Use.Proxy)
  + [SQL Server エージェントを使用した SSIS パッケージのスケジュール](SSIS.Use.md#SSIS.Use.Schedule)
  + [プロキシからの SSIS アクセスの取り消し](SSIS.Use.md#SSIS.Use.Revoke)
+ [SSIS データベースの無効化と削除](SSIS.DisableDrop.md)
  + [SSIS の無効化](SSIS.DisableDrop.md#SSIS.Disable)
  + [SSISDB データベースの削除](SSIS.DisableDrop.md#SSIS.Drop)

## 制限と推奨事項
<a name="SSIS.Limitations"></a>

RDS for SQL Server で SSIS を実行する場合は、以下の制限と推奨事項が適用されます。
+ また、DB インスタンスには、`clr enabled` パラメータが 1 に設定されたパラメータグループが関連付けられている必要があります。詳細については、「[SSIS のパラメータの変更](#SSIS.ModifyParam)」を参照してください。
**注記**  
SQL Server 2017 または 2019 で `clr enabled` パラメータを有効にしている場合、DB インスタンスで共通言語ランタイム (CLR) を使用できません。詳細については、「[サポート対象外の機能とサポートが制限されている機能](SQLServer.Concepts.General.FeatureNonSupport.md)」を参照してください。
+ 以下の制御フロータスクがサポートされています。
  + Analysis Services DDL 実行タスク
  + Analysis Services 処理タスク
  + 一括挿入タスク
  + データベース整合性チェックタスク
  + データフロータスク
  + データマイニングクエリタスク
  + データプロファイリングタスク
  + パッケージ実行タスク
  + SQL Server エージェントジョブ実行タスク
  + SQL 実行タスク
  + T-SQL ステートメント実行タスク
  + オペレーター通知タスク
  + インデックス再構築タスク
  + インデックス再編成タスク
  + データベース縮小タスク
  + データベース転送タスク
  + ジョブ転送タスク
  + ログイン転送タスク
  + SQL Server オブジェクト転送タスク
  + 統計更新タスク
+ プロジェクトのデプロイのみがサポートされています。
+ SQL Server エージェントを使用した SSIS パッケージの実行がサポートされています。
+ SSIS ログレコードは、ユーザーが作成したデータベースにのみ挿入できます。
+ ファイルの操作には `D:\S3` フォルダのみを使用します。他のディレクトリにあるファイルは削除されます。ファイルの場所について、そのほか以下の詳細にも注意してください。
  + SSIS プロジェクトの入力ファイルと出力ファイルは `D:\S3` フォルダに配置します。
  + データフロータスクの場合、`BLOBTempStoragePath` と `BufferTempStoragePath` の場所を `D:\S3` フォルダ内のファイルに変更します。ファイルパスは `D:\S3\` で始まる必要があります。
  + ファイル接続に使用されるすべてのパラメータ、可変、表現が `D:\S3` フォルダを指していることを確認します。
  + マルチ AZ インスタンスでは、SSIS によって `D:\S3` フォルダに作成されたファイルは、フェイルオーバー後に削除されます。詳細については、「[S3 統合のマルチ AZ の制限](User.SQLServer.Options.S3-integration.md#S3-MAZ)」を参照してください。
  + SSIS によって `D:\S3` フォルダに作成されたファイルは、耐久性を高めるために、Amazon S3 バケットにアップロードします。
+ 列のインポートと列のエクスポートの変換、およびデータフロータスクのスクリプトコンポーネントはサポートされていません。
+ SSIS パッケージの実行時にダンプを有効にしたり、SSIS パッケージにデータタップを追加したりすることはできません。
+ SSIS スケールアウト機能はサポートされていません。
+ プロジェクトを直接デプロイすることはできません。この機能を実行するための RDS ストアドプロシージャが提供されています。詳細については、「[SSIS プロジェクトのデプロイ](SSIS.Deploy.md)」を参照してください。
+ RDS にデプロイする SSIS プロジェクト (.ispac) ファイルは `DoNotSavePasswords` 保護モードで構築します。
+ SSIS は、リードレプリカを使用する Always On インスタンスではサポートされていません。
+ `SSIS` オプションに関連付けられている SSISDB データベースをバックアップすることはできません。
+ SSIS の他のインスタンスからの SSISDB データベースのインポートと復元はサポートされていません。
+ 他の SQL Server DB インスタンスまたは Oracle データソースに接続できます。RDS for SQL Server 上の SSIS では、MySQL または PostgreSQL などの他のデータベースエンジンへの接続はサポートされていません。Oracle データソースへの接続に関する詳細については、[Oracle OLEDB とリンクされたサーバー](Appendix.SQLServer.Options.LinkedServers_Oracle_OLEDB.md) を参照してください。
+ SSIS は、オンプレミスドメインへの送信の信頼を持つドメイン参加インスタンスをサポートしていません。送信の信頼を使用する場合は、ローカル AWS ドメインのアカウントから SSIS ジョブを実行します。
+ ファイルシステムベースのパッケージの実行はサポートされていません。

## SSIS の有効化
<a name="SSIS.Enabling"></a>

SSIS を有効にするには、DB インスタンスに SSIS オプションを追加します。以下のプロセスを使用します。

1. 新しいオプショングループを作成するか、既存のオプショングループを選択します。

1. オプショングループに [`SSIS`] オプションを追加します。

1. 新しいパラメータグループを作成するか、既存のパラメータグループを選択します。

1. パラメータグループを変更して、`clr enabled` パラメータを 1 に設定します。

1. オプショングループとパラメータグループを DB インスタンスに関連付けます。

1. Amazon S3 統合を有効にする

**注記**  
DB インスタンスに既に SSISDB という名前のデータベースがある場合や、SSIS ログインが予約されている場合、そのインスタンスで SSIS を有効にすることはできません。

### SSIS のオプショングループの作成
<a name="SSIS.OptionGroup"></a>

SSIS を使用するには、使用する DB インスタンスの SQL Server のエディションとバージョンに対応するオプショングループを作成または変更します。そのためには、AWS マネジメントコンソール または AWS CLI を使用します。

#### コンソール
<a name="SSIS.OptionGroup.Console"></a>

次の手順では、SQL Server Standard Edition 2016 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. **[Create group]** (グループの作成) を選択します。

1. [**Create subnet group**(オプショングループの作成)] ウィンドウで以下を行います。

   1. [**名前**] に、AWS アカウント内で一意のオプショングループ名 (**ssis-se-2016** など) を入力します。名前には、英字、数字、ハイフンのみを使用できます。

   1. [**説明**] に、オプショングループの簡単な説明 (**SSIS option group for SQL Server SE 2016** など) を入力します。この説明は表示用に使用されます。

   1. [**エンジン**] で [**sqlserver-se**] を選択します。

   1. [**メジャーエンジンのバージョン**] で、[**13.00**] を選択します。

1. **[作成]** を選択します。

#### CLI
<a name="SSIS.OptionGroup.CLI"></a>

次の手順では、SQL Server Standard Edition 2016 のオプショングループを作成します。

**オプショングループを作成するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-option-group \
      --option-group-name ssis-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "SSIS option group for SQL Server SE 2016"
  ```

  Windows の場合:

  ```
  aws rds create-option-group ^
      --option-group-name ssis-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "SSIS option group for SQL Server SE 2016"
  ```

### オプショングループへの SSIS オプションの追加
<a name="SSIS.Add"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `SSIS` オプションをオプショングループに追加します。

#### コンソール
<a name="SSIS.Add.Console"></a>

**SSIS オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 作成したオプショングループ (この例では **ssis-se-2016**) を選択します。

1. [**オプションの追加**] を選択します。

1. [**オプションの詳細**] で、[**オプション名**] として [**SSRS**] を選択します。

1. [**スケジュール**] で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[オプションを追加]** を選択します。

#### CLI
<a name="SSIS.Add.CLI"></a>

**SSIS オプションを追加するには**
+ オプショングループに [`SSIS`] オプションを追加します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-option-to-option-group \
      --option-group-name ssis-se-2016 \
      --options OptionName=SSIS \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds add-option-to-option-group ^
      --option-group-name ssis-se-2016 ^
      --options OptionName=SSIS ^
      --apply-immediately
  ```

### SSIS のパラメータグループの作成
<a name="SSIS.CreateParamGroup"></a>

SSIS で使用する DB インスタンスの SQL Server のエディションとバージョンに対応する `clr enabled` パラメータのパラメータグループを作成または変更します。

#### コンソール
<a name="SSIS.CreateParamGroup.Console"></a>

以下の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[パラメータグループ]** を選択します。

1. [**Create parameter group**] を選択します。

1. [**パラメータグループの作成**] ペインで、次の操作を行います。

   1. [**パラメータグループファミリー**] で、[**sqlserver-se-13.0**] を選択します。

   1. [**グループ名**] に、パラメータグループの識別子 (**ssis-sqlserver-se-13** など) を入力します。

   1. [**説明**] に「**clr enabled parameter group**」と入力します。

1. **[作成]** を選択します。

#### CLI
<a name="SSIS.CreateParamGroup.CLI"></a>

以下の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "clr enabled parameter group"
  ```

  Windows の場合:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "clr enabled parameter group"
  ```

### SSIS のパラメータの変更
<a name="SSIS.ModifyParam"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループの `clr enabled` パラメータを変更します。SSIS の場合、`clr enabled` パラメータを 1 に設定します。

#### コンソール
<a name="SSIS.ModifyParam.Console"></a>

以下の手順では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**パラメータグループ**] を選択します。

1. [**ssis-sqlserver-se-13**] などのパラメータグループを選択します。

1. [**パラメータ**] で、パラメータのリストを **clr** でフィルタ処理します。

1. [**clr enabled (clr 有効化)**] を選択します。

1. [**Edit parameters**] を選択します。

1. [**Values (値)**] から [**1**] を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

#### CLI
<a name="SSIS.ModifyParam.CLI"></a>

以下の手順では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --parameters "ParameterName='clr enabled',ParameterValue=1,ApplyMethod=immediate"
  ```

  Windows の場合:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --parameters "ParameterName='clr enabled',ParameterValue=1,ApplyMethod=immediate"
  ```

### オプショングループとパラメータグループを DB インスタンスに関連付ける
<a name="SSIS.Apply"></a>

SSIS オプショングループおよびパラメータグループを DB インスタンスに関連付けるには、AWS マネジメントコンソール または AWS CLI を使用します。

**注記**  
既存のインスタンスを使用する場合は、このインスタンスに Active Directory ドメインと AWS Identity and Access Management (IAM) ロールが既に関連付けられている必要があります。新しいインスタンスを作成する場合は、既存の Active Directory ドメインと IAM ロールを指定します。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

#### コンソール
<a name="SSIS.Apply.Console"></a>

SSIS の有効化を完了するには、SSIS オプショングループおよびパラメータグループを新規または既存の DB インスタンスに関連付けます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

#### CLI
<a name="SSIS.Apply.CLI"></a>

SSIS オプショングループおよびパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

**SSIS オプショングループおよびパラメータグループを使用してインスタンスを作成するには**
+ オプショングループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssisinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssis-se-2016 \
      --db-parameter-group-name ssis-sqlserver-se-13
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssisinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssis-se-2016 ^
      --db-parameter-group-name ssis-sqlserver-se-13
  ```

**インスタンスを変更し、SSIS オプショングループおよびパラメータグループを関連付けるには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssisinstance \
      --option-group-name ssis-se-2016 \
      --db-parameter-group-name ssis-sqlserver-se-13 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssisinstance ^
      --option-group-name ssis-se-2016 ^
      --db-parameter-group-name ssis-sqlserver-se-13 ^
      --apply-immediately
  ```

### S3 統合を有効にする
<a name="SSIS.EnableS3"></a>

SSIS プロジェクト (.ispac) ファイルをデプロイのためにホストにダウンロードするには、S3 ファイル統合を使用します。詳細については、「[Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)」を参照してください。

# SSISDB の管理権限
<a name="SSIS.Permissions"></a>

SSIS オプションを使用してインスタンスを作成または変更すると、その結果、SSISDB データベースのマスターユーザーには、ssis\$1admin および ssis\$1logリーダー ロールが付与されます。マスターユーザーには SSISDB に対する以下の権限があります。
+ ssis\$1admin ロールの変更
+ ssis\$1logリーダー ロールの変更
+ 任意のユーザーの変更

マスターユーザーは SQL 認証ユーザーであるため、マスターユーザーを使用して SSIS パッケージを実行することはできません。マスターユーザーはこれらの権限を使用して新しい SSISDB ユーザーを作成し、それらのユーザーを ssis\$1admin および ssis\$1logリーダー ロールに追加できます。これは、ドメインユーザーに SSIS を使用するアクセス許可を付与するのに役立ちます。

## SSIS 用の Windows 認証ユーザーの設定
<a name="SSIS.Use.Auth"></a>

マスターユーザーは、以下のコード例を使用して、SSISDB に Windows 認証ログインを設定し、必要な手順に対するアクセス許可を付与できます。これにより、ドメインユーザーに SSIS パッケージのデプロイと実行、S3 ファイル転送手順の使用、認証情報の作成、および SQL Server エージェントプロキシの操作を行うアクセス許可が付与されます。詳細については、Microsoft ドキュメントの「[Credentials (Database Engine)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15)」および「[Create a SQL Server Agent Proxy](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)」を参照してください。

**注記**  
必要に応じて、Windows 認証ユーザーに以下のアクセス許可の一部またはすべてを付与できます。

**Example**  

```
-- Create a server-level SQL login for the domain user, if it doesn't already exist
USE [master]
GO
CREATE LOGIN [mydomain\user_name] FROM WINDOWS
GO						
						
-- Create a database-level account for the domain user, if it doesn't already exist						
USE [SSISDB]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]

-- Add SSIS role membership to the domain user
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO

-- Add MSDB role membership to the domain user
USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]

-- Grant MSDB stored procedure privileges to the domain user
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name]  with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] WITH GRANT OPTION


-- Add the SQLAgentUserRole privilege to the domain user
USE [msdb]
GO
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO

-- Grant the ALTER ANY CREDENTIAL privilege to the domain user
USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO
```

# SSIS プロジェクトのデプロイ
<a name="SSIS.Deploy"></a>

RDS では、SQL Server Management Studio (SSMS) または SSIS の手順を使用して SSIS プロジェクトを直接デプロイすることはできません。Amazon S3 からプロジェクトファイルをダウンロードしてデプロイするには、RDS ストアドプロシージャを使用します。

ストアドプロシージャを実行するには、ストアドプロシージャの実行アクセス許可を付与した任意のユーザーとしてログインします。詳細については、「[SSIS 用の Windows 認証ユーザーの設定](SSIS.Permissions.md#SSIS.Use.Auth)」を参照してください。

**SSIS プロジェクトをデプロイするには**

1. プロジェクト (.ispac) ファイルをダウンロードします。

   ```
   exec msdb.dbo.rds_download_from_s3
   @s3_arn_of_file='arn:aws:s3:::bucket_name/ssisproject.ispac',
   @rds_file_path='D:\S3\ssisproject.ispac',
   @overwrite_file=1;
   ```

1. 以下のことを確認してから、デプロイタスクを送信します。
   + フォルダが SSIS カタログに存在する。
   + プロジェクト名が、SSIS プロジェクトの開発中に使用したプロジェクト名と一致する。

   ```
   exec msdb.dbo.rds_msbi_task
   @task_type='SSIS_DEPLOY_PROJECT',
   @folder_name='DEMO',
   @project_name='ssisproject',
   @file_path='D:\S3\ssisproject.ispac';
   ```

# デプロイタスクのステータスのモニタリング
<a name="SSIS.Monitor"></a>

デプロイタスクのステータスを追跡するには、`rds_fn_task_status` 関数を呼び出します。2 つのパラメータを使用します。1 つめのパラメータは、SSIS に適用されないため、常に `NULL` を設定してください。2 つめのパラメータは、タスク ID を受け入れます。

全タスクのリストを見るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータを `0` に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

特定のタスクを受け取るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータをタスク ID に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 機能は次の情報を返します。


| 出力パラメータ | 説明 | 
| --- | --- | 
| `task_id` | タスクの ID。 | 
| `task_type` | `SSIS_DEPLOY_PROJECT` | 
| `database_name` | SSIS タスクには該当しません。 | 
| `% complete` | タスクの進行状況の割合。 | 
| `duration (mins)` | タスクにかかった時間 (分単位)。 | 
| `lifecycle` |  タスクのステータス。有効な状態には以下のものがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SSIS.Monitor.html)  | 
| `task_info` | タスクに関する追加情報。処理中にエラーが発生した場合、この列にエラーに関する情報が含まれます。 | 
| `last_updated` | タスクのステータスが最後に更新された日時。 | 
| `created_at` | タスクが作成された日時。 | 
| `S3_object_arn` |  SSIS タスクには該当しません。  | 
| `overwrite_S3_backup_file` | SSIS タスクには該当しません。 | 
| `KMS_master_key_arn` |  SSIS タスクには該当しません。  | 
| `filepath` |  SSIS タスクには該当しません。  | 
| `overwrite_file` |  SSIS タスクには該当しません。  | 
| `task_metadata` | SSIS タスクに関連付けられたメタデータ。 | 

# SSIS の使用
<a name="SSIS.Use"></a>

SSIS プロジェクトを SSIS カタログにデプロイした後、SSMS から直接パッケージを実行するか、SQL Server エージェントを使用してパッケージをスケジュールできます。SSIS パッケージを実行するには、Windows 認証のログインを使用する必要があります。詳細については、「[SSIS 用の Windows 認証ユーザーの設定](SSIS.Permissions.md#SSIS.Use.Auth)」を参照してください。

**Topics**
+ [SSIS プロジェクトのデータベース接続マネージャーの設定](#SSIS.Use.ConnMgrs)
+ [SSIS プロキシの作成](#SSIS.Use.Proxy)
+ [SQL Server エージェントを使用した SSIS パッケージのスケジュール](#SSIS.Use.Schedule)
+ [プロキシからの SSIS アクセスの取り消し](#SSIS.Use.Revoke)

## SSIS プロジェクトのデータベース接続マネージャーの設定
<a name="SSIS.Use.ConnMgrs"></a>

接続マネージャーを使用する場合、以下のタイプの認証を使用できます。
+ AWS Managed Active Directory を使用したローカルデータベース接続の場合、SQL 認証または Windows 認証を使用できます。Windows 認証の場合、接続文字列のサーバー名として `DB_instance_name.fully_qualified_domain_name` を使用します。

  例えば、`myssisinstance.corp-ad.example.com` を使用します。ここで、`myssisinstance` は DB インスタンス名、`corp-ad.example.com` は完全修飾ドメイン名です。
+ リモート接続の場合は、常に SQL 認証を使用します。
+ セルフマネージド Active Directory を使用したローカルデータベース接続の場合、SQL 認証または Windows 認証を使用できます。Windows 認証の場合、接続文字列のサーバー名として `.` または `LocalHost` を使用します。

## SSIS プロキシの作成
<a name="SSIS.Use.Proxy"></a>

SQL Server エージェントを使用して SSIS パッケージをスケジュールできるようにするには、SSIS 認証情報と SSIS プロキシを作成します。これらの手順を Windows 認証ユーザーとして実行します。

**SSIS 認証情報を作成するには**
+ プロキシの認証情報を作成します。そのためには、SSMS または以下の SQL ステートメントを使用できます。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSIS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注記**  
`IDENTITY` はドメイン認証ログインであることが必要です。`mysecret` をドメイン認証ログインのパスワードに置き換えます。  
SSISDB プライマリホストが変更されるたびに、SSIS プロキシ認証情報を変更して、新しいホストがそれらのホストにアクセスできるようにします。

**SSIS プロキシを作成するには**

1. 以下の SQL ステートメントを使用して、プロキシを作成します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSIS_Proxy',@credential_name=N'SSIS_Credential',@description=N''
   GO
   ```

1. 以下の SQL ステートメントを使用して、他のユーザーにプロキシへのアクセスを許可します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSIS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 以下の SQL ステートメントを使用して、SSIS サブシステムにプロキシへのアクセスを許可します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   GO
   ```

**プロキシとそのプロキシに対する許可を表示するには**

1. 以下の SQL ステートメントを使用して、プロキシの被付与者を表示します。

   ```
   USE [msdb]
   GO
   EXEC sp_help_proxy
   GO
   ```

1. 以下の SQL ステートメントを使用して、サブシステムの許可を表示します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_enum_proxy_for_subsystem
   GO
   ```

## SQL Server エージェントを使用した SSIS パッケージのスケジュール
<a name="SSIS.Use.Schedule"></a>

認証情報とプロキシを作成し、SSIS にプロキシへのアクセスを許可したら、SQL Server エージェントジョブを作成して SSIS パッケージをスケジュールできます。

**SSIS パッケージをスケジュールするには**
+ SSMS または T-SQL を使用して、SQL Server エージェントジョブを作成できます。以下の例では T-SQL を使用しています。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'MYSSISJob',
  @enabled=1,
  @notify_level_eventlog=0,
  @notify_level_email=2,
  @notify_level_page=2,
  @delete_level=0,
  @category_name=N'[Uncategorized (Local)]',
  @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver @job_name=N'MYSSISJob',@server_name=N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'MYSSISJob',@step_name=N'ExecuteSSISPackage',
  @step_id=1,
  @cmdexec_success_code=0,
  @on_success_action=1,
  @on_fail_action=2,
  @retry_attempts=0,
  @retry_interval=0,
  @os_run_priority=0,
  @subsystem=N'SSIS',
  @command=N'/ISSERVER "\"\SSISDB\MySSISFolder\MySSISProject\MySSISPackage.dtsx\"" /SERVER "\"my-rds-ssis-instance.corp-ad.company.com/\"" 
  /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E',
  @database_name=N'master',
  @flags=0,
  @proxy_name=N'SSIS_Proxy'
  GO
  ```

## プロキシからの SSIS アクセスの取り消し
<a name="SSIS.Use.Revoke"></a>

以下のストアドプロシージャを使用して、SSIS サブシステムへのアクセスを取り消し、SSIS プロキシを削除できます。

**アクセスを取り消してプロキシを削除するには**

1. サブシステムのアクセスを取り消します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   GO
   ```

1. プロキシに対する許可を取り消します。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSIS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. プロキシを削除します。

   ```
   USE [msdb]
   GO
   EXEC dbo.sp_delete_proxy @proxy_name = N'SSIS_Proxy'
   GO
   ```

# SSIS データベースの無効化と削除
<a name="SSIS.DisableDrop"></a>

SSIS データベースを無効化または削除するには、次の手順を実行します。

**Topics**
+ [SSIS の無効化](#SSIS.Disable)
+ [SSISDB データベースの削除](#SSIS.Drop)

## SSIS の無効化
<a name="SSIS.Disable"></a>

SSIS を無効にするには、オプショングループから `SSIS` オプションを削除します。

**重要**  
SSIS オプションを削除しても SSISDB データベースは削除されないため、SSIS プロジェクトを失うことなくこのオプションを安全に削除できます。  
削除後に `SSIS` オプションを再度有効にして、前に SSIS カタログにデプロイされていた SSIS プロジェクトを再利用できます。

### コンソール
<a name="SSIS.Disable.Console"></a>

以下の手順では、`SSIS` オプションを削除します。

**SSIS オプションをオプショングループから削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `SSIS` オプションが含まれているオプショングループ (前の例では `ssis-se-2016`) を選択します。

1. [**オプションの削除**] を選択します。

1. [**オプションの削除**] で、[**削除するオプション**] として [**SSIS**] を選択します。

1. [**すぐに適用**] で、オプションをすぐに削除する場合は [**はい**] を選択し、次のメンテナンスウィンドウで削除する場合は [**いいえ**] を選択します。

1. [**削除**] を選択します。

### CLI
<a name="SSIS.Disable.CLI"></a>

以下の手順では、`SSIS` オプションを削除します。

**SSIS オプションをオプショングループから削除するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssis-se-2016 \
      --options SSIS \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssis-se-2016 ^
      --options SSIS ^
      --apply-immediately
  ```

## SSISDB データベースの削除
<a name="SSIS.Drop"></a>

SSIS オプションを削除しても、SSISDB データベースは削除されません。SSISDB データベースを削除するには、SSIS オプションを削除した後、`rds_drop_ssis_database` ストアドプロシージャを使用します。

**SSIS データベースを削除するには**
+ 次のストアドプロシージャを使用します。

  ```
  USE [msdb]
  GO
  EXEC dbo.rds_drop_ssis_database
  GO
  ```

SSISDB データベースを削除した後、SSIS オプションを再度有効にすると、新しい SSISDB カタログが取得されます。

# Amazon RDS for SQL Server での SQL Server Reporting Services のサポート
<a name="Appendix.SQLServer.Options.SSRS"></a>

Microsoft SQL Server Reporting Services (SSRS) は、レポートの生成とディストリビューションに使用されるサーバーベースのアプリケーションです。これは、SQL Server Analysis Services (SSAS) および SQL Server Integration Services (SSIS) を含む SQL Server サービスのスイートの一部です。SSRS は、SQL Server 上に構築されたサービスです。これを使用すると、さまざまなデータソースからデータを収集して、それを簡単に理解でき、分析の準備が整っている方法で提示できます。

Amazon RDS for SQL Server は、RDS DB インスタンスで SSRS を直接実行する操作をサポートしています。SSRS は、既存または新規の DB インスタンスで使用できます。

RDS は、次のバージョンで SQL Server スタンダードエディションおよびエンタープライズエディションの SSRS をサポートします。
+ SQL Server 2022、すべてのバージョン
+ SQL Server 2019、バージョン 15.00.4043.16.v1 以降
+ SQL Server 2017、バージョン 14.00.3223.3.v1 以降
+ SQL Server 2016、バージョン 13.00.5820.21.v1 以降

**Contents**
+ [制限と推奨事項](#SSRS.Limitations)
+ [SSRS をオンにする](SSRS.Enabling.md)
  + [SSRS のオプショングループの作成](SSRS.Enabling.md#SSRS.OptionGroup)
  + [オプショングループへの SSRS オプションの追加](SSRS.Enabling.md#SSRS.Add)
  + [オプショングループと DB インスタンスの関連付け](SSRS.Enabling.md#SSRS.Apply)
  + [VPC セキュリティグループへのインバウンドアクセスの許可](SSRS.Enabling.md#SSRS.Inbound)
+ [レポートサーバーデータベース](#SSRS.DBs)
+ [SSRS ログファイル](#SSRS.Logs)
+ [SSRS ウェブポータルへのアクセス](SSRS.Access.md)
  + [RDS での SSL の使用](SSRS.Access.md#SSRS.Access.SSL)
  + [ドメインユーザーへのアクセスの許可](SSRS.Access.md#SSRS.Access.Grant)
  + [ウェブポータルへのアクセス](SSRS.Access.md#SSRS.Access)
+ [レポートのデプロイとレポートデータソースの設定](SSRS.DeployConfig.md)
  + [SSRS へのレポートのデプロイ](SSRS.DeployConfig.md#SSRS.Deploy)
  + [レポートのデータソースの設定](SSRS.DeployConfig.md#SSRS.ConfigureDataSource)
+ [SSRS E メールを使用してレポートを送信する](SSRS.Email.md)
+ [システムレベルのアクセス許可の取り消し](SSRS.Access.Revoke.md)
+ [タスクのステータスのモニタリング](SSRS.Monitor.md)
+ [SSRS データベースの無効化と削除](SSRS.DisableDelete.md)
  + [SSRS をオフにする](SSRS.DisableDelete.md#SSRS.Disable)
  + [SSRS データベースの削除](SSRS.DisableDelete.md#SSRS.Drop)

## 制限と推奨事項
<a name="SSRS.Limitations"></a>

SQL Server 用 RDS で SSRS を実行する場合は、次の制限と推奨事項が適用されます。
+ リードレプリカを持つ DB インスタンスでは SSRS を使用することはできません。
+ インスタンスは、自己管理型の Active Directory または AWS Directory Service for Microsoft Active Directory for SSRS ウェブポータルおよびウェブサーバー認証を使用する必要があります。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。
+ SSRS オプションを使用して作成されたレポートサーバーデータベースをバックアップすることはできません。
+ SSRS の他のインスタンスからのレポートサーバーデータベースのインポートと復元はサポートされていません。詳細については、「[レポートサーバーデータベース](#SSRS.DBs)」を参照してください。
+ デフォルトの SSL ポート (443) でリッスンするように SSRS を構成することはできません。指定できる値は、1234、1434、3260、3343、3389、47001 を除く、1150～49511 です。
+ Microsoft Windows ファイル共有によるサブスクリプションはサポートされていません。
+ Reporting Services Configuration Manager の使用はサポートされていません。
+ ロールの作成と変更はサポートされていません。
+ レポートサーバーのプロパティの変更はサポートされていません。
+ システム管理者とシステムユーザーのロールは付与されません。
+ ウェブポータルを使用してシステムレベルのロールの割り当てを編集することはできません。

# SSRS をオンにする
<a name="SSRS.Enabling"></a>

DB インスタンスの SSRS をオンにするには、次のプロセスを使用します。

1. 新しいオプショングループを作成するか、既存のオプショングループを選択します。

1. オプショングループに [`SSRS`] オプションを追加します。

1. オプショングループを DB インスタンスに関連付けます。

1. SSRS リスナーポートの Virtual Private Cloud (VPC) セキュリティグループへのインバウンドアクセスを許可します。

## SSRS のオプショングループの作成
<a name="SSRS.OptionGroup"></a>

SSRS を使用するには、使用する DB インスタンスの SQL Server エンジンおよびバージョンに対応するオプショングループを作成します。そのためには、AWS マネジメントコンソール または AWS CLI を使用します。

**注記**  
既存のオプショングループが正しい SQL Server エンジンおよびバージョンに対応している場合は、それを使用することもできます。

### コンソール
<a name="SSRS.OptionGroup.Console"></a>

次の手順では、SQL Server Standard Edition 2017 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. [**Create group (グループの作成)**] を選択します。

1. [**オプショングループの作成**] ウィンドウで、次の操作を行います。

   1. **[Name]** (名前) に、AWS アカウント 内で一意のオプショングループ名 (**ssrs-se-2017** など) を入力します。名前には、英字、数字、ハイフンのみを使用できます。

   1. [**説明**] に、オプショングループの簡単な説明 (**SSRS option group for SQL Server SE 2017** など) を入力します。この説明は表示用に使用されます。

   1. [**エンジン**] で [**sqlserver-se**] を選択します。

   1. [**メジャーエンジンのバージョン**] で、[**14.00**] を選択します。

1. **[作成]** を選択します。

### CLI
<a name="SSRS.OptionGroup.CLI"></a>

次の手順では、SQL Server Standard Edition 2017 のオプショングループを作成します。

**オプショングループを作成するには**
+ 以下のいずれかのコマンドを実行します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds create-option-group \
    --option-group-name ssrs-se-2017 \
    --engine-name sqlserver-se \
    --major-engine-version 14.00 \
    --option-group-description "SSRS option group for SQL Server SE 2017"
```
Windows の場合:  

```
aws rds create-option-group ^
    --option-group-name ssrs-se-2017 ^
    --engine-name sqlserver-se ^
    --major-engine-version 14.00 ^
    --option-group-description "SSRS option group for SQL Server SE 2017"
```

## オプショングループへの SSRS オプションの追加
<a name="SSRS.Add"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `SSRS` オプションをオプショングループに追加します。

### コンソール
<a name="SSRS.Add.CON"></a>

**SSRS オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 先ほど作成したオプショングループを選択し、**[Add option]** (オプションの追加) を選択します。

1. [**オプションの詳細**] で、[**オプション名**] として **SSRS** を選択します。

1. [**オプション設定**] で、次の操作を行います。

   1. SSRS サービスがリッスンするポートを入力します。デフォルトは 8443 です。許可される値のリストについては、「[制限と推奨事項](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations)」を参照してください。

   1. [**最大メモリ**] に値を入力します。

      [**最大メモリ**] は、レポートサーバーアプリケーションに対して新しいメモリ割り当て要求を許可しない上限しきい値を指定します。この値は、DB インスタンスの合計メモリに対する割合 (%) です。指定できる値は 10～80 です。

   1. [**セキュリティグループ**] で、オプションに関連付ける VPC セキュリティグループを選択します。DB インスタンスに関連付けられているものと同じセキュリティグループを使用します。

1. SSRS Email を使用してレポートを送信するには、**[Email delivery in reporting services]** (レポートサービスでのメール配信) の **[Configure email delivery options]** (E メール配信オプションの設定) チェックボックスを選択し、以下の操作を実行します。

   1. **[Sender email address]** (送信者メールアドレス) で、SSRS Email で送信されるメッセージの **[From]** フィールドに使用するメールアドレスを入力します。

      SMTP サーバーからメールを送信するアクセス許可を持つユーザーアカウントを指定します。

   1. **SMTP server]** (SMTP サーバー) で、使用する SMTP サーバーまたはゲートウェイを指定します。

      IP アドレス、社内イントラネット上のコンピュータの NetBIOS 名、または完全修飾ドメイン名を使用できます。

   1. **[SMTP port]** (SMTP ポート) で、メールサーバーに接続するために使用するポートを入力します。デフォルトは 25 です。

   1. 認証を使用するには:

      1. **[Use authentication]** (認証の使用) チェックボックスを選択します。

      1. **[Secret Amazon Resource Name (ARN)]** (シークレットの Amazon リソースネーム (ARN)) で、ユーザー認証情報の AWS Secrets Manager ARN を入力します。

         次の形式を使用します。

         **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

         例: 

         **arn:aws:secretsmanager:*us-west-2*:*123456789012*:secret:*MySecret-a1b2c3***

         シークレットを作成するための詳細については、「[SSRS E メールを使用してレポートを送信する](SSRS.Email.md)」を参照してください。

   1. **[Use Secure Sockets Layer (SSL)]** (Secure Sockets Layer (SSL) を使用する)) チェックボックスを選択して、SSL を使用して電子メールメッセージを暗号化します。

1. **[スケジュール]** で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[オプションを追加]** を選択します。

### CLI
<a name="SSRS.Add.CLI"></a>

**SSRS オプションを追加するには**

1. `ssrs-option.json` などの JSON ファイル を作成します。

   1. 以下の必須パラメータを設定します。
      + `OptionGroupName` - 以前に作成または選択したオプショングループの名前 (次の例では `ssrs-se-2017`)。
      + `Port` - SSRS サービスがリッスンするポート。デフォルトは 8443 です。許可される値のリストについては、「[制限と推奨事項](Appendix.SQLServer.Options.SSRS.md#SSRS.Limitations)」を参照してください。
      + `VpcSecurityGroupMemberships` - RDS DB インスタンスの VPC セキュリティグループのメンバーシップ。
      + `MAX_MEMORY` - レポートサーバーアプリケーションに対して新しいメモリ割り当て要求を許可しない上限しきい値。この値は、DB インスタンスの合計メモリに対する割合 (%) です。指定できる値は 10～80 です。

   1. (オプション) SSRS Email を使用するには、次のパラメータを設定します。
      + `SMTP_ENABLE_EMAIL` — SSRS E メールを使用するには `true` に設定します。デフォルトは `false` です。
      + `SMTP_SENDER_EMAIL_ADDRESS` — SSRS E メールで送信されるメッセージの**[From]** フィールドに使用するメールアドレスです。SMTP サーバーからメールを送信するアクセス許可を持つユーザーアカウントを指定します。
      + `SMTP_SERVER` — 使用する SMTP サーバーまたはゲートウェイ。IP アドレス、社内イントラネット上のコンピュータの NetBIOS 名、または完全修飾ドメイン名を使用できます。
      + `SMTP_PORT` — メールサーバーに接続するために使用するポート。デフォルトは 25 です。
      + `SMTP_USE_SSL` — SSL を使用して E メールメッセージを暗号化するには、`true` に設定します。デフォルトは `true` です。
      + `SMTP_EMAIL_CREDENTIALS_SECRET_ARN` — ユーザー認証情報を保持する Secrets Manager ARN。次の形式を使用します。

        **arn:aws:secretsmanager:*Region*:*AccountId*:secret:*SecretName*-*6RandomCharacters***

        シークレットを作成するための詳細については、「[SSRS E メールを使用してレポートを送信する](SSRS.Email.md)」を参照してください。
      + `SMTP_USE_ANONYMOUS_AUTHENTICATION` — 認証を使用しない場合は、`true` に設定し、`SMTP_EMAIL_CREDENTIALS_SECRET_ARN` を含めないでください。

        `SMTP_ENABLE_EMAIL` が `true` の場合、デフォルトは `false` です。

   次の例には、シークレット ARN を使用した SSRS E メールパラメータが含まれています。

   ```
   {
   "OptionGroupName": "ssrs-se-2017",
   "OptionsToInclude": [
   	{
   	"OptionName": "SSRS",
   	"Port": 8443,
   	"VpcSecurityGroupMemberships": ["sg-0abcdef123"],
   	"OptionSettings": [
               {"Name": "MAX_MEMORY","Value": "60"},
               {"Name": "SMTP_ENABLE_EMAIL","Value": "true"}
               {"Name": "SMTP_SENDER_EMAIL_ADDRESS","Value": "nobody@example.com"},
               {"Name": "SMTP_SERVER","Value": "email-smtp.us-west-2.amazonaws.com"},
               {"Name": "SMTP_PORT","Value": "25"},
               {"Name": "SMTP_USE_SSL","Value": "true"},
               {"Name": "SMTP_EMAIL_CREDENTIALS_SECRET_ARN","Value": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3"}
               ]
   	}],
   "ApplyImmediately": true
   }
   ```

1. オプショングループに [`SSRS`] オプションを追加します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://ssrs-option.json \
       --apply-immediately
   ```

   Windows の場合:

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://ssrs-option.json ^
       --apply-immediately
   ```

## オプショングループと DB インスタンスの関連付け
<a name="SSRS.Apply"></a>

AWS マネジメントコンソール または AWS CLI を使用して、オプショングループを DB インスタンスに関連付けます。

既存の DB インスタンスを使用する場合は、このインスタンスに Active Directory ドメインと AWS Identity and Access Management (IAM) ロールが既に関連付けられている必要があります。新しいインスタンスを作成する場合は、既存の Active Directory ドメインと IAM ロールを指定します。詳細については、「[RDS for SQL Server による Active Directory の操作](User.SQLServer.ActiveDirectoryWindowsAuth.md)」を参照してください。

### コンソール
<a name="SSRS.Apply.Console"></a>

オプショングループを新規または既存の DB インスタンスに関連付けることができます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにオプショングループを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更してから、新しいオプショングループを関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

### CLI
<a name="SSRS.Apply.CLI"></a>

オプショングループを新規または既存の DB インスタンスに関連付けることができます。

**オプショングループを使用する DB インスタンスを作成するには**
+ オプショングループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier myssrsinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 14.00.3223.3.v1 \
      --allocated-storage 100 \
      --manage-master-user-password  \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name ssrs-se-2017
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier myssrsinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 14.00.3223.3.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name ssrs-se-2017
  ```

**オプショングループを使用するように DB インスタンスを変更するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier myssrsinstance \
      --option-group-name ssrs-se-2017 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier myssrsinstance ^
      --option-group-name ssrs-se-2017 ^
      --apply-immediately
  ```

## VPC セキュリティグループへのインバウンドアクセスの許可
<a name="SSRS.Inbound"></a>

DB インスタンスに関連付けられた VPC セキュリティグループへのインバウンドアクセスを許可するには、指定された SSRS リスナーポートのインバウンドルールを作成します。セキュリティグループの設定の詳細については、「[セキュリティグループを作成して VPC 内の DB インスタンスへのアクセスを提供する](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)」を参照してください。

## レポートサーバーデータベース
<a name="SSRS.DBs"></a>

DB インスタンスが SSRS オプションに関連付けられている場合、DB インスタンスに 2 つの新しいデータベースが作成されます。
+ `rdsadmin_ReportServer`
+ `rdsadmin_ReportServerTempDB`

これらのデータベースは、ReportServer および ReportServerTempDB データベースとして機能します。SSRS は、ReportServer データベースにデータを保存し、ReportServerTempDB にそのデータをキャッシュします。詳細については、Microsoft ドキュメントの「[レポートサーバーデータベース](https://learn.microsoft.com/en-us/sql/reporting-services/report-server/report-server-database-ssrs-native-mode?view=sql-server-ver15)」を参照してください。

RDS はこれらのデータベースを所有および管理するため、ALTER や DROP などのデータベース操作は許可されません。`rdsadmin_ReportServerTempDB` データベースへのアクセスは許可されていません。ただし、`rdsadmin_ReportServer` データベースに対して読み取りオペレーションを実行することはできます。

## SSRS ログファイル
<a name="SSRS.Logs"></a>

SSRS ログファイルをリスト、表示、およびダウンロードできます。SSRS ログファイルは ReportServerService\$1*timestamp*.log という命名規則に従います。これらのレポートサーバーログは、`D:\rdsdbdata\Log\SSRS` ディレクトリにあります (`D:\rdsdbdata\Log` ディレクトリは、エラーログと SQL Server エージェントログの親ディレクトリでもあります)。詳細については、「[データベースログファイルの表示とリスト化](USER_LogAccess.Procedural.Viewing.md)」を参照してください。

既存の SSRS インスタンスの場合、レポートサーバーログにアクセスするために SSRS サービスを再起動する必要がある場合があります。`SSRS` オプションを更新することで、サービスを再起動できます。

詳細については、「[Amazon RDS for Microsoft SQL Server ログの使用方法](Appendix.SQLServer.CommonDBATasks.Logs.md)」を参照してください。

# SSRS ウェブポータルへのアクセス
<a name="SSRS.Access"></a>

SSRS ウェブポータルにアクセスするには、次のプロセスを使用します。

1. Secure Sockets Layer (SSL) をオンにします。

1. ドメインユーザーへのアクセス権を付与します。

1. ブラウザとドメインユーザーの認証情報を使用してウェブポータルにアクセスします。

## RDS での SSL の使用
<a name="SSRS.Access.SSL"></a>

SSRS は、接続に HTTPS SSL プロトコルを使用します。このプロトコルを使用するには、クライアントコンピュータの Microsoft Windows オペレーティングシステムに SSL 証明書をインポートします。

SSL 証明書の詳細については、「[SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化](UsingWithRDS.SSL.md)」を参照してください。SQL Server での SSL の使用の詳細については、「[Microsoft SQL Server DB インスタンスでの SSL の使用](SQLServer.Concepts.General.SSL.Using.md)」を参照してください。

## ドメインユーザーへのアクセスの許可
<a name="SSRS.Access.Grant"></a>

新しい SSRS アクティベーションでは、SSRS でのロールの割り当てはありません。ドメインユーザーまたはユーザーグループにウェブポータルへのアクセス権を付与するために、RDS にはストアドプロシージャが用意されています。

**ウェブポータルでドメインユーザーにアクセス権を付与するには**
+ 次のストアドプロシージャを使用します。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSRS_GRANT_PORTAL_PERMISSION',
  @ssrs_group_or_username=N'AD_domain\user';
  ```

ドメインユーザーまたはユーザーグループに `RDS_SSRS_ROLE` システムロールが付与されます。このロールには、次のシステムレベルのタスクが付与されています。
+ レポートを実行
+ ジョブの管理
+ 共有スケジュールの管理
+ 共有スケジュールの表示

ルートフォルダでの `Content Manager` のアイテムレベルのロールも付与されます。

## ウェブポータルへのアクセス
<a name="SSRS.Access"></a>

`SSRS_GRANT_PORTAL_PERMISSION` タスクが正常に終了すると、ウェブブラウザを使用してポータルにアクセスできるようになります。ウェブポータル URL の形式を次に示します。

```
https://rds_endpoint:port/Reports
```

この形式では、以下が適用されます。
+ *`rds_endpoint`* - SSRS で使用している RDS DB インスタンスのエンドポイント。

  エンドポイントは、DB インスタンスの [**接続とセキュリティ**] タブにあります。詳細については、「[SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)」を参照してください。
+ `port` - `SSRS` オプションで設定した SSRS のリスナーポート。

**ウェブポータルにアクセスするには**

1. ブラウザにウェブポータルの URL を入力します。

   ```
   https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/Reports
   ```

1. `SSRS_GRANT_PORTAL_PERMISSION` タスクでアクセス権を付与したドメインユーザーの認証情報を使用してログインします。

# レポートのデプロイとレポートデータソースの設定
<a name="SSRS.DeployConfig"></a>

SSRS にレポートをデプロイし、レポートデータソースを設定するには、次の手順に従います。

**Topics**
+ [SSRS へのレポートのデプロイ](#SSRS.Deploy)
+ [レポートのデータソースの設定](#SSRS.ConfigureDataSource)

## SSRS へのレポートのデプロイ
<a name="SSRS.Deploy"></a>

ウェブポータルにアクセスした後は、ウェブポータルにレポートをデプロイできます。ウェブポータルのアップロードツールを使用して、レポートをアップロードしたり、[SQL Server データツール (SSDT)](https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt) から直接デプロイしたりできます。SSDT からデプロイする場合は、次の点を確認してください。
+ SSDT を起動したユーザーは、SSRS ウェブポータルにアクセスできます。
+ SSRS プロジェクトプロパティの `TargetServerURL` の値は、`ReportServer` サフィックスが付加された RDS DB インスタンスの HTTPS エンドポイントに設定されます。次に例を示します。

  ```
  https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/ReportServer
  ```

## レポートのデータソースの設定
<a name="SSRS.ConfigureDataSource"></a>

レポートを SSRS にデプロイした後、レポートのデータソースを設定する必要があります。レポートのデータソースを設定するときには、次の点を確認してください。
+ RDS for SQL Server DB インスタンスが AWS Directory Service for Microsoft Active Directory に結合されている場合、接続文字列のデータソース名として完全修飾ドメイン名 (FQDN) を使用してください。例えば、`myssrsinstance.corp-ad.example.com` を使用します。ここで、`myssrsinstance` は DB インスタンス名、`corp-ad.example.com` は完全修飾ドメイン名です。
+ 自己管理型の Active Directory に結合された RDS for SQL Server DB インスタンスの場合、接続文字列のデータソース名として `.` または `LocalHost` を使用します。

# SSRS E メールを使用してレポートを送信する
<a name="SSRS.Email"></a>

SSRS には SSRS E メール拡張機能が含まれており、これを使用してユーザーにレポートを送信できます。

SSRS E メールを設定するには、`SSRS` オプション設定を使用します。(詳しくは、「[オプショングループへの SSRS オプションの追加](SSRS.Enabling.md#SSRS.Add)」を参照してください。)

SSRS E メールを設定すると、レポートサーバー上のレポートを購読できます。詳細については、Microsoft ドキュメントの「[レポートサービスでの E メール配信](https://docs.microsoft.com/en-us/sql/reporting-services/subscriptions/e-mail-delivery-in-reporting-services)」を参照してください。

SSRS E メールが RDS 上で機能するためには、AWS Secrets Manager との統合が必要です。Secrets Manager と統合するには、シークレットを作成します。

**注記**  
シークレットを後で変更する場合は、オプショングループで `SSRS` オプションも更新する必要があります。

**SSRS E メールのシークレットを作成するには**

1. [AWS Secrets Manager ユーザーガイド](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)にある「*シークレットを作成する*」のステップに従います。

   1. **[Select secret type]** (シークレットタイプの選択) で、**[Other type of secrets]** (他の種類のシークレット) を選択します。

   1. **[Key/value pairs]** (キー/値ペア) で、次のように入力します。
      + **SMTP\$1USERNAME** — SMTP サーバーからメールを送信するアクセス許可を持つユーザーを入力します。
      + **SMTP\$1PASSWORD** — SMTP ユーザーのパスワードを入力します。

   1. **暗号化キー**では、デフォルトの AWS KMS key を使用しないでください。独自の既存のキーを使用するか、新しく作成します。

      KMS キーポリシーでは、`kms:Decrypt` アクションを許可する必要があります。例:

      ```
      {
          "Sid": "Allow use of the key",
          "Effect": "Allow",
          "Principal": {
              "Service": [
                  "rds.amazonaws.com"
              ]
          },
          "Action": [
              "kms:Decrypt"
          ],
          "Resource": "*"
      }
      ```

1. *AWS Secrets Managerユーザーガイド*の「[アクセス許可ポリシーをシークレットにアタッチする](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_resource-policies.html)」のステップに従います。アクセス許可ポリシーは、`rds.amazonaws.com` サービスプリンシパルに `secretsmanager:GetSecretValue` アクションを与えます。

   *Confused Deputy* Problem (混乱した代理の問題) を回避するために、ポリシーの `aws:sourceAccount` および `aws:sourceArn` 条件を使用することをお勧めします。`aws:sourceAccount` には AWS アカウント を使用し、`aws:sourceArn` にはオプショングループ ARN を使用します。(詳しくは、「[サービス間での混乱した代理問題の防止](cross-service-confused-deputy-prevention.md)」を参照してください。)

   以下の例に示しているのは、アクセス許可ポリシーです。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [ {
       "Effect" : "Allow",
       "Principal" : {
         "Service" : "rds.amazonaws.com"
       },
       "Action" : "secretsmanager:GetSecretValue",
       "Resource" : "*",
       "Condition" : {
         "StringEquals" : {
           "aws:sourceAccount" : "123456789012"
         },
         "ArnLike" : {
           "aws:sourceArn" : "arn:aws:rds:us-west-2:123456789012:og:ssrs-se-2017"
         }
       }
     } ]
   }
   ```

------

   その他の例については、「*AWS Secrets Manager ユーザーガイド*」の「[AWS Secrets Manager のアクセス許可ポリシーの例](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples.html)」を参照してください。

# システムレベルのアクセス許可の取り消し
<a name="SSRS.Access.Revoke"></a>

`RDS_SSRS_ROLE` システムロールには、システムレベルのロールの割り当てを削除するための十分なアクセス許可がありません。`RDS_SSRS_ROLE` からユーザーまたはユーザーグループを削除するには、ロールの付与に使用したものと同じストアドプロシージャを使用します。ただし、`SSRS_REVOKE_PORTAL_PERMISSION` タスクタイプを使用します。

**ウェブポータルのドメインユーザーからアクセス権を取り消すには**
+ 次のストアドプロシージャを使用します。

  ```
  exec msdb.dbo.rds_msbi_task
  @task_type='SSRS_REVOKE_PORTAL_PERMISSION',
  @ssrs_group_or_username=N'AD_domain\user';
  ```

これにより、ユーザーが `RDS_SSRS_ROLE` システムロールから削除されます。また、ユーザーが `Content Manager` アイテムレベルのロールを持っている場合、このロールからも削除されます。

# タスクのステータスのモニタリング
<a name="SSRS.Monitor"></a>

タスクの権限付与または取り消しのステータスを追跡するには、`rds_fn_task_status` 関数を呼び出します。2 つのパラメータを使用します。1 つめのパラメータは、SSRS に適用されないため、常に `NULL` を設定してください。2 つめのパラメータは、タスク ID を受け入れます。

全タスクのリストを見るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータを `0` に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

特定のタスクを受け取るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータをタスク ID に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 機能は次の情報を返します。


| 出力パラメータ | 説明 | 
| --- | --- | 
| `task_id` | タスクの ID。 | 
| `task_type` | SSRS では、次のタスクタイプを使用できます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SSRS.Monitor.html)  | 
| `database_name` | SSRS タスクは該当しません。 | 
| `% complete` | タスクの進行状況の割合。 | 
| `duration (mins)` | タスクにかかった時間 (分単位)。 | 
| `lifecycle` |  タスクのステータス。有効な状態には以下のものがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/SSRS.Monitor.html)  | 
| `task_info` | タスクに関する追加情報。処理中にエラーが発生した場合、この列にエラーに関する情報が含まれます。 | 
| `last_updated` | タスクのステータスが最後に更新された日時。 | 
| `created_at` | タスクが作成された日時。 | 
| `S3_object_arn` |  SSRS タスクは該当しません。  | 
| `overwrite_S3_backup_file` | SSRS タスクは該当しません。 | 
| `KMS_master_key_arn` |  SSRS タスクは該当しません。  | 
| `filepath` |  SSRS タスクは該当しません。  | 
| `overwrite_file` |  SSRS タスクは該当しません。  | 
| `task_metadata` | SSRS タスクに関連付けられたメタデータ。 | 

# SSRS データベースの無効化と削除
<a name="SSRS.DisableDelete"></a>

SSRS を無効にし、SSRS データベースを削除するには、次の手順に従います。

**Topics**
+ [SSRS をオフにする](#SSRS.Disable)
+ [SSRS データベースの削除](#SSRS.Drop)

## SSRS をオフにする
<a name="SSRS.Disable"></a>

SSRS をオフにするには、オプショングループから `SSRS` オプションを削除します。このオプションを削除しても、SSRS データベースは削除されません。(詳しくは、「[SSRS データベースの削除](#SSRS.Drop)」を参照してください。)

`SSRS` オプションを再び追加することで、SSRS を再びオンにすることができます。SSRS データベースも削除した場合は、同じ DB インスタンスでオプションを再度有効にすると、新しいレポートサーバーデータベースが作成されます。

### コンソール
<a name="SSRS.Disable.Console"></a>

**SSRS オプションをオプショングループから削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `SSRS` オプションが含まれているオプショングループ (前の例では `ssrs-se-2017`) を選択します。

1. [**オプションの削除**] を選択します。

1. [**オプションの削除**] で、[**削除するオプション**] として [**SSRS**] を選択します。

1. [**すぐに適用**] で、オプションをすぐに削除する場合は [**はい**] を選択し、次のメンテナンスウィンドウで削除する場合は [**いいえ**] を選択します。

1. [**削除**] を選択します。

### CLI
<a name="SSRS.Disable.CLI"></a>

**SSRS オプションをオプショングループから削除するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name ssrs-se-2017 \
      --options SSRS \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name ssrs-se-2017 ^
      --options SSRS ^
      --apply-immediately
  ```

## SSRS データベースの削除
<a name="SSRS.Drop"></a>

`SSRS` オプションを削除しても、レポートサーバーデータベースは削除されません。それらを削除するには、次のストアドプロシージャを使用します。

レポートサーバーデータベースを削除するには、必ず初期に `SSRS` オプションを削除してください。

**SSRS データベースを削除するには**
+ 次のストアドプロシージャを使用します。

  ```
  exec msdb.dbo.rds_drop_ssrs_databases
  ```

# RDS for SQL Server での Microsoft 分散トランザクションコーディネーターのサポート
<a name="Appendix.SQLServer.Options.MSDTC"></a>

*分散トランザクション*は、2 つ以上のネットワークホストが関与するデータベーストランザクションです。RDS for SQL Server では、ホスト間の分散トランザクションをサポートしています。この場合、ホストの 1 つとして次のいずれかを含みます。
+ RDS for SQL Server の DB インスタンス
+ オンプレミスの SQL Server ホスト
+ SQL Server がインストールされている Amazon EC2 ホスト
+ 分散トランザクションをサポートするデータベースエンジンを備えた他の EC2 ホストまたは RDS DB インスタンス

RDS では、SQL Server 2012 以降 (バージョン 11.00.5058.0.v1 以降)、RDS for SQL Server のすべてのエディションで分散トランザクションがサポートされています。サポートは、Microsoft 分散トランザクションコーディネーター (MSDTC) を使用して提供されます。MSDTC の詳細については、Microsoft のドキュメントの「[分散トランザクションコーディネーター](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms684146(v=vs.85))」を参照してください。

**Contents**
+ [制限事項](#Appendix.SQLServer.Options.MSDTC.Limitations)
+ [MSDTC の有効化](Appendix.SQLServer.Options.MSDTC.Enabling.md)
  + [MSDTC のオプショングループの作成](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.OptionGroup)
  + [オプショングループへの MSDTC オプションの追加](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Add)
  + [MSDTC のパラメータグループの作成](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.CreateParamGroup)
  + [MSDTC のパラメータの変更](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)
  + [DB インスタンスとのオプショングループおよびパラメータグループの関連付け](Appendix.SQLServer.Options.MSDTC.Enabling.md#MSDTC.Apply)
  + [MSDTC オプションの変更](Appendix.SQLServer.Options.MSDTC.Enabling.md#Appendix.SQLServer.Options.MSDTC.Modify)
+ [トランザクションの使用](#Appendix.SQLServer.Options.MSDTC.Using)
  + [分散トランザクションの使用](#Appendix.SQLServer.Options.MSDTC.UsingXA)
  + [XA トランザクションの使用](#MSDTC.XA)
  + [トランザクションの追跡の使用](#MSDTC.Tracing)
+ [MSDTC の無効化](Appendix.SQLServer.Options.MSDTC.Disable.md)
+ [RDS for SQL Server の MSDTC のトラブルシューティング](Appendix.SQLServer.Options.MSDTC.Troubleshooting.md)

## 制限事項
<a name="Appendix.SQLServer.Options.MSDTC.Limitations"></a>

RDS for SQL Server で MSDTC を使用する場合は、次の制限が適用されます。
+ MSDTC は、SQL Server データベースミラーリングを使用するインスタンスではサポートされません。詳細については、「[トランザクション - 可用性グループとデータベースミラーリング](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-ver15#non-support-for-distributed-transactions)」を参照してください。
+ `in-doubt xact resolution` パラメータは 1 または 2 に設定する必要があります。詳細については、「[MSDTC のパラメータの変更](Appendix.SQLServer.Options.MSDTC.Enabling.md#ModifyParam.MSDTC)」を参照してください。
+ MSDTC では、分散トランザクションに参加するすべてのホストをホスト名を使用して解決可能にする必要があります。RDS は、ドメインに参加しているインスタンスに対してこの機能を自動的に維持します。ただし、スタンドアロンインスタンスの場合は、必ず DNS サーバーを手動で設定してください。
+ Java Database Connectivity (JDBC) XA トランザクションは、SQL Server 2017 バージョン 14.00.3223.3 以降および SQL Server 2019 でサポートされています。
+ RDS インスタンス上のクライアント動的リンクライブラリ (DLL) に依存する分散トランザクションはサポートされていません。
+ カスタム XA 動的リンクライブラリの使用はサポートされていません。

# MSDTC の有効化
<a name="Appendix.SQLServer.Options.MSDTC.Enabling"></a>

DB インスタンスに対して MSDTC を有効にするには、次のプロセスを使用します。

1. 新しいオプショングループを作成するか、既存のオプショングループを選択します。

1. オプショングループに [`MSDTC`] オプションを追加します。

1. 新しいパラメータグループを作成するか、既存のパラメータグループを選択します。

1. パラメータグループを変更して、`in-doubt xact resolution` パラメータを 1 または 2 に設定します。

1. オプショングループとパラメータグループを DB インスタンスに関連付けます。

## MSDTC のオプショングループの作成
<a name="Appendix.SQLServer.Options.MSDTC.OptionGroup"></a>

AWS マネジメントコンソール または AWS CLI を使用して、使用する DB インスタンスの SQL Server エンジンおよびバージョンに対応するオプショングループを作成します。

**注記**  
既存のオプショングループが正しい SQL Server エンジンおよびバージョンに対応している場合は、それを使用することもできます。

### コンソール
<a name="OptionGroup.MSDTC.Console"></a>

次の手順では、SQL Server Standard Edition 2016 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. **[Create group]** (グループの作成) を選択します。

1. [**オプショングループの作成**] ウィンドウで、次の操作を行います。

   1. [**名前**] に、AWS アカウント内で一意のオプショングループ名 (**msdtc-se-2016** など) を入力します。名前には、英字、数字、ハイフンのみを使用できます。

   1. [**説明**] に、オプショングループの簡単な説明 (**MSDTC option group for SQL Server SE 2016** など) を入力します。この説明は表示用に使用されます。

   1. [**エンジン**] で [**sqlserver-se**] を選択します。

   1. [**メジャーエンジンのバージョン**] で、[**13.00**] を選択します。

1. [**Create**] (作成) を選択します。

### CLI
<a name="OptionGroup.MSDTC.CLI"></a>

次の例では、SQL Server Standard Edition 2016 のオプショングループを作成します。

**オプショングループを作成するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-option-group \
      --option-group-name msdtc-se-2016 \
      --engine-name sqlserver-se \
      --major-engine-version 13.00 \
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

  Windows の場合:

  ```
  aws rds create-option-group ^
      --option-group-name msdtc-se-2016 ^
      --engine-name sqlserver-se ^
      --major-engine-version 13.00 ^
      --option-group-description "MSDTC option group for SQL Server SE 2016"
  ```

## オプショングループへの MSDTC オプションの追加
<a name="Appendix.SQLServer.Options.MSDTC.Add"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `MSDTC` オプションをオプショングループに追加します。

次のオプション設定が必要です。
+ **ポート** - MSDTC にアクセスするために使用するポート。指定できる値は、1234、1434、3260、3343、3389、47001 を除く、1150～49151 です。デフォルト値は 5000 です。

  使用するポートがファイアウォールルールで有効になっていることを確認します。また、必要に応じて、DB インスタンスに関連付けられているセキュリティグループのインバウンドルールとアウトバウンドルールでこのポートが有効になっていることを確認します。(詳しくは、「[Amazon RDS DB インスタンスに接続できない](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)」を参照してください。) 
+ **セキュリティグループ** - RDS DB インスタンスの VPC セキュリティグループのメンバーシップ。
+ **認証タイプ** - ホスト間の認証モード。次の認証タイプがサポートされています。
  + 相互 - RDS インスタンスは、統合認証を使用して相互に認証されます。このオプションを選択した場合、このオプショングループに関連付けられているすべてのインスタンスがドメインに参加している必要があります。
  + なし - ホスト間での認証は実行されません。本稼働環境でこのモードを使用することは推奨されていません。
+ **トランザクションログサイズ** - MSDTC トランザクションログのサイズ。許容値は、4～1024 MB です。デフォルトサイズは 4 MB です。

次のオプション設定はオプションです。
+ [**インバウンド接続を有効にする**] - このオプショングループに関連付けられているインスタンスへのインバウンド MSDTC 接続を許可するかどうかを指定します。
+ [**アウトバウンド接続を有効にする**] - このオプショングループに関連付けられているインスタンスからのアウトバウンド MSDTC 接続を許可するかどうかを指定します。
+ **XA を有効にする X** - XA トランザクションを許可するかどうかを指定します。XA プロトコルの詳細については、「[XA 仕様](https://publications.opengroup.org/c193)」を参照してください。
+ **SNA LU を有効にする** - SNA LU プロトコルを分散トランザクションに使用できるようにするかどうかを指定します。SNA LU プロトコルのサポートの詳細については、Microsoft ドキュメントの「[Managing IBM CICS LU 6.2 transactions](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms685136(v=vs.85))」を参照してください。

### コンソール
<a name="Options.MSDTC.Add.Console"></a>

**MSDTC オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 先ほど作成したオプショングループを選択します。

1. [**オプションの追加**] を選択します。

1. [**オプションの詳細**] で、[**オプション名**] として **MSDTC** を選択します。

1. [**オプション設定**] で、次の操作を行います。

   1. [**ポート**] に、MSDTC にアクセスするためのポート番号を入力します。デフォルトは **5000** です。

   1. **[セキュリティグループ]** で、オプションに関連付ける VPC セキュリティグループを選択します。

   1. [**認証タイプ**] で [**相互**] または [**なし**] を選択します。

   1. [**トランザクションログのサイズ**] に、4～24 の値を入力します。デフォルト値は **4** です。

1. [**追加設定**] で、次の操作を行います。

   1. [**接続**] で、必要に応じて [**インバウンド接続を有効にする**] と [**アウトバウンド接続を有効にする**] を選択します。

   1. [**許可されたプロトコル**] で、必要に応じて [**XA を有効にする**] と [**SNA LU を有効にする**] を選択します。

1. [**スケジュール**] で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. [**オプションの追加**] を選択します。

   このオプションを追加するにあたって再起動は必要ありません。

### CLI
<a name="Options.MSDTC.Add.CLI"></a>

**MSDTC オプションを追加するには**

1. 次の必須のパラメータを使用して、JSON ファイル (`msdtc-option.json` など) を作成します。

   ```
   {
   "OptionGroupName":"msdtc-se-2016",
   "OptionsToInclude": [
   	{
   	"OptionName":"MSDTC",
   	"Port":5000,
   	"VpcSecurityGroupMemberships":["sg-0abcdef123"],
   	"OptionSettings":[{"Name":"AUTHENTICATION","Value":"MUTUAL"},{"Name":"TRANSACTION_LOG_SIZE","Value":"4"}]
   	}],
   "ApplyImmediately": true
   }
   ```

1. オプショングループに [`MSDTC`] オプションを追加します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws rds add-option-to-option-group \
       --cli-input-json file://msdtc-option.json \
       --apply-immediately
   ```

   Windows の場合:

   ```
   aws rds add-option-to-option-group ^
       --cli-input-json file://msdtc-option.json ^
       --apply-immediately
   ```

   再起動は必要ありません。

## MSDTC のパラメータグループの作成
<a name="MSDTC.CreateParamGroup"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応する `in-doubt xact resolution` パラメータのパラメータグループを作成または変更します。

### コンソール
<a name="CreateParamGroup.MSDTC.Console"></a>

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[パラメータグループ]** を選択します。

1. **[パラメータグループの作成]** を選択します。

1. [**パラメータグループの作成**] ペインで、次の操作を行います。

   1. [**パラメータグループファミリー**] で、[**sqlserver-se-13.0**] を選択します。

   1. [**グループ名**] に、パラメータグループの識別子 (**msdtc-sqlserver-se-13** など) を入力します。

   1. [**説明**] に「**in-doubt xact resolution**」と入力します。

1. [**Create**] (作成) を選択します。

### CLI
<a name="CreateParamGroup.MSDTC.CLI"></a>

次の例では、SQL Server Standard Edition 2016 のパラメータグループを作成します。

**パラメータグループを作成するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --db-parameter-group-family "sqlserver-se-13.0" \
      --description "in-doubt xact resolution"
  ```

  Windows の場合:

  ```
  aws rds create-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --db-parameter-group-family "sqlserver-se-13.0" ^
      --description "in-doubt xact resolution"
  ```

## MSDTC のパラメータの変更
<a name="ModifyParam.MSDTC"></a>

DB インスタンスの SQL Server のエディションとバージョンに対応するパラメータグループの `in-doubt xact resolution` パラメータを変更します。

MSDTC の場合、`in-doubt xact resolution` パラメータに次のいずれかの値を設定します。
+ `1` - `Presume commit`。MSDTC の in-doubt トランザクションは、コミットされたものと見なされます。
+ `2` - `Presume abort`。MSDTC の in-doubt トランザクションは、停止されたものと見なされます。

詳細については、Microsoft ドキュメント の「[in-doubt xact resolution server configuration option](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/in-doubt-xact-resolution-server-configuration-option)」を参照してください。

### コンソール
<a name="ModifyParam.MSDTC.Console"></a>

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**パラメータグループ**] を選択します。

1. **msdtc-sqlserver-se-13** などのパラメータグループを選択します。

1. [**パラメータ**] で、パラメータのリストを **xact** でフィルタ処理します。

1. **in-doubt xact resolution** を選択します。

1. [**Edit parameters**] を選択します。

1. **1** または **2** を入力します。

1. [**Save changes**] (変更の保存) をクリックします。

### CLI
<a name="ModifyParam.MSDTC.CLI"></a>

次の例では、SQL Server Standard Edition 2016 用に作成したパラメータグループを変更します。

**パラメータグループを変更するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-parameter-group \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

  Windows の場合:

  ```
  aws rds modify-db-parameter-group ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"
  ```

## DB インスタンスとのオプショングループおよびパラメータグループの関連付け
<a name="MSDTC.Apply"></a>

AWS マネジメントコンソール または AWS CLI を使用すると、MSDTC オプショングループおよびパラメータグループを DB インスタンスに関連付けることができます。

### コンソール
<a name="MSDTC.Apply.Console"></a>

MSDTC オプショングループおよびパラメータグループを新規または既存の DB インスタンスに関連付けることができます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
**注記**  
ドメイン参加済みの既存の DB インスタンスを使用する場合は、このインスタンスに Active Directory ドメインおよび AWS Identity and Access Management (IAM) ロールが既に関連付けられている必要があります。新しいドメイン参加済みのインスタンスを作成する場合は、既存の Active Directory ドメインと IAM ロールを指定します。詳細については、「[RDS for SQL Server による AWS Managed Active Directory の操作](USER_SQLServerWinAuth.md)」を参照してください。

### CLI
<a name="MSDTC.Apply.CLI"></a>

MSDTC オプショングループおよびパラメータグループを新規または既存の DB インスタンスに関連付けることができます。

**注記**  
既存のドメイン参加済みの DB インスタンスを使用する場合は、このインスタンスに Active Directory ドメインと IAM ロールが既に関連付けられている必要があります。新しいドメイン参加済みのインスタンスを作成する場合は、既存の Active Directory ドメインと IAM ロールを指定します。詳細については、「[RDS for SQL Server による AWS Managed Active Directory の操作](USER_SQLServerWinAuth.md)」を参照してください。

**MSDTC オプショングループおよびパラメータグループを使用して DB インスタンスを作成するには**
+ オプショングループの作成時に使用したものと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mydbinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-se \
      --engine-version 13.00.5426.0.v1 \
      --allocated-storage 100 \
      --manage-master-user-password \
      --master-username admin \
      --storage-type gp2 \
      --license-model li \
      --domain-iam-role-name my-directory-iam-role \
      --domain my-domain-id \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mydbinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-se ^
      --engine-version 13.00.5426.0.v1 ^
      --allocated-storage 100 ^
      --manage-master-user-password ^
      --master-username admin ^
      --storage-type gp2 ^
      --license-model li ^
      --domain-iam-role-name my-directory-iam-role ^
      --domain my-domain-id ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13
  ```

**DB インスタンスを変更し、MSDTC オプショングループとパラメータグループを関連付けるには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mydbinstance \
      --option-group-name msdtc-se-2016 \
      --db-parameter-group-name msdtc-sqlserver-se-13 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mydbinstance ^
      --option-group-name msdtc-se-2016 ^
      --db-parameter-group-name msdtc-sqlserver-se-13 ^
      --apply-immediately
  ```

## MSDTC オプションの変更
<a name="Appendix.SQLServer.Options.MSDTC.Modify"></a>

`MSDTC` オプションを有効にすると、その設定を変更できます。オプション設定の変更方法の詳細については、「[オプションの設定を変更する](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)」を参照してください。

**注記**  
MSDTC オプション設定の一部の変更では、MSDTC サービスを再起動する必要があります。この要件は、実行中の分散トランザクションに影響を与える可能性があります。

## トランザクションの使用
<a name="Appendix.SQLServer.Options.MSDTC.Using"></a>

### 分散トランザクションの使用
<a name="Appendix.SQLServer.Options.MSDTC.UsingXA"></a>

Amazon RDS for SQL Server では、オンプレミスで実行されている分散トランザクションと同じ方法で分散トランザクションを実行します。
+ .NET フレームワークの `System.Transactions` 昇格可能トランザクションを使用します。これにより、必要になるまで作成を延期することで分散トランザクションが最適化されます。

  この場合、昇格は自動的に行われるため、ユーザーが介入する必要はありません。トランザクション内にリソースマネージャーが 1 つのみ存在する場合、昇格は実行されません。暗黙的なトランザクションスコープの詳細については、Microsoft ドキュメントの「[トランザクションスコープを使用した暗黙的なトランザクションの実装](https://docs.microsoft.com/en-us/dotnet/framework/data/transactions/implementing-an-implicit-transaction-using-transaction-scope)」を参照してください。

  昇格可能なトランザクションは、次の .NET 実装でサポートされています。
  + ADO.NET 2.0 以降、`System.Data.SqlClient` では SQL Server での昇格可能トランザクションをサポートしています。詳細については、Microsoft のドキュメントの「[SQL Server と System.Transations の統合](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server)」を参照してください。
  + ODP.NET は `System.Transactions` をサポートしています。ローカルトランザクションは、Oracle Database 11g リリース 1 (バージョン11.1) 以降への `TransactionsScope` スコープで開かれた初期の接続に対して作成されます。2 番目の接続が開かれると、このトランザクションは自動的に分散トランザクションに昇格されます。ODP.NET での分散トランザクションのサポートの詳細については、Oracle ドキュメントの「[Microsoft Distributed Transaction Coordinator Integration](https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/ntmts/using-mts-with-oracledb.html)」を参照してください。
+ `BEGIN DISTRIBUTED TRANSACTION` ステートメントを使用します。詳細については、Microsoft のドキュメントの「[BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-distributed-transaction-transact-sql)」を参照してください。

### XA トランザクションの使用
<a name="MSDTC.XA"></a>

RDS for SQL Server 2017 バージョン 14.00.3223.3 以降、JDBC を使用して分散トランザクションを制御できます。`MSDTC` オプションで `Enable XA` オプション設定を`true` に設定すると、RDS では JDBC トランザクションが自動的に有効化され、`SqlJDBCXAUser` ロールが `guest` ユーザーに付与されます。これにより、JDBC を使用した分散トランザクションの実行が可能になります。コード例も含めた詳細については、Microsoft のドキュメントの「[XA トランザクションについて](https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions)」を参照してください。

### トランザクションの追跡の使用
<a name="MSDTC.Tracing"></a>

RDS では、トラブルシューティングの目的で MSDTC トランザクションの追跡を制御し、RDS DB インスタンスからこれらをダウンロードできます。トランザクションの追跡セッションは、次の RDS ストアドプロシージャを実行することで制御できます。

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action',
[@traceall='0|1'],
[@traceaborted='0|1'],
[@tracelong='0|1'];
```

以下のパラメータは必須です。
+ `trace_action` - 追跡アクション。`START`、`STOP` または `STATUS` のいずれかを設定できます。

以下のパラメータはオプションです。
+ `@traceall` - すべての分散トランザクションを追跡するには、1 に設定します。デフォルトは 0 です。
+ `@traceaborted` - キャンセルされた分散トランザクションを追跡するには、1 に設定します。デフォルトは 0 です。
+ `@tracelong` - 長時間実行される分散トランザクションを追跡するには、1 に設定します。デフォルトは 0 です。

**Example START 追跡アクション例**  
新しいトランザクション追跡セッションをスタートするには、次のステートメント例を実行します。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'START',
@traceall='0',
@traceaborted='1',
@tracelong='1';
```
一度にアクティブにできるトランザクション追跡セッションは 1 つだけです。追跡セッションがアクティブなときに新しい追跡セッションの `START` コマンドが発行されると、エラーが返され、アクティブな追跡セッションは変更されません。

**Example STOP 追跡アクション例**  
トランザクション追跡セッションを停止するには、次のステートメントを実行します。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
```
このステートメントは、アクティブなトランザクション追跡セッションを停止し、トランザクション追跡データを RDS DB インスタンスのログディレクトリに保存します。出力の初期の行には全体的な結果が含まれ、後続の行はオペレーションの詳細を示します。  
追跡セッションが正常に停止した例を次に示します。  

```
OK: Trace session has been successfully stopped.
Setting log file to: D:\rdsdbdata\MSDTC\Trace\dtctrace.log
Examining D:\rdsdbdata\MSDTC\Trace\msdtctr.mof for message formats,  8 found.
Searching for TMF files on path: (null)
Logfile D:\rdsdbdata\MSDTC\Trace\dtctrace.log:
 OS version    10.0.14393  (Currently running on 6.2.9200)
 Start Time    <timestamp>
 End Time      <timestamp>
 Timezone is   @tzres.dll,-932 (Bias is 0mins)
 BufferSize            16384 B
 Maximum File Size     10 MB
 Buffers  Written      Not set (Logger may not have been stopped).
 Logger Mode Settings (11000002) ( circular paged
 ProcessorCount         1 
Processing completed   Buffers: 1, Events: 3, EventsLost: 0 :: Format Errors: 0, Unknowns: 3
Event traces dumped to d:\rdsdbdata\Log\msdtc_<timestamp>.log
```
詳細情報を使用して、生成されたログファイル名のクエリを実行できます。RDS DB インスタンスからのログファイルのダウンロードの詳細については、「[Amazon RDS ログファイルのモニタリング](USER_LogAccess.md)」を参照してください。  
追跡セッションログは、インスタンスに 35 日間残されます。古い追跡セッションのログは自動的に削除されます。

**Example STATUS 追跡アクション例**  
トランザクション追跡セッションのステータスを追跡するには、次のステートメントを実行します。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'
```
このステートメントは、結果セットの個別の行として以下を出力します。  

```
OK
SessionStatus: <Started|Stopped>
TraceAll: <True|False>
TraceAborted: <True|False>
TraceLongLived: <True|False>
```
初期の行は、操作の全体的な結果を示します。該当する場合は `OK` または `ERROR` と詳細も表示されます。後続の行は、追跡セッションのステータスに関する詳細を示します。  
+ `SessionStatus` の値は次のいずれかを指定できます。
  + `Started`追跡セッションが実行中の場合は 。
  + `Stopped`実行中の追跡セッションがない場合は 。
+ 追跡セッションフラグは、`True` コマンドでの設定方法によって `False` または `START` のどちらかになります。

# MSDTC の無効化
<a name="Appendix.SQLServer.Options.MSDTC.Disable"></a>

MSDTC を無効にするには、`MSDTC` オプションをそのオプショングループから削除します。

## コンソール
<a name="Options.MSDTC.Disable.Console"></a>

**MSDTC オプションをそのオプショングループから削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `MSDTC` オプションが含まれているオプショングループ (前の例では `msdtc-se-2016`) を選択します。

1. [**オプションの削除**] を選択します。

1. [**オプションの削除**] で、[**削除するオプション**] として [**MSCTC**] を選択します。

1. [**すぐに適用**] で、オプションをすぐに削除する場合は [**はい**] を選択し、次のメンテナンスウィンドウで削除する場合は [**いいえ**] を選択します。

1. [**削除**] を選択します。

## CLI
<a name="Options.MSDTC.Disable.CLI"></a>

**MSDTC オプションをそのオプショングループから削除するには**
+ 以下のいずれかのコマンドを使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name msdtc-se-2016 \
      --options MSDTC \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name msdtc-se-2016 ^
      --options MSDTC ^
      --apply-immediately
  ```

# RDS for SQL Server の MSDTC のトラブルシューティング
<a name="Appendix.SQLServer.Options.MSDTC.Troubleshooting"></a>

場合によっては、クライアントコンピュータで実行されている MSDTC と RDS for SQL Server DB インスタンスで実行されている MSDTC サービスとの間の接続を確立できないことがあります。その場合は、以下のことを確認してください。
+ DB インスタンスに関連付けられているセキュリティグループのインバウンドルールが正しく設定されている。詳細については、「[Amazon RDS DB インスタンスに接続できない](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)」を参照してください。
+ クライアントコンピュータが正しく設定されている。
+ クライアントコンピュータの MSDTC ファイアウォールルールが有効になっている。

**クライアントコンピュータを設定するには**

1. [**コンポーネントサービス**] を開きます。

   または、[**サービスマネージャー**] で、[**ツール**]、[**コンポーネントサービス**] の順に選択します。

1. [**コンポーネントサービス**]、[**コンピュータ**]、[**マイコンピュータ**]、[**分散トランザクションコーディネーター**] の順に展開します。

1. [**ローカル DTC**] のコンテキスト (右クリック) メニューを開き、[**プロパティ**] を選択します。

1. [**セキュリティ**] タブを選択します。

1. 次の項目をすべて選択します。
   + **ネットワーク DTC アクセス**
   + **受信を許可する**
   + **送信を許可する**

1. 正しい認証モードが選択されていることを確認します。
   + **相互認証を必要とする** - クライアントマシンは、分散トランザクションに参加している他のノードと同じドメインに参加しているか、ドメイン間に信頼関係が設定されています。
   + **認証を必要としない** - 他のすべてのケース。

1. [**OK**] を選択して変更を保存します。

1. サービスの再起動を求めるメッセージが表示されたら、[**はい**] を選択します。

**MSDTC ファイアウォールルールを有効にするには**

1. Windows ファイアウォールを開き、[**詳細設定**] を選択します。

   または、[**サーバー マネージャー**] で、[**ツール**] を選択し、[**セキュリティが強化された Windows ファイアウォール**] を選択します。
**注記**  
オペレーティングシステムによっては、Windows ファイアウォールを Windows Defender ファイアウォールと呼ぶ場合があります。

1. 左側のペインで [**受信ルール**] を選択します。

1. 次のファイアウォールルールが有効になっていない場合は、有効にします。
   + **分散トランザクションコーディネーター (RPC)**
   + **分散トランザクションコーディネーター (RPC)-EPMAP**
   + **分散トランザクションコーディネーター (TCP-In)**

1. Windows ファイアウォールを閉じます。

# RDS for SQL Server を使用した Microsoft SQL Server リソースガバナー
<a name="Appendix.SQLServer.Options.ResourceGovernor"></a>

リソースガバナーは、インスタンスリソースを正確に制御できる SQL Server Enterprise Edition の機能です。これにより、ワークロードが CPU、メモリ、物理 I/O リソースを使用する方法に特定の制限を設定できます。リソースガバナーを使用すると、次のことができます。
+ さまざまなワークロードがインスタンスリソースを共有する方法を管理することで、マルチテナント環境でのリソースの独占を防ぐ
+ ユーザーやアプリケーションごとに特定のリソース制限と優先順位を設定することで、予測可能なパフォーマンスを実現する

既存の RDS for SQL Server DB インスタンスまたは新しい RDS for SQL Server DB インスタンスでリソースガバナーを有効にできます。

リソースガバナーは、次の 3 つの基本概念を使用します。
+ **リソースプール** - インスタンスの物理リソース (CPU、メモリ、I/O) を管理するコンテナ。2 つの組み込みプール (内部プールとデフォルトプール) を取得し、追加のカスタムプールを作成できます。
+ **ワークロードグループ** - 同様の特性を持つデータベースセッションのコンテナ。すべてのワークロードグループはリソースプールに属します。2 つの組み込みワークロードグループ (内部およびデフォルト) を取得し、追加のカスタムワークロードグループを作成できます。
+ **分類** - ユーザー名、アプリケーション名、データベース名、またはホスト名に基づいて、受信セッションを処理するワークロードグループを決定するプロセス。

SQL Server のリソースガバナー機能の詳細については、Microsoft ドキュメントの「[リソースガバナー](https://learn.microsoft.com/en-us/sql/relational-databases/resource-governor/resource-governor?view=sql-server-ver16)」を参照してください。

**Contents**
+ [サポート対象のバージョンとリージョン](#ResourceGovernor.SupportedVersions)
+ [制限と推奨事項](#ResourceGovernor.Limitations)
+ [RDS for SQL Server インスタンスの Microsoft SQL Server リソースガバナーを有効にする](ResourceGovernor.Enabling.md)
  + [`RESOURCE_GOVERNOR` のオプショングループの作成](ResourceGovernor.Enabling.md#ResourceGovernor.OptionGroup)
  + [`RESOURCE_GOVERNOR` オプションのオプショングループへの追加](ResourceGovernor.Enabling.md#ResourceGovernor.Add)
  + [オプショングループを DB インスタンスに関連付ける](ResourceGovernor.Enabling.md#ResourceGovernor.Apply)
+ [RDS for SQL Server インスタンスでの Microsoft SQL Server リソースガバナーの使用](ResourceGovernor.Using.md)
  + [リソースプールの管理](ResourceGovernor.Using.md#ResourceGovernor.ManageResourcePool)
    + [リソースプールの作成](ResourceGovernor.Using.md#ResourceGovernor.CreateResourcePool)
    + [リソースプールの変更](ResourceGovernor.Using.md#ResourceGovernor.AlterResourcePool)
    + [リソースプールの削除](ResourceGovernor.Using.md#ResourceGovernor.DropResourcePool)
  + [ワークロードグループの管理](ResourceGovernor.Using.md#ResourceGovernor.ManageWorkloadGroups)
    + [ワークロードグループを作成する](ResourceGovernor.Using.md#ResourceGovernor.CreateWorkloadGroup)
    + [ワークロードグループの変更](ResourceGovernor.Using.md#ResourceGovernor.AlterWorkloadGroup)
    + [ワークロードグループの削除](ResourceGovernor.Using.md#ResourceGovernor.DropWorkloadGroup)
  + [分類子関数を作成して登録する](ResourceGovernor.Using.md#ResourceGovernor.ClassifierFunction)
  + [分類子関数の削除](ResourceGovernor.Using.md#ResourceGovernor.DropClassifier)
  + [分類子関数の登録解除](ResourceGovernor.Using.md#ResourceGovernor.DeregisterClassifier)
  + [統計をリセットする](ResourceGovernor.Using.md#ResourceGovernor.ResetStats)
  + [リソースガバナーの設定変更](ResourceGovernor.Using.md#ResourceGovernor.ConfigChanges)
  + [TempDB をリソースプールにバインドする](ResourceGovernor.Using.md#ResourceGovernor.BindTempDB)
  + [リソースプールから TempDB をバインド解除する](ResourceGovernor.Using.md#ResourceGovernor.UnbindTempDB)
  + [リソースガバナーのクリーンアップ](ResourceGovernor.Using.md#ResourceGovernor.Cleanup)
+ [マルチ AZ 配置に関する考慮事項](#ResourceGovernor.Considerations)
+ [リードレプリカに関する考慮事項](#ResourceGovernor.ReadReplica)
+ [RDS for SQL Server インスタンスのシステムビューを使用して Microsoft SQL Server リソースガバナーをモニタリングする](ResourceGovernor.Monitoring.md)
  + [リソースプールランタイム統計](ResourceGovernor.Monitoring.md#ResourceGovernor.ResourcePoolStats)
+ [RDS for SQL Server インスタンスの Microsoft SQL Server リソースガバナーを無効にする](ResourceGovernor.Disabling.md)
+ [RDS for SQL Server でリソースガバナーを設定するためのベストプラクティス](ResourceGovernor.BestPractices.md)

## サポート対象のバージョンとリージョン
<a name="ResourceGovernor.SupportedVersions"></a>

Amazon RDS は、RDS for SQL Server が利用可能なすべての AWS リージョンで、次の SQL Server バージョンとエディションのリソースガバナーをサポートしています。
+ SQL Server 2022: Developer および Enterprise Edition
+ SQL Server 2019 Enterprise Edition
+ SQL Server 2017 Enterprise Edition
+ SQL Server 2016 Enterprise Edition

## 制限と推奨事項
<a name="ResourceGovernor.Limitations"></a>

リソースガバナーには、次の制限と推奨事項が適用されます。
+ エディションとサービスの制限:
  + SQL Server Enterprise Edition でのみ使用できます。
  + リソース管理は SQL Server データベースエンジンに限定されます。Analysis Services、Integration Services、Reporting Services のリソースガバナーはサポートされていません。
+ 設定の制限:
  + すべての設定で Amazon RDS ストアドプロシージャを使用する必要があります。
  + ネイティブ DDL ステートメントと SQL Server Management Studio GUI 設定はサポートされていません。
+ リソースプールパラメータ
  + `rds_` で始まるプール名はサポートされていません。
  + 内部リソースプールとデフォルトリソースプールの変更は許可されません。
  + ユーザー定義のリソースプールでは、次のリソースプールパラメータはサポートされていません。
    + `MIN_MEMORY_PERCENT`
    + `MIN_CPU_PERCENT`
    + `MIN_IOPS_PER_VOLUME`
    + `AFFINITY`
+ ワークロードグループのパラメータ:
  + `rds_` で始まるワークロードグループ名はサポートされていません。
  + 内部ワークロードグループの変更は許可されません。
  + デフォルトのワークロードグループの場合:
    + `REQUEST_MAX_MEMORY_GRANT_PERCENT` パラメータは変更できません。
    + デフォルトのワークロードグループの場合、`REQUEST_MAX_MEMORY_GRANT_PERCENT` は 1～70 である必要があります。
    + 他のすべてのパラメータはロックされており、変更できません。
  + ユーザー定義のワークロードグループでは、すべてのパラメータを変更できます。
+ 分類子関数の制限:
  + 分類子関数は、指定された条件 (ユーザー名、データベース、ホスト、またはアプリケーション名) に基づいて接続をカスタムワークロードグループにルーティングします。
  + それぞれのルーティング条件を持つユーザー定義のワークロードグループを最大 2 つサポートします。
  + 各グループ内で基準を `AND` 条件と組み合わせます。
  + ワークロードグループごとに少なくとも 1 つのルーティング基準が必要です。
  + 上記の分類方法のみがサポートされています。
  + 関数名の先頭には、`rg_classifier_` を付ける必要があります。
  + 条件が一致しない場合のデフォルトのグループ割り当て。

# RDS for SQL Server インスタンスの Microsoft SQL Server リソースガバナーを有効にする
<a name="ResourceGovernor.Enabling"></a>

RDS for SQL Server DB インスタンスに `RESOURCE_GOVERNOR` オプションを追加して、リソースガバナーを有効にします。以下のプロセスを使用します。

1. 新しいオプショングループを作成するか、既存のオプショングループを選択します。

1. オプショングループに [`RESOURCE_GOVERNOR`] オプションを追加します。

1. オプショングループを DB インスタンスに関連付けます。

**注記**  
オプショングループを使用してリソースガバナーを有効にする場合、再起動は必要ありません。

## `RESOURCE_GOVERNOR` のオプショングループの作成
<a name="ResourceGovernor.OptionGroup"></a>

リソースガバナーを有効にするには、使用する DB インスタンスの SQL Server のエディションとバージョンに対応するオプショングループを作成または変更します。この手順を完了するには、AWS マネジメントコンソール または AWS CLI を使用してください。

### コンソール
<a name="ResourceGovernor.OptionGroup.Console"></a>

次の手順を使用して、SQL Server Enterprise Edition 2022 のオプショングループを作成します。

**オプショングループを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. **[Create group]** (グループの作成) を選択します。

1. [**Create subnet group**(オプショングループの作成)] ウィンドウで以下を行います。

   1. [**名前**] に、AWS アカウント内で一意のオプショングループ名 (**resource-governor-ee-2022** など) を入力します。名前には、英字、数字、ハイフンのみを使用できます。

   1. [**説明**] に、オプショングループの簡単な説明 (**RESOURCE\$1GOVERNOR option group for SQL Server EE 2022** など) を入力します。この説明は表示用に使用されます。

   1. **[エンジン]** で **[sqlserver-ee]** を選択します。

   1. [**メジャーエンジンのバージョン**] で、[**16.00**] を選択します。

1. **[作成]** を選択します。

### CLI
<a name="ResourceGovernor.OptionGroup.CLI"></a>

次の手順では、SQL Server Enterprise Edition 2022 のオプショングループを作成します。

**オプショングループを作成するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-option-group \
      --option-group-name resource-governor-ee-2022 \
      --engine-name sqlserver-ee \
      --major-engine-version 16.00 \
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

  Windows の場合:

  ```
  aws rds create-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --engine-name sqlserver-ee ^
      --major-engine-version 16.00 ^
      --option-group-description "RESOURCE_GOVERNOR option group for SQL Server EE 2022"
  ```

## `RESOURCE_GOVERNOR` オプションのオプショングループへの追加
<a name="ResourceGovernor.Add"></a>

次に、AWS マネジメントコンソール または AWS CLI を使用して `RESOURCE_GOVERNOR` オプションをオプショングループに追加します。

### コンソール
<a name="ResourceGovernor.Add.Console"></a>

**RESOURCE\$1GOVERNOR オプションを追加するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. 作成したオプショングループ (この例では **resource-governor-ee-2022**) を選択します。

1. **[オプションを追加]** を選択します。

1. **[オプションの詳細]** で、**[オプション名]** として **[RESOURCE\$1GOVERNOR]** を選択します。

1. **[スケジュール]** で、オプションをすぐに追加するか、次のメンテナンスウィンドウで追加するかを選択します。

1. **[オプションを追加]** を選択します。

### CLI
<a name="ResourceGovernor.Add.CLI"></a>

**`RESOURCE_GOVERNOR` オプションを追加するには**
+ オプショングループに [`RESOURCE_GOVERNOR`] オプションを追加します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-option-to-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options "OptionName=RESOURCE_GOVERNOR" \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds add-option-to-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options "OptionName=RESOURCE_GOVERNOR" ^
      --apply-immediately
  ```

## オプショングループを DB インスタンスに関連付ける
<a name="ResourceGovernor.Apply"></a>

`RESOURCE_GOVERNOR` オプショングループを DB インスタンスに関連付けるには、AWS マネジメントコンソール または AWS CLI を使用します。

### コンソール
<a name="ResourceGovernor.Apply.Console"></a>

リソースガバナーの有効化を完了するには、`RESOURCE_GOVERNOR` オプショングループを新規または既存の DB インスタンスに関連付けます。
+ 新しい DB インスタンスの場合は、インスタンスを起動するときにそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ 既存の DB インスタンスの場合は、インスタンスを変更することでそれらを関連付けます。詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

### CLI
<a name="ResourceGovernor.Apply.CLI"></a>

`RESOURCE_GOVERNOR` オプショングループを新規または既存の DB インスタンスに関連付けることができます。

**`RESOURCE_GOVERNOR` オプショングループを使用してインスタンスを作成するには**
+ オプショングループの作成時に使用したのと同じ DB エンジンのタイプとメジャーバージョンを指定します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds create-db-instance \
      --db-instance-identifier mytestsqlserverresourcegovernorinstance \
      --db-instance-class db.m5.2xlarge \
      --engine sqlserver-ee \
      --engine-version 16.00 \
      --license-model license-included \
      --allocated-storage 100 \
      --master-username admin \
      --master-user-password password \
      --storage-type gp2 \
      --option-group-name resource-governor-ee-2022
  ```

  Windows の場合:

  ```
  aws rds create-db-instance ^
      --db-instance-identifier mytestsqlserverresourcegovernorinstance ^
      --db-instance-class db.m5.2xlarge ^
      --engine sqlserver-ee ^
      --engine-version 16.00 ^
      --license-model license-included ^
      --allocated-storage 100 ^
      --master-username admin ^
      --master-user-password password ^
      --storage-type gp2 ^
      --option-group-name resource-governor-ee-2022
  ```

**インスタンスを変更して `RESOURCE_GOVERNOR` オプショングループを関連付けるには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds modify-db-instance \
      --db-instance-identifier mytestinstance \
      --option-group-name resource-governor-ee-2022 \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds modify-db-instance ^
      --db-instance-identifier mytestinstance ^
      --option-group-name resource-governor-ee-2022 ^
      --apply-immediately
  ```

# RDS for SQL Server インスタンスでの Microsoft SQL Server リソースガバナーの使用
<a name="ResourceGovernor.Using"></a>

リソースガバナーオプションをオプショングループに追加した後も、リソースガバナーはデータベースエンジンレベルでまだアクティブではありません。リソースガバナーを完全に有効にするには、RDS for SQL Server ストアドプロシージャを使用してリソースガバナーオブジェクトを有効にし、必要なリソースガバナーオブジェクトを作成する必要があります。詳細については、「[SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)」を参照してください。

まず、SQL Server データベースに接続し、適切な RDS for SQL Server ストアドプロシージャを呼び出して設定を完了します。データベースに接続する手順については、「[SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)」を参照してください。

各ストアドプロシージャを呼び出す方法については、以下のトピックを参照してください。

**Topics**
+ [リソースプールの管理](#ResourceGovernor.ManageResourcePool)
+ [ワークロードグループの管理](#ResourceGovernor.ManageWorkloadGroups)
+ [分類子関数を作成して登録する](#ResourceGovernor.ClassifierFunction)
+ [分類子関数の削除](#ResourceGovernor.DropClassifier)
+ [分類子関数の登録解除](#ResourceGovernor.DeregisterClassifier)
+ [統計をリセットする](#ResourceGovernor.ResetStats)
+ [リソースガバナーの設定変更](#ResourceGovernor.ConfigChanges)
+ [TempDB をリソースプールにバインドする](#ResourceGovernor.BindTempDB)
+ [リソースプールから TempDB をバインド解除する](#ResourceGovernor.UnbindTempDB)
+ [リソースガバナーのクリーンアップ](#ResourceGovernor.Cleanup)

## リソースプールの管理
<a name="ResourceGovernor.ManageResourcePool"></a>

### リソースプールの作成
<a name="ResourceGovernor.CreateResourcePool"></a>

オプショングループでリソースガバナーを有効にすると、`rds_create_resource_pool` を使用してカスタムリソースプールを作成できます。これらのプールを使用すると、CPU、メモリ、IOPS の特定の割合をさまざまなワークロードに割り当てることができます。

**Usage**

```
USE [msdb]
EXEC dbo.rds_create_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value
```

以下のパラメータは必須です。
+ `@group_name` - 既存のユーザー定義のワークロードグループの名前です。
+ `@pool_name` - リソースプールのユーザー定義の名前です。*pool\$1name* は英数字で、最大 128 文字で、データベースエンジンインスタンス内で一意である必要があり、データベース識別子のルールに準拠する必要があります。

以下のパラメータはオプションです。
+ `@MAX_CPU_PERCENT` - CPU 競合がある場合にリソースプール内のすべてのリクエストが受け取る最大平均 CPU 帯域幅を指定します。*値*は、デフォルト設定の 100 の整数です。*値*の許容範囲は 1～100 です。
+ `@CAP_CPU_PERCENT` - リソースプール内のすべてのリクエストが受信する CPU 帯域幅のハードキャップを指定します。最大 CPU 帯域幅レベルを指定された値と同じに制限します。*値*は、デフォルト設定の 100 の整数です。*値*の許容範囲は 1～100 です。
+ `@MAX_MEMORY_PERCENT` - このリソースプールのリクエストで使用できるクエリワークスペースメモリの最大量を指定します。*値*は、デフォルト設定の 100 の整数です。*値*の許容範囲は 1～100 です。
+ `@MAX_IOPS_PER_VOLUME` - リソースプールを許可するディスクボリュームあたりの 1 秒あたりの最大 I/O オペレーション (IOPS) を指定します。*値*の許容範囲は 0～2^31-1 (2,147,483,647) です。プールの IOPS 制限を削除するには、0 を指定します。デフォルトは 0 です。

**例**

すべてのデフォルト値を使用してリソースプールを作成する例:

```
--This creates resource pool 'SalesPool' with all default values
USE [msdb]
EXEC rds_create_resource_pool @pool_name = 'SalesPool';
     
--Apply changes
USE [msdb]
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
     
--Validate configuration
select * from sys.resource_governor_resource_pools
```

異なるパラメータを指定してリソースプールを作成する例:

```
--creates resource pool
USE [msdb]
EXEC dbo.rds_create_resource_pool    
@pool_name='analytics',
@MAX_CPU_PERCENT = 30,
@CAP_CPU_PERCENT = 40,
@MAX_MEMORY_PERCENT = 20;
            
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
    
--Validate configuration
select * from sys.resource_governor_resource_pools
```

### リソースプールの変更
<a name="ResourceGovernor.AlterResourcePool"></a>

**Usage**

```
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name=value,
    @MAX_CPU_PERCENT=value,
    @CAP_CPU_PERCENT=value,
    @MAX_MEMORY_PERCENT=value,
    @MAX_IOPS_PER_VOLUME=value;
```

以下のパラメータは必須です。
+ `@pool_name` - 既存のユーザー定義リソースプールの名前です。Amazon RDS SQL Server では、デフォルトのリソースプールの変更は許可されていません。

オプションのパラメータを少なくとも 1 つ指定する必要があります。
+ `@MAX_CPU_PERCENT` - CPU 競合がある場合にリソースプール内のすべてのリクエストが受け取る最大平均 CPU 帯域幅を指定します。*値*は、デフォルト設定の 100 の整数です。*値*の許容範囲は 1～100 です。
+ `@CAP_CPU_PERCENT` - リソースプール内のすべてのリクエストが受信する CPU 帯域幅のハードキャップを指定します。最大 CPU 帯域幅レベルを指定された値と同じに制限します。*値*は、デフォルト設定の 100 の整数です。*値*の許容範囲は 1～100 です。
+ `@MAX_MEMORY_PERCENT` - このリソースプールのリクエストで使用できるクエリワークスペースメモリの最大量を指定します。*値*は、デフォルト設定の 100 の整数です。*値*の許容範囲は 1～100 です。
+ `@MAX_IOPS_PER_VOLUME` - リソースプールを許可するディスクボリュームあたりの 1 秒あたりの最大 I/O オペレーション (IOPS) を指定します。*値*の許容範囲は 0～2^31-1 (2,147,483,647) です。プールの IOPS 制限を削除するには、0 を指定します。デフォルトは 0 です。

**例**

```
--This alters resource pool
USE [msdb]
EXEC dbo.rds_alter_resource_pool    
    @pool_name='analytics',
    @MAX_CPU_PERCENT = 10,
    @CAP_CPU_PERCENT = 20,
    @MAX_MEMORY_PERCENT = 50;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration.
select * from sys.resource_governor_resource_pools
```

### リソースプールの削除
<a name="ResourceGovernor.DropResourcePool"></a>

**Usage**

```
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name=value;
```

以下のパラメータは必須です。
+ `@pool_name` - 既存のユーザー定義リソースプールの名前です。

**注記**  
SQL Server では、内部リソースプールまたはデフォルトリソースプールの削除は許可されていません。

**例**

```
--This drops resource pool
USE [msdb]
EXEC dbo.rds_drop_resource_pool    
@pool_name='analytics'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_resource_pools
```

## ワークロードグループの管理
<a name="ResourceGovernor.ManageWorkloadGroups"></a>

`rds_create_workload_group` および `rds_alter_workload_group` で作成および管理されるワークロードグループを使用すると、クエリグループの重要度レベル、メモリ許可、およびその他のパラメータを設定できます。

### ワークロードグループを作成する
<a name="ResourceGovernor.CreateWorkloadGroup"></a>

**Usage**

```
USE [msdb]
EXEC dbo.rds_create_workload_group 
@group_name = value, 
@IMPORTANCE ={ LOW | MEDIUM | HIGH }, 
@REQUEST_MAX_MEMORY_GRANT_PERCENT =value, 
@REQUEST_MAX_CPU_TIME_SEC = value , 
@REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value, 
@MAX_DOP = value, 
@GROUP_MAX_REQUESTS = value, 
@pool_name = value
```

以下のパラメータは必須です。
+ `@pool_name` - 既存のユーザー定義リソースプールの名前です。
+ `@group_name` - 既存のユーザー定義のワークロードグループの名前です。

以下のパラメータはオプションです。
+ `@IMPORTANCE` - ワークロードグループ内のリクエストの相対的な重要度を指定します。デフォルト値は `MEDIUM` です。
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT` - 1 つのリクエストがプールから取得できるクエリワークスペースメモリの最大量を指定します。*値*は、`MAX_MEMORY_PERCENT` で定義されたリソースプールサイズのパーセンテージです。デフォルト値は 25 です。
+ `@REQUEST_MAX_CPU_TIME_SEC` - バッチリクエストで使用できる CPU の最大時間を秒単位で指定します。*値*は 0 または正の整数である必要があります。*値*のデフォルト設定は 0 です。つまり、無制限です。
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC` - クエリがクエリワークスペースメモリからのメモリ許可が利用可能になるまで待機できる最大時間を秒単位で指定します。*値*は 0 または正の整数である必要があります。*値*のデフォルト設定である 0 では、クエリコストに基づく内部計算を使用して最大時間を決定します。
+ `@MAX_DOP` - 並列クエリ実行の最大並列度 (`MAXDOP`) を指定します。*値*の許容範囲は 0～64 です。*値*のデフォルト設定である 0 では、グローバル設定が使用されます。
+ `@GROUP_MAX_REQUESTS` = ワークロードグループで実行できる同時リクエストの最大数を指定します。*値*は 0 または正の整数である必要があります。*値*のデフォルト設定は 0 で、無制限のリクエストを許可します。
+ `@pool_name` = ワークロードグループを *pool\$1name* で識別されるユーザー定義のリソースプール、または `default` リソースプールに関連付けます。*pool\$1name* が指定されていない場合、ワークロードグループは組み込み `default` プールに関連付けられます。

**例**

```
--This creates workload group named 'analytics'
USE msdb;
EXEC dbo.rds_create_workload_group 
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 25, 
    @REQUEST_MAX_CPU_TIME_SEC = 0, 
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 0, 
    @MAX_DOP = 0, 
    @GROUP_MAX_REQUESTS = 0, 
    @pool_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
  
--Validate configuration
select * from sys.resource_governor_workload_groups
```

### ワークロードグループの変更
<a name="ResourceGovernor.AlterWorkloadGroup"></a>

**Usage**

```
EXEC msdb.dbo.rds_alter_workload_group
    @group_name = value,
    @IMPORTANCE = 'LOW|MEDIUM|HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = value,
    @REQUEST_MAX_CPU_TIME_SEC = value,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value,
    @MAX_DOP = value,
    @GROUP_MAX_REQUESTS = value,
    @pool_name = value
```

以下のパラメータは必須です。
+ `@group_name` - デフォルトまたは既存のユーザー定義のワークロードグループの名前です。

**注記**  
デフォルトのワークロードグループの `REQUEST_MAX_MEMORY_GRANT_PERCENT` パラメータのみの変更がサポートされています。デフォルトのワークロードグループの場合、`REQUEST_MAX_MEMORY_GRANT_PERCENT` は 1～70 である必要があります。デフォルトのワークロードグループでは、他のパラメータを変更することはできません。すべてのパラメータは、ユーザー定義のワークロードグループで変更できます。

以下のパラメータはオプションです。
+ `@IMPORTANCE` - ワークロードグループ内のリクエストの相対的な重要度を指定します。デフォルト値は MEDIUM です。
+ `@REQUEST_MAX_MEMORY_GRANT_PERCENT` - 1 つのリクエストがプールから取得できるクエリワークスペースメモリの最大量を指定します。*値*は、`MAX_MEMORY_PERCENT` で定義されたリソースプールサイズのパーセンテージです。デフォルト値は 25 です。Amazon RDS では、`REQUEST_MAX_MEMORY_GRANT_PERCENT` は 1～70 である必要があります。
+ `@REQUEST_MAX_CPU_TIME_SEC` - バッチリクエストで使用できる CPU の最大時間を秒単位で指定します。*値*は 0 または正の整数である必要があります。*値*のデフォルト設定は 0 です。つまり、無制限です。
+ `@REQUEST_MEMORY_GRANT_TIMEOUT_SEC` - クエリがクエリワークスペースメモリからのメモリ許可が利用可能になるまで待機できる最大時間を秒単位で指定します。*値*は 0 または正の整数である必要があります。*値*のデフォルト設定である 0 では、クエリコストに基づく内部計算を使用して最大時間を決定します。
+ `@MAX_DOP` - 並列クエリ実行の最大並列度 (MAXDOP) を指定します。*値*の許容範囲は 0～64 です。*値*のデフォルト設定である 0 では、グローバル設定が使用されます。
+ `@GROUP_MAX_REQUESTS` - ワークロードグループで実行できる同時リクエストの最大数を指定します。*値*は 0 または正の整数である必要があります。*値*のデフォルト設定は 0 で、無制限のリクエストを許可します。
+ `@pool_name` - ワークロードグループを *pool\$1name* で識別されるユーザー定義のリソースプールに関連付けます。

**例**

デフォルトのワークロードグループ変更 REQUEST\$1MAX\$1MEMORY\$1GRANT\$1PERCENT を変更する例:

```
--Modify default workload group (set memory grant cap to 10%)
USE msdb
EXEC dbo.rds_alter_workload_group    
    @group_name = 'default',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT=10;
    
--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
SELECT * FROM sys.resource_governor_workload_groups WHERE name='default';
```

デフォルト以外のワークロードグループを変更する例:

```
EXEC msdb.dbo.rds_alter_workload_group    
    @group_name = 'analytics',
    @IMPORTANCE = 'HIGH',
    @REQUEST_MAX_MEMORY_GRANT_PERCENT = 30,
    @REQUEST_MAX_CPU_TIME_SEC = 3600,
    @REQUEST_MEMORY_GRANT_TIMEOUT_SEC = 60,
    @MAX_DOP = 4,
    @GROUP_MAX_REQUESTS = 100;

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

デフォルト以外のワークロードグループを別のリソースプールに移動する例:

```
EXEC msdb.dbo.rds_alter_workload_group    
@group_name = 'analytics',
@pool_name='abc'

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

### ワークロードグループの削除
<a name="ResourceGovernor.DropWorkloadGroup"></a>

**Usage**

```
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = value
```

以下のパラメータは必須です。
+ `@group_name` - 既存のユーザー定義のワークロードグループの名前です。

**例**

```
--Drops a Workload Group:
EXEC msdb.dbo.rds_drop_workload_group    
@group_name = 'analytics';

--Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;

--Validate configuration
select * from sys.resource_governor_workload_groups
```

## 分類子関数を作成して登録する
<a name="ResourceGovernor.ClassifierFunction"></a>

この手順では、指定された条件 (ユーザー名、データベース、ホスト、またはアプリケーション名) に基づいてカスタムワークロードグループへの接続をルーティングするリソースガバナーの分類子関数をマスターデータベースに作成します。リソースガバナーが有効で、分類子関数がリソースガバナー設定で指定されている場合、関数の出力によって新しいセッションに使用されるワークロードグループが決まります。分類子関数がない場合、すべてのセッションが `default` グループに分類されます。

**の機能**
+ それぞれのルーティング条件で最大 2 つのワークロードグループをサポートします。
+ 各グループ内で基準を `AND` 条件と組み合わせます。
+ ワークロードグループごとに少なくとも 1 つのルーティング基準が必要です。
+ 関数名の先頭には、`rg_classifier_` を付ける必要があります。
+ 条件が一致しない場合のデフォルトのグループ割り当て。

分類子関数には、次の特性と動作があります。
+ 関数はサーバースコープ (マスターデータベース) で定義されます。
+ 関数はスキーマバインディングを使用して定義されます。
+ この関数は、接続プーリングが有効になっている場合でも、新しいセッションごとに評価されます。
+ 関数は、セッションのワークロードグループコンテキストを返します。セッションは、セッションの存続期間中、分類子によって返されるワークロードグループに割り当てられます。
+ 関数が NULL、デフォルト、または存在しないワークロードグループの名前を返す場合、セッションにはデフォルトのワークロードグループコンテキストが与えられます。何らかの理由で関数が失敗した場合も、セッションにはデフォルトのコンテキストが与えられます。
+ 複数の分類子関数を作成できます。ただし、SQL Server では、一度に登録できる分類子関数は 1 つだけです。
+ 分類子名を NULL に設定する登録解除手順 (`EXEC dbo.msdb.rds_alter_resource_governor_configuration @deregister_function = 1;`) を使用して分類子ステータスが削除されるか、(`EXEC dbo.msdb.rds_alter_resource_governor_configuration @classifier_function = <function_name>;`) を使用して別の分類子関数が登録されない限り、分類子関数を削除することはできません。
+ 分類子関数がない場合、すべてのセッションがデフォルトグループに分類されます。
+ 分類子関数は、リソースガバナー設定で参照されている間は変更できません。ただし、別の分類子関数を使用するように設定を変更することはできます。分類子を変更する場合は、分類子関数のペアの作成を検討してください。例えば、`rg_classifier_a` と `rg_classifier_b` を作成できます。

**Usage**

```
EXEC msdb.dbo.rds_create_classifier_function 
@function_name = value,
@workload_group1 = value, 
@user_name1 = value,
@db_name1 = value,
@host_name1 = value, 
@app_name1 = value, 
@workload_group2 = value,
@user_name2 = value,
@db_name2 = value,
@host_name2 = value,
@app_name2 = value
```

以下のパラメータは必須です。
+ `@function_name` - 分類子関数の名前。`rg_classifier_` で始まる必要があります
+ `@workload_group1` - 最初のワークロードグループの名前

以下のパラメータはオプションです。

(グループ 1 には、これらの基準の少なくとも 1 つを指定する必要があります)
+ `@user_name1` - グループ 1 のログイン名
+ `@db_name1` - グループ 1 のデータベース名
+ `@host_name1` - グループ 1 のホスト名
+ `@app_name1` - グループ 1 のアプリケーション名

(グループ 2 が指定されている場合、少なくとも 1 つの条件を指定する必要があります)
+ `@workload_group2` - 2 番目のワークロードグループの名前
+ `@user_name2` - グループ 2 のログイン名
+ `@db_name2` - グループ 2 のデータベース名
+ `@host_name2` - グループ 2 のホスト名
+ `@app_name2` - グループ 2 のアプリケーション名

**注記**  
システムアカウント、データベース、アプリケーション、ホストは制限されています。

**例**

1 つのワークロードグループの基本的な例:

```
/*Create a classifier to route all requests from 'PowerBI' app to workload group 
'reporting_group'*/

EXEC msdb.dbo.rds_create_classifier_function
@function_name = 'rg_classifier_a',
@workload_group1 = 'reporting_group',
@app_name1 = 'PowerBI';

--Register the classifier
EXEC msdb.dbo.rds_alter_resource_governor_configuration
@classifier_function = 'rg_classifier_a';

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration

/*Query sys.resource_governor_configuration to validate that resource governor is enabled and is using the classifier function we created and registered*/

use master
go
SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name,
       OBJECT_NAME(classifier_function_id) AS classifier_object_name,
       is_enabled
FROM sys.resource_governor_configuration;
```

## 分類子関数の削除
<a name="ResourceGovernor.DropClassifier"></a>

**Usage**

```
USE [msdb]
EXEC dbo.rds_drop_classifier_function
@function_name = value;
```

以下のパラメータは必須です。
+ `@function_name` - 既存のユーザー定義分類子関数の名前です。

**例**

```
EXEC msdb.dbo.rds_drop_classifier_function
@function_name = 'rg_classifier_b';
```

## 分類子関数の登録解除
<a name="ResourceGovernor.DeregisterClassifier"></a>

分類子関数の登録を解除するには、この手順を使用します。関数の登録が解除されると、新しいセッションは自動的にデフォルトのワークロードグループに割り当てられます。

**Usage**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration    
@deregister_function = 1;
```

登録解除には、次のパラメータが必要です。
+ `@deregister_function` は 1 でなければなりません。

**例**

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration 
    @deregister_function = 1;
GO

-- Apply changes
EXEC msdb.dbo.rds_alter_resource_governor_configuration;
```

## 統計をリセットする
<a name="ResourceGovernor.ResetStats"></a>

リソースガバナー統計は、前回のサーバー再起動以降に累積されます。特定の時間から統計を収集する必要がある場合は、次の Amazon RDS ストアドプロシージャを使用して統計をリセットできます。

**Usage**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

統計をリセットするには、次のパラメータが必要です。
+ `@reset_statistics` は 1 でなければなりません。

## リソースガバナーの設定変更
<a name="ResourceGovernor.ConfigChanges"></a>

リソースガバナーが有効になっていない場合、`rds_alter_resource_governor_configuration` はリソースガバナーを有効にします。リソースガバナーを有効にすると、次の結果が得られます。
+ 分類子関数がある場合は、新しいセッションに対して実行され、ワークロードグループに割り当てられます。
+ リソースガバナー設定で指定されたリソース制限が優先され、適用されます。
+ リソースガバナー設定で指定されたリソース制限が優先され、適用されます。
+ リソースガバナーを有効にする前に存在していたリクエストは、リソースガバナーが有効になっているときに行われた設定変更の影響を受ける可能性があります。
+ リソースガバナーを有効にする前からの既存のリクエストは、リソースガバナーが有効になっているときに行われた設定変更の影響を受ける可能性があります。
+ RDS for SQL Server で、リソースガバナー設定の変更を有効にするには、`EXEC msdb.dbo.rds_alter_resource_governor_configuration` を実行する必要があります。

**Usage**

```
USE [msdb]
EXEC dbo.rds_alter_resource_governor_configuration
```

## TempDB をリソースプールにバインドする
<a name="ResourceGovernor.BindTempDB"></a>

Amazon RDS SQL Server バージョン 2019 以降では、`rds_bind_tempdb_metadata_to_resource_pool` を使用して、tempdb メモリ最適化メタデータを特定のリソースプールにバインドできます。

**注記**  
tempdb メタデータをリソースプールにバインドする前に、メモリ最適化 tempdb メタデータ機能を有効にする必要があります。Amazon RDS でこの機能を有効にするには、静的パラメータ `tempdb metadata memory-optimized` を使用します。

Amazon RDS で静的パラメータを有効にし、パラメータを有効にするためにフェイルオーバーなしで再起動を実行します。

```
aws rds modify-db-parameter-group \
    --db-parameter-group-name test-sqlserver-ee-2022 \
    --parameters "ParameterName='tempdb metadata memory-optimized',ParameterValue=True,ApplyMethod=pending-reboot"
```

**Usage**

```
USE [msdb]
EXEC dbo.rds_bind_tempdb_metadata_to_resource_pool  
@pool_name=value;
```

以下のパラメータは必須です。
+ `@pool_name` - 既存のユーザー定義リソースプールの名前です。

**注記**  
この変更では、メモリ最適化 TempDB メタデータ機能が既に有効になっている場合でも、フェイルオーバーなしで SQL サービスを再起動する必要があります。

## リソースプールから TempDB をバインド解除する
<a name="ResourceGovernor.UnbindTempDB"></a>

tempdb メモリ最適化メタデータをリソースプールからバインド解除します。

**注記**  
この変更を有効にするには、フェイルオーバーなしで SQL サービスを再起動する必要もあります

**Usage**

```
USE [msdb]
EXEC dbo.rds_unbind_tempdb_metadata_from_resource_pool
```

## リソースガバナーのクリーンアップ
<a name="ResourceGovernor.Cleanup"></a>

この手順では、オプショングループからリソースガバナーオプションを削除した後、関連するすべてのオブジェクトをクリーンアップします。これにより、リソースガバナーを無効にし、デフォルトのワークロードグループをデフォルト設定に戻し、カスタムワークロードグループ、リソースプール、分類子関数を削除します。

**主な特徴**:
+ デフォルトのワークロードグループをデフォルト設定に戻す
+ リソースガバナーを無効にする
+ カスタムワークロードグループを削除する
+ カスタムリソースプールを削除する
+ 分類子関数を削除する
+ 有効になっている場合、tempdb リソースプールバインディングを削除する

**重要**  
このクリーンアップは、ワークロードグループにアクティブなセッションがある場合にエラーになる可能性があります。ビジネス要件に従って、アクティブなセッションが終了するのを待つか、アクティブなセッションを終了します。これをメンテナンスウィンドウ中に実行することをお勧めします。  
このクリーンアップは、リソースプールが tempdb にバインドされ、フェイルオーバーなしで再起動されていない場合にエラーが発生する可能性があります。リソースプールを tempdb にバインドするか、以前に tempdb からリソースプールをバインド解除した場合は、フェイルオーバーなしで再起動を実行して変更を有効にします。これをメンテナンスウィンドウ中に実行することをお勧めします。

**Usage**

```
USE [msdb]
EXEC dbo.rds_cleanup_resource_governor
```

## マルチ AZ 配置に関する考慮事項
<a name="ResourceGovernor.Considerations"></a>

RDS for SQL Server は、マルチ AZ 配置のセカンダリインスタンスにリソースガバナーをレプリケートします。変更された新しいリソースガバナーがセカンダリインスタンスと最後に同期された日時を確認できます。

次のクエリを使用して、レプリケーションの `last_sync_time` を確認します。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

クエリ結果で、同期時刻がリソースガバナーの更新時刻または作成時刻を過ぎている場合、リソースガバナーはセカンダリと同期します。

リソースガバナーのレプリケーションを確認するために手動で DB フェイルオーバーを実行するには、まず `last_sync_time` が更新されるのを待ちます。次に、マルチ AZ フェイルオーバーに進みます。

## リードレプリカに関する考慮事項
<a name="ResourceGovernor.ReadReplica"></a>
+ ソース DB インスタンスと同じリージョンの SQL Server レプリカの場合、ソースと同じオプショングループを使用します。オプショングループへの変更は、メンテナンスウィンドウに関係なく、レプリカにすぐに伝達されます。
+ SQL Server クロスリージョンレプリカを作成する場合、RDS により、そのための専有オプショングループが作成されます。
+ SQL Server クロスリージョンレプリカを、その専有オプショングループから削除することはできません。他の DB インスタンスで、SQL Server クロスリージョンレプリカの専有オプショングループを使用することはできません。
+ リソースガバナーオプションはレプリケートされていないオプションです。専用オプショングループから、レプリケートされないオプションを追加または削除できます。
+ SQL Server クロスリージョンリードレプリカを昇格するとき、昇格されたレプリカは、オプションの管理を含め、その他の SQL Server DB インスタンスと同じように動作します。

**注記**  
リードレプリカでリソースガバナーを使用する場合は、オプションがオプショングループに追加された後に、Amazon RDS ストアドプロシージャを使用して、リードレプリカでリソースガバナーが手動で設定されていることを確認する必要があります。リソースガバナーの設定は、リードレプリカに自動的にレプリケートされません。また、リードレプリカのワークロードは通常、プライマリインスタンスとは異なります。したがって、ワークロードとインスタンスタイプに基づいてリソース設定をレプリカに適用することをお勧めします。リードレプリカでこれらの Amazon RDS ストアドプロシージャを個別に実行して、リードレプリカでリソースガバナーを設定できます。

# RDS for SQL Server インスタンスのシステムビューを使用して Microsoft SQL Server リソースガバナーをモニタリングする
<a name="ResourceGovernor.Monitoring"></a>

リソースガバナー統計は、前回のサーバー再起動以降に累積されます。特定の時間から統計を収集する必要がある場合は、次の Amazon RDS ストアドプロシージャを使用して統計をリセットできます。

```
EXEC msdb.dbo.rds_alter_resource_governor_configuration  
@reset_statistics = 1;
```

## リソースプールランタイム統計
<a name="ResourceGovernor.ResourcePoolStats"></a>

リソースプールごとに、リソースガバナーは CPU とメモリの使用率、メモリ不足イベント、メモリ許可、I/O、その他の統計情報を追跡します。詳細については、「[sys.dm\$1resource\$1governor\$1resource\$1pools](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-resource-governor-resource-pools-transact-sql?view=sql-server-ver17)」を参照してください。

次のクエリは、すべてのリソースプールで使用可能な統計のサブセットを返します。

```
SELECT rp.pool_id,
       rp.name AS resource_pool_name,
       wg.workload_group_count,
       rp.statistics_start_time,
       rp.total_cpu_usage_ms,
       rp.target_memory_kb,
       rp.used_memory_kb,
       rp.out_of_memory_count,
       rp.active_memgrant_count,
       rp.total_memgrant_count,
       rp.total_memgrant_timeout_count,
       rp.read_io_completed_total,
       rp.write_io_completed_total,
       rp.read_bytes_total,
       rp.write_bytes_total,
       rp.read_io_stall_total_ms,
       rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
            SELECT COUNT(1) AS workload_group_count
            FROM sys.dm_resource_governor_workload_groups AS wg
            WHERE wg.pool_id = rp.pool_id
            ) AS wg;
```

# RDS for SQL Server インスタンスの Microsoft SQL Server リソースガバナーを無効にする
<a name="ResourceGovernor.Disabling"></a>

RDS for SQL Server でリソースガバナーを無効にすると、サービスはワークロードリソースの管理を停止します。リソースガバナーを無効にする前に、これがデータベースの接続と設定にどのように影響するかを確認してください。

リソースガバナーを無効にすると、次の結果になります。
+ 新しい接続が開かれたときに、分類子関数は実行されません。
+ 新しい接続は自動的にデフォルトのワークロードグループに分類されます。
+ 既存のワークロードグループとリソースプールの設定はすべてデフォルト値にリセットされます。
+ 制限に達した場合、イベントは発生しません。
+ リソースガバナーの設定は変更できますが、リソースガバナーが有効になるまで変更は適用されません。

リソースガバナーを無効にするには、オプショングループから `RESOURCE_GOVERNOR` オプションを削除します。

## コンソール
<a name="ResourceGovernor.Disabling.Console"></a>

以下の手順では、`RESOURCE_GOVERNOR` オプションを削除します。

**RESOURCE\$1GOVERNOR オプションをオプショングループから削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**オプショングループ**] を選択します。

1. `RESOURCE_GOVERNOR` オプションが含まれているオプショングループ (前の例では `resource-governor-ee-2022`) を選択します。

1. **[オプションを削除]** を選択します。

1. **[削除オプション]** で、**[削除するオプション]** として **[RESOURCE\$1GOVERNOR]** を選択します。

1. **[Apply immediately]** (すぐに適用) で、オプションをすぐに削除する場合は **[Yes]** (はい) を選択し、次のメンテナンスウィンドウで削除する場合は **[No]** (いいえ) を選択します。

1. **[削除]** を選択します。

## CLI
<a name="ResourceGovernor.Disabling.CLI"></a>

以下の手順では、`RESOURCE_GOVERNOR` オプションを削除します。

**RESOURCE\$1GOVERNOR オプションをオプショングループから削除するには**
+ 以下のいずれかのコマンドを実行します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-option-from-option-group \
      --option-group-name resource-governor-ee-2022 \
      --options RESOURCE_GOVERNOR \
      --apply-immediately
  ```

  Windows の場合:

  ```
  aws rds remove-option-from-option-group ^
      --option-group-name resource-governor-ee-2022 ^
      --options RESOURCE_GOVERNOR ^
      --apply-immediately
  ```

# RDS for SQL Server でリソースガバナーを設定するためのベストプラクティス
<a name="ResourceGovernor.BestPractices"></a>

リソースの消費を制御するために、RDS for SQL Server は Microsoft SQL Server のリソースガバナーをサポートしています。以下のベストプラクティスは、一般的な設定の問題を回避し、データベースのパフォーマンスを最適化するのに役立ちます。

1. リソースガバナーの設定は `master` データベースに保存されます。リソースガバナーの設定スクリプトのコピーは必ず個別に保存することをお勧めします。

1. 分類子関数はログイン処理時間を延長するため、分類子の複雑なロジックを避けることをお勧めします。関数が複雑すぎると、Amazon RDS オートメーションセッションなどのログイン遅延や接続タイムアウトが発生する可能性があります。これは、Amazon RDS オートメーションがインスタンスの状態をモニタリングする機能に影響を与える可能性があります。したがって、本番稼働前の環境で分類子関数をテストしてから、本番稼働環境に実装することをお勧めします。

1. ワークロードグループで `REQUEST_MAX_MEMORY_GRANT_PERCENT` に高い値 (70 以上) を設定しないでください。そうしないと、データベースインスタンスが他の同時クエリに十分なメモリを割り当てることができなくなり、メモリ付与タイムアウトエラー (エラー 8645) が発生する可能性があります。逆に、この値を低く (1 未満) 設定したり 0 に設定すると、メモリワークスペースを必要とするクエリ (ソートまたはハッシュオペレーションを含むクエリなど) がユーザー定義のワークロードグループで適切に実行できなくなる可能性があります。RDS は、デフォルトのワークロードグループの値を 1～70 に制限することで、これらの制限を適用します。

1. tempdb をリソースプールにバインドする場合、メモリ最適化 tempdb メタデータをプールにバインドした後、プールが最大設定に達し、`tempdb` を使用するクエリがメモリ不足エラーで失敗する可能性があります。特定の状況では、メモリ不足エラーが発生した場合に SQL Server が停止する可能性があります。これが発生する可能性を減らすには、メモリプールの `MAX_MEMORY_PERCENT` を高い値に設定します。

# Amazon RDS for Microsoft SQL Server の一般的な DBA タスク
<a name="Appendix.SQLServer.CommonDBATasks"></a>

このセクションでは、Microsoft SQL Server Amazon RDS データベースエンジンを実行する DB インスタンスに関連したいくつかの一般的な DBA タスクの Amazon RDS 固有の実装について説明します。マネージド型サービスの操作性を実現するために、Amazon RDS では DB インスタンスへのシェルアクセスはできません。また、上位の権限を必要とする特定のシステムプロシージャやシステムテーブルへのアクセスが制限されます。

**注記**  
SQL Server DB インスタンスを使用する場合、新しく作成したデータベースを変更するためのスクリプトを実行できますが、新しいデータベースのモデルとして使用される「モデル」データベースを変更することはできません。

**Topics**
+ [Amazon RDS で実行している Microsoft SQL Server DB インスタンスの tempdb データベースへのアクセス](SQLServer.TempDB.md)
+ [Database Engine Tuning Advisor を使用して Amazon RDS for SQL Server DB インスタンスのデータベースワークロードを分析する](Appendix.SQLServer.CommonDBATasks.Workload.md)
+ [`db_owner` の Amazon RDS for SQL Server データベースの `rdsa` アカウントへの変更](Appendix.SQLServer.CommonDBATasks.ChangeDBowner.md)
+ [Amazon RDS for Microsoft SQL Server の照合と文字セットの管理](Appendix.SQLServer.CommonDBATasks.Collation.md)
+ [Amazon RDS for SQL Server のデータベースユーザーの作成](Appendix.SQLServer.CommonDBATasks.CreateUser.md)
+ [Amazon RDS for SQL Server データベースの復旧モデルの決定](Appendix.SQLServer.CommonDBATasks.DatabaseRecovery.md)
+ [Amazon RDS for SQL Server の最終フェイルオーバー時間の決定](Appendix.SQLServer.CommonDBATasks.LastFailover.md)
+ [ログシーケンス番号のギャップによるポイントインタイムリカバリ障害のトラブルシューティング](Appendix.SQLServer.CommonDBATasks.PITR-LSN-Gaps.md)
+ [Amazon RDS for SQL Server のデータベース名の表示を拒否または許可する](Appendix.SQLServer.CommonDBATasks.ManageView.md)
+ [Amazon RDS for SQL Server の一括ロード中の高速挿入の無効化](Appendix.SQLServer.CommonDBATasks.DisableFastInserts.md)
+ [Amazon RDS for Microsoft SQL Server DB インスタンスのデータベースの削除](Appendix.SQLServer.CommonDBATasks.DropMirrorDB.md)
+ [マルチ AZ 配置の Amazon RDS for Microsoft SQL Server データベースの名前の変更](Appendix.SQLServer.CommonDBATasks.RenamingDB.md)
+ [Amazon RDS for SQL Server のマスターユーザーの db\$1owner ロールメンバーシップのリセット](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)
+ [Amazon RDS for SQL Server のライセンス終了した DB インスタンスの復元](Appendix.SQLServer.CommonDBATasks.RestoreLTI.md)
+ [Amazon RDS for SQL Server データベースのオフラインからオンラインへの切り替え](Appendix.SQLServer.CommonDBATasks.TransitionOnline.md)
+ [Amazon RDS for SQL Server の変更データキャプチャの使用](Appendix.SQLServer.CommonDBATasks.CDC.md)
+ [Amazon RDS 用 SQL Server エージェントの使用](Appendix.SQLServer.CommonDBATasks.Agent.md)
+ [Amazon RDS for Microsoft SQL Server ログの使用方法](Appendix.SQLServer.CommonDBATasks.Logs.md)
+ [Amazon RDS for SQL Server のトレースファイルとダンプファイルの使用](Appendix.SQLServer.CommonDBATasks.TraceFiles.md)

# Amazon RDS で実行している Microsoft SQL Server DB インスタンスの tempdb データベースへのアクセス
<a name="SQLServer.TempDB"></a>

Amazon RDS で実行している Microsoft SQL Server DB インスタンスの `tempdb` データベースにアクセスできます。`tempdb` に対してコードを実行するには、Microsoft SQL Server Management Studio (SSMS) 経由で Transact-SQL を使用するか、他の標準の SQL クライアントアプリケーションを使用します。DB インスタンスへの接続の詳細については、「[SQL Server DB インスタンスへの接続](USER_ConnectToMicrosoftSQLServerInstance.md)」を参照してください。

DB インスタンスのマスターユーザーは、`CONTROL` への `tempdb` アクセスが付与されるため、`tempdb` データベースオプションを変更できます。マスターユーザーは、`tempdb` データベースの所有者ではありません。必要に応じて、マスターユーザーは他のユーザーに `CONTROL` アクセスを付与し、他のユーザーにも `tempdb` データベースオプションを変更することを許可できます。

**注記**  
`tempdb` データベースに対して Database Console Command (DBCC) を実行することはできません。

# tempdb データベースオプションの変更
<a name="SQLServer.TempDB.Modifying"></a>

Amazon RDS DB インスタンスで `tempdb` データベースのデータベースオプションを変更できます。変更可能なオプションの詳細については、Microsoft ドキュメントの「[tempdb データベース](https://msdn.microsoft.com/en-us/library/ms190768%28v=sql.120%29.aspx)」を参照してください。

ファイルの最大サイズオプションなどのデータベースオプションは、DB インスタンスの再起動後も保持されます。データベースオプションを変更して、データをインポートする際のパフォーマンスを最適化したり、ストレージ不足を防止したりすることができます。

## データをインポートする際のパフォーマンスの最適化
<a name="SQLServer.TempDB.Modifying.Import"></a>

大量のデータを DB インスタンス内にインポートする際のパフォーマンスを最適化するには、tempdb データベースの `SIZE` プロパティと `FILEGROWTH` プロパティに大きな数値を設定します。`tempdb` を最適化する方法の詳細については、Microsoft ドキュメントの「[tempdb のパフォーマンスの最適化](https://technet.microsoft.com/en-us/library/ms175527%28v=sql.120%29.aspx)」を参照してください。

以下の例では、ファイルサイズを 100 GB に、ファイルの拡張単位を 10 パーセントに設定しています。

```
1. alter database[tempdb] modify file (NAME = N'templog', SIZE=100GB, FILEGROWTH = 10%)
```

## ストレージの問題の防止
<a name="SQLServer.TempDB.Modifying.Full"></a>

`tempdb` データベースによる使用可能なディスク容量の占有を防止するには、`MAXSIZE` プロパティを設定します。次の例では、プロパティを 2048 MB に設定しています。

```
1. alter database [tempdb] modify file (NAME = N'templog', MAXSIZE = 2048MB)
```

# tempdb データベースの圧縮
<a name="SQLServer.TempDB.Shrinking"></a>

Amazon RDS DB インスタンスの `tempdb` データベースを圧縮するには、2 つの方法があります。`rds_shrink_tempdbfile` プロシージャを使用するか、`SIZE` プロパティを設定できます。

## rds\$1shrink\$1tempdbfile プロシージャの使用
<a name="SQLServer.TempDB.Shrinking.Proc"></a>

Amazon RDS プロシージャ `msdb.dbo.rds_shrink_tempdbfile` を使用すると、`tempdb` データベースを圧縮できます。`rds_shrink_tempdbfile` が `CONTROL` にアクセスできる場合にのみ、`tempdb` を呼び出すことができます。`rds_shrink_tempdbfile` を呼び出すとき、DB インスタンスのダウンタイムはありません。

`rds_shrink_tempdbfile` プロシージャには以下のパラメータがあります。


****  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
| `@temp_filename` | SYSNAME | — | 必須 | 圧縮するファイルの論理名。 | 
| `@target_size` | int | null | optional | ファイルの新しいサイズ (メガバイト単位)。 | 

次の例では、`tempdb` データベース用にファイル名を取得します。

```
1. use tempdb;
2. GO
3. 
4. select name, * from sys.sysfiles;
5. GO
```

以下の例では、`tempdb` という名前の `test_file` データベースファイルを圧縮し、新しいサイズとして `10` メガバイトをリクエストしています。

```
1. exec msdb.dbo.rds_shrink_tempdbfile @temp_filename = N'test_file', @target_size = 10;
```

## SIZE プロパティの設定
<a name="SQLServer.TempDB.Shrinking.Size"></a>

`tempdb` を設定して DB インスタンスを再起動することでも、`SIZE` データベースを圧縮できます。DB インスタンスの再起動の詳細については、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。

次の例では、`SIZE` プロパティを 1024 MB に設定しています。

```
1. alter database [tempdb] modify file (NAME = N'templog', SIZE = 1024MB)
```

# マルチ AZ 配置の TempDB 設定
<a name="SQLServer.TempDB.MAZ"></a>

データベースミラーリング (DBM) または Always On Availability Groups (AG) を使用して、RDS for SQL Server DB インスタンスがマルチ AZ 配置にある場合、`tempdb` データベースの使用については、以下の考慮事項に留意してください。

プライマリ DB インスタンスからセカンダリ DB インスタンスに `tempdb` データをレプリケートすることはできません。セカンダリ DB インスタンスにフェイルオーバーすると、そのセカンダリ DB インスタンスの `tempdb` は空になります。

プライマリ DB インスタンスからセカンダリ DB インスタンスに、ファイルのサイズ設定や自動拡張設定などの `tempdb` データベースオプションの設定を同期できます。`tempDB` 設定の同期は、すべての RDS for SQL Server バージョンでサポートされています。次のストアドプロシージャを使用して、`tempdb` 設定の自動同期を有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'TempDbFile';
```

**重要**  
`rds_set_system_database_sync_objects` ストアドプロシージャを使用する前に、セカンダリ DB インスタンスではなく、プライマリ DB インスタンスで希望の `tempdb` 設定を行ってください。セカンダリ DB インスタンスで設定を変更した場合、自動同期を有効にすると、希望の `tempdb` 設定が削除される可能性があります。

次の関数を使用して、`tempdb` 設定の自動同期が有効になっているかどうかを確認できます。

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

`tempdb` 設定の自動同期が有効な場合、`object_class` フィールドに戻り値があります。無効なときには、値は返されません。

次の関数を使用して、オブジェクトが UTC 時間で最後に同期された時刻を調べることができます。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

例えば、`tempdb` 設定を 01:00 に変更してから `rds_fn_server_object_last_sync_time` 関数を実行した場合、`last_sync_time` として返される値は 01:00 より後であり、自動同期が発生したことを示します。

SQL Server Agent ジョブレプリケーションも使用している場合は、 `@object_type` パラメータで指定することで、SQL Agent ジョブと `tempdb` 設定の両方のレプリケーションを有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

SQL Server Agent ジョブのレプリケーションの詳細については、「[SQL Server エージェントジョブレプリケーションをオンにする](Appendix.SQLServer.CommonDBATasks.Agent.md#SQLServerAgent.Replicate)」を参照してください。

`rds_set_system_database_sync_objects` ストアドプロシージャを使用して `tempdb` 設定変更が自動的に同期されるようにする代わりに、次のいずれかの手動方法を使用できます。

**注記**  
`rds_set_system_database_sync_objects` ストアドプロシージャを使用して `tempdb` 設定の自動同期を有効にすることをお勧めます。自動同期を使用すると、`tempdb` 設定を変更するたびにこれらの手動タスクを実行する必要がなくなります。
+ まず DB インスタンスを変更してマルチ AZ を無効にします。次に tempdb を変更し、最後にマルチ AZ を再度有効にします。この方法に伴うダウンタイムはありません。

  詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
+ まず元のプライマリインスタンスで `tempdb` を変更します。次に手動でフェイルオーバーし、最後に新しいプライマリインスタンスで `tempdb` を変更します。このメソッドではダウンタイムが生じます。

  詳しくは、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。

# Database Engine Tuning Advisor を使用して Amazon RDS for SQL Server DB インスタンスのデータベースワークロードを分析する
<a name="Appendix.SQLServer.CommonDBATasks.Workload"></a>

Database Engine Tuning Advisor は、Microsoft によって提供されるクライアントアプリケーションで、データベースワークロードを分析し、実行するクエリのタイプに基づいて Microsoft SQL Server データベースの最適なインデックスセットを推奨します。SQL Server Management Studio と同様に、チューニングアドバイザーは SQL Server を実行している Amazon RDS DB インスタンスに接続するクライアントコンピュータから実行します。クライアントコンピュータは、独自のネットワーク内で、オンプレミスで実行するローカルコンピュータ、または Amazon RDS DB インスタンスと同じリージョンで実行している Amazon EC2 Windows インスタンスです。

このセクションでは、チューニングアドバイザーで分析するためにワークロードをキャプチャする方法を紹介します。Amazon RDS では SQL Server インスタンスへのホストアクセスが制限されるため、これがワークロードをキャプチャするための最適なプロセスです。詳細については、Microsoft のドキュメントの [Database Engine Tuning Advisor](https://docs.microsoft.com/en-us/sql/relational-databases/performance/database-engine-tuning-advisor) を参照してください。

チューニングアドバイザーを使用するには、いわゆるワークロードをアドバイザーに提供する必要があります。ワークロードは、調整するデータベースに対して実行する一連の Transact-SQL ステートメントです。データベースエンジンチューニングアドバイザーは、データベースを調整する際のワークロード入力として、トレースファイル、トレーステーブル、Transact-SQL スクリプト、または XML ファイルを使用します。Amazon RDS を使用するときは、クライアントコンピュータ上のファイル、またはクライアントコンピュータにアクセス可能な Amazon RDS for SQL Server DB のデータベーステーブルがワークロードになります。ファイルまたはテーブルには、調整するデータベースに対するクエリが再生に適した形式で格納されている必要があります。

チューニングアドバイザーをもっとも効果的に機能させるには、ワークロードをできる限り実際的なものにする必要があります。DB インスタンスに対してトレースを実行することで、ワークロードのファイルまたはテーブルを生成できます。トレースの実行中に、DB インスタンスの負荷をシミュレートするか、正常な負荷でアプリケーションを実行できます。

トレースには、クライアント側とサーバー側の 2 種類があります。クライアント側トレースはセットアップが比較的容易で、SQL Server Profiler でキャプチャされたトレースイベントをリアルタイムで監視することができます。サーバー側トレースは、セットアップが複雑で、複数の Transact-SQL スクリプトを作成する必要があります。さらに、トレースは Amazon RDS DB インスタンスのファイルに書き込まれるため、トレースによってストレージ領域が消費されます。この結果ストレージ領域が不足した場合、DB インスタンスは空き領域がない状態になり、使用不能になる可能性があるため、実行中のサーバー側トレースがどのくらいのストレージ領域を使用するかを追跡することが重要になります。

クライアント側トレースの場合、十分な量のトレースデータが SQL Server Profiler にキャプチャされると、ワークロードファイルを生成できます。そのためには、ローカルコンピュータのファイルにトレースを保存します。または、クライアントコンピュータから利用できる DB インスタンスのデータベーステーブルにトレースを保存します。クライアント側トレースを使用する主なデメリットは、大量の負荷がかかると、トレースですべてのクエリをキャプチャできない可能性があることです。この結果、データベースエンジンチューニングアドバイザーによって実行される分析の効果が低下します。大量の負荷の下でトレースを実行する必要があり、そのトレースセッション中にすべてのクエリを確実にキャプチャしたい場合は、サーバー側トレースを使用してください。

サーバー側トレースの場合、DB インスタンスのトレース ファイルを適切なワークロードファイルに入れるか、追跡完了後に DB インスタンスのテーブルにトレースを保存することができます。SQL Server Profiler を使用してトレースをローカルコンピュータのファイルに保存するか、チューニングアドバイザーで DB インスタンスのトレーステーブルから読み取ることができます。

# SQL Server DB インスタンスでクライアント側トレースを実行する
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.ClientSide"></a>

 **SQL Server DB インスタンスでクライアント側トレースを実行するには** 

1. SQL Server Profiler を起動します。これは SQL Server インスタンスのフォルダの Performance Tools フォルダにインストールされます。クライアント側トレースを開始するには、トレース定義テンプレートをロードするか定義する必要があります。

1. SQL Server Profiler の [ファイル] メニューで、[**新しいトレース**] を選択します。[**Connect to Server**] ダイアログボックスで、トレースを実行するデータベースの DB インスタンスエンドポイント、ポート、マスターユーザー名、およびパスワードを入力します。

1. [**Trace Properties**] ダイアログボックスで、トレース名を入力し、トレース定義テンプレートを選択します。デフォルトテンプレート TSQL\$1Replay は、アプリケーションに標準で装備されています。このテンプレートを編集して、トレースを定義できます。[**トレースのプロパティ**] ダイアログボックスの [**イベントの選択**] タブで、イベントとイベント情報を編集します。

   トレース定義テンプレートの詳細と SQL Server Profiler を使用してクライアント側トレースを指定する方法については、Microsoft ドキュメントの [Database Engine Tuning Advisor](https://docs.microsoft.com/en-us/sql/relational-databases/performance/database-engine-tuning-advisor) を参照してください。

1. クライアント側トレースを開始し、DB インスタンスに対して実行される間、SQL クエリをリアルタイムで監視してください。

1. トレースが完了したら、[**ファイル**] メニューから [**トレースの停止**] を選択します。結果をファイルまたはトレーステーブルとして DB インスタンスに保存します。

# SQL Server DB インスタンスでサーバー側トレースを実行する
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.ServerSide"></a>

サーバー側トレースを作成するスクリプトの作成は複雑になる可能性があるため、このドキュメントでは割愛します。このセクションでは、例として使用できるサンプルスクリプトを紹介します。クライアント側トレースと同様に、データベースエンジンチューニングアドバイザーを使用して開くことのできるワークロードファイルまたはトレーステーブルを作成することが目的です。

次に紹介する簡略化したサンプルスクリプトでは、サーバー側トレースを開始し、詳細をキャプチャしてワークロードファイルを作成します。トレースは、最初に D:\$1RDSDBDATA\$1Log ディレクトリの RDSTrace.trc ファイルに保存され、100 MB ごとにロールオーバーされて、それ以降のトレースファイルには RDSTrace\$11.trc、RDSTrace\$12.trc のように名前が付けられます。

```
DECLARE @file_name NVARCHAR(245) = 'D:\RDSDBDATA\Log\RDSTrace';
DECLARE @max_file_size BIGINT = 100;
DECLARE @on BIT = 1
DECLARE @rc INT
DECLARE @traceid INT

EXEC @rc = sp_trace_create @traceid OUTPUT, 2, @file_name, @max_file_size
IF (@rc = 0) BEGIN
   EXEC sp_trace_setevent @traceid, 10, 1, @on
   EXEC sp_trace_setevent @traceid, 10, 2, @on
   EXEC sp_trace_setevent @traceid, 10, 3, @on
 . . .
   EXEC sp_trace_setfilter @traceid, 10, 0, 7, N'SQL Profiler'
   EXEC sp_trace_setstatus @traceid, 1
   END
```

以下の例はトレースを停止するスクリプトです。前述のスクリプトで作成されるトレースは、明示的にトレースを停止するか、プロセスがディスク容量を使い果たすまで継続されます。

```
DECLARE @traceid INT
SELECT @traceid = traceid FROM ::fn_trace_getinfo(default) 
WHERE property = 5 AND value = 1 AND traceid <> 1 

IF @traceid IS NOT NULL BEGIN
   EXEC sp_trace_setstatus @traceid, 0
   EXEC sp_trace_setstatus @traceid, 2
END
```

サーバー側トレースの結果をデータベーステーブルに保存し、fn\$1trace\$1gettable 関数を使用することで、そのデータベーステーブルをチューニングアドバイザーのワークロードとして使用することができます。次のコマンドは、D:\$1rdsdbdata\$1Log ディレクトリにある RDSTrace.trc という名前の全ファイル (RDSTrace\$11.trc などのすべてのロールオーバーファイルを含む) の結果を、現在のデータベースの RDSTrace という名前のテーブルにロードします。

```
SELECT * INTO RDSTrace
FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace.trc', default);
```

特定のロールオーバーファイルをテーブル (例えば、RDSTrace\$11.trc ファイル) に保存するには、fn\$1trace\$1gettable の最後のパラメータとしてロールオーバーファイルの名前を指定し、デフォルトの代わりに 1 を代入します。

```
SELECT * INTO RDSTrace_1
FROM fn_trace_gettable('D:\rdsdbdata\Log\RDSTrace_1.trc', 1);
```

# トレースを使用してチューニングアドバイザーを実行する
<a name="Appendix.SQLServer.CommonDBATasks.TuningAdvisor.Running"></a>

ローカルファイルまたはデータベーステーブルとしてトレースを作成したら、DB インスタンスに対してチューニングアドバイザーを実行できます。Amazon RDS でチューニングアドバイザーを使用するときのプロセスは、スタンドアロンのリモート SQL Server インスタンスを使用するときと同じです。クライアントマシンのチューニングアドバイザー UI を使用するか、コマンドラインから dta.exe ユーティリティを使用することができます。いずれの場合も、DB インスタンスのエンドポイントを使用して Amazon RDS DB インスタンスに接続し、チューニングアドバイザーを使用するときに、マスターユーザー名とマスターユーザーパスワードを指定する必要があります。

次のコード例では、エンドポイント **dta.cnazcmklsdei.us-east-1.rds.amazonaws.com** を持つ Amazon RDS DB インスタンスに対して dta.exe コマンドラインユーティリティを使用する方法をデモンストレーションします。この例には、マスターユーザー名 **admin** とマスターユーザーのパスワード **test** が含まれています。チューニングするサンプルデータベースは、**C:\$1RDSTrace.trc** という名前が付いたマシンです。サンプルコマンドラインコードでは、**RDSTrace1** というトレースセッション名も指定し、ローカルマシンへの出力ファイルとして、SQL 出力スクリプトには **RDSTrace.sql**、結果ファイルには **RDSTrace.txt**、分析の XML ファイルには **RDSTrace.xml** という名前を指定します。また、RDSDTA データベースに **RDSTraceErrors** という名前のエラーテーブルが指定されます。

```
dta -S dta.cnazcmklsdei.us-east-1.rds.amazonaws.com -U admin -P test -D RDSDTA -if C:\RDSTrace.trc -s RDSTrace1 -of C:\ RDSTrace.sql -or C:\ RDSTrace.txt -ox C:\ RDSTrace.xml -e RDSDTA.dbo.RDSTraceErrors 
```

次は同じコマンドラインコードの例ですが、入力ワークロードがリモート Amazon RDS インスタンスにある **RDSTrace** データベースの **RDSDTA** というテーブルである点が異なります。

```
dta -S dta.cnazcmklsdei.us-east-1.rds.amazonaws.com -U admin -P test -D RDSDTA -it RDSDTA.dbo.RDSTrace -s RDSTrace1 -of C:\ RDSTrace.sql -or C:\ RDSTrace.txt -ox C:\ RDSTrace.xml -e RDSDTA.dbo.RDSTraceErrors
```

dta ユーティリティのコマンドラインパラメータの一覧については、Microsoft のドキュメントの [dta Utility](https://docs.microsoft.com/en-us/sql/tools/dta/dta-utility) を参照してください。

# `db_owner` の Amazon RDS for SQL Server データベースの `rdsa` アカウントへの変更
<a name="Appendix.SQLServer.CommonDBATasks.ChangeDBowner"></a>

RDS for SQL Server DB インスタンスでデータベースを作成または復元すると、Amazon RDS はデータベースの所有者を `rdsa` に設定します。マルチ AZ 配置で SQL Server データベースミラーリング (DBM) または Always On 可用性グループ (AG) を使用している場合、Amazon RDS はセカンダリ DB インスタンスのデータベースの所有者を `NT AUTHORITY\SYSTEM` に設定します。セカンダリ DB インスタンスがプライマリロールに昇格されるまで、セカンダリデータベースの所有者を変更することはできません。ほとんどの場合、クエリの実行時にデータベースの所有者を `NT AUTHORITY\SYSTEM` に設定しても問題はありませんが、実行に昇格アクセス許可を必要とする `sys.sp_updatestats` などのシステムストアドプロシージャの実行時にエラーが発生する可能性があります。

次のクエリを使用して、`NT AUTHORITY\SYSTEM` が所有するデータベースの所有者を特定できます。

```
SELECT name FROM sys.databases WHERE SUSER_SNAME(owner_sid) = 'NT AUTHORITY\SYSTEM';
```

Amazon RDS ストアドプロシージャ `rds_changedbowner_to_rdsa` を使用して、データベースの所有者を `rdsa` に変更できます。`rds_changedbowner_to_rdsa` では、`master, model, msdb, rdsadmin, rdsadmin_ReportServer, rdsadmin_ReportServerTempDB, SSISDB` の各データベースは使用できません。

データベースの所有者を `rdsa` に変更するには、`rds_changedbowner_to_rdsa` ストアドプロシージャを呼び出してデータベース名を指定します。

**Example 使用例:**  

```
exec msdb.dbo.rds_changedbowner_to_rdsa 'TestDB1';
```

以下のパラメータは必須です。
+ `@db_name` — データベースの所有者を `rdsa` に変更する対象のデータベースの名前。

**重要**  
`rds_changedbowner_to_rdsa` を使用して、データベースの所有権を `rdsa` 以外のログインに変更することはできません。例えば、データベースを作成したログインに所有権を変更することはできません。他のデータベースユーザーを使用してメンバーシップを付与できない場合に、マスターユーザーの `db_owner` ロールの失われたメンバーシップを復元するには、マスターユーザーのパスワードをリセットして、`db_owner` ロールのメンバーシップを取得します。詳細については、「[Amazon RDS for SQL Server のマスターユーザーの db\$1owner ロールメンバーシップのリセット](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)」を参照してください。

# Amazon RDS for Microsoft SQL Server の照合と文字セットの管理
<a name="Appendix.SQLServer.CommonDBATasks.Collation"></a>

このトピックでは、Amazon RDS で Microsoft SQL Server の照合順序と文字セットを管理する方法について説明します。データベースの作成中に照合順序を設定し、後で変更する方法を説明し、言語とロケールの要件に基づいてテキストデータを適切に処理できるようにします。さらに、Amazon RDS の SQL Server 環境で互換性とパフォーマンスを維持するためのベストプラクティスについても説明します。

SQL Server は、複数のレベルで照合をサポートします。DB インスタンスを作成するときに、デフォルトのサーバー照合を設定します。照合は、データベース、テーブル、または列レベルでオーバーライドできます。

**Topics**
+ [Microsoft SQL Server のサーバーレベルの照合](#Appendix.SQLServer.CommonDBATasks.Collation.Server)
+ [Microsoft SQL Server のデータベースレベルの照合](#Appendix.SQLServer.CommonDBATasks.Collation.Database-Table-Column)

## Microsoft SQL Server のサーバーレベルの照合
<a name="Appendix.SQLServer.CommonDBATasks.Collation.Server"></a>

Microsoft SQL Server DB インスタンスを作成するときに、使用するサーバーの照合順序を設定できます。別の照合を選択しない場合、サーバーレベルの照合はデフォルトでSQL\$1Latin1\$1General\$1CP1\$1CI\$1AS になります。サーバー照合は、デフォルトですべてのデータベースとデータベースオブジェクトに適用されます。

**注記**  
DB スナップショットから復元する場合は、照合順序を変更できません。

Amazon RDS は現在、以下のサーバー照合をサポートしています。


| 照合 | 説明 | 
| --- | --- | 
|  Arabic\$1CI\$1AS  |  アラビア語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Chinese\$1PRC\$1BIN2  |  Chinese-PRC、バイナリコードポイントのソート順序  | 
|  Chinese\$1PRC\$1CI\$1AS  |  中国語 - 中華人民共和国、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Chinese\$1Taiwan\$1Stroke\$1CI\$1AS  |  繁体字中国語 (台湾)、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Danish\$1Norwegian\$1CI\$1AS  |  デンマーク-ノルウェー語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1KS  |  デンマーク-ノルウェー語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別あり、全角半角の区別なし  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1KS\$1WS  |  デンマーク-ノルウェー語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別あり、全角半角の区別あり  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1WS  |  デンマーク-ノルウェー語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別あり  | 
|  Danish\$1Norwegian\$1CS\$1AI  |  デンマーク-ノルウェー語、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Danish\$1Norwegian\$1CS\$1AI\$1KS  |  デンマーク-ノルウェー語、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別あり、全角半角の区別なし  | 
|  Finnish\$1Swedish\$1100\$1BIN  |  Finnish-Swedish-100、バイナリソート  | 
|  Finnish\$1Swedish\$1100\$1BIN2  |  Finnish-Swedish-100、バイナリコードポイント比較ソート  | 
|  Finnish\$1Swedish\$1100\$1CI\$1AI  |  フィンランド-スウェーデン語-100、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Finnish\$1Swedish\$1100\$1CI\$1AS  |  フィンランド-スウェーデン語-100、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Finnish\$1Swedish\$1CI\$1AS  |  フィンランド語、スウェーデン語、およびスウェーデン語 (フィンランド)、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  French\$1CI\$1AS  |  フランス語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Greek\$1CI\$1AS  |  ギリシャ語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Greek\$1CS\$1AS  |  ギリシャ語、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Hebrew\$1BIN  |  ヘブライ語、バイナリソート  | 
|  Hebrew\$1CI\$1AS  |  ヘブライ語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Japanese\$1BIN  | 日本語、バイナリソート | 
|  Japanese\$1CI\$1AS  |  日本語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Japanese\$1CS\$1AS  |  日本語、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS  |  日本語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし、補足文字、バリエーションセレクタの区別なし  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1VSS  |  日本語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし、補足文字、バリエーションセレクタの区別あり  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS\$1VSS  |  日本語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし、補足文字、バリエーションセレクタの区別あり  | 
|  Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS  |  日本語、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別あり、全角半角の区別あり、補足文字、バリエーションセレクタの区別なし  | 
|  Korean\$1Wansung\$1CI\$1AS  |  韓国語 (Wansung)、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Latin1\$1General\$1100\$1BIN  |  Latin1-General-100、バイナリソート  | 
|  Latin1\$1General\$1100\$1BIN2  |  Latin1-General-100、バイナリコードポイントソート  | 
|  Latin1\$1General\$1100\$1BIN2\$1UTF8  |  Latin1-General-100、バイナリコードポイントソート順序、UTF-8 エンコード  | 
|  Latin1\$1General\$1100\$1CI\$1AS  |  Latin1-General-100、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Latin1\$1General\$1100\$1CI\$1AS\$1SC\$1UTF8  |  Latin1-General-100、大文字と小文字を区別しない、アクセントを区別する、補助文字、UTF-8 エンコード  | 
|  Latin1\$1General\$1BIN  |  Latin1-General、バイナリソート  | 
|  Latin1\$1General\$1BIN2  |  Latin1-General、バイナリ、コードポイントソート  | 
|  Latin1\$1General\$1CI\$1AI  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Latin1\$1General\$1CI\$1AS  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Latin1\$1General\$1CI\$1AS\$1KS  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別あり、全角半角の区別なし  | 
|  Latin1\$1General\$1CS\$1AS  |  Latin1-General、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Modern\$1Spanish\$1CI\$1AS  |  現代スペイン語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Polish\$1CI\$1AS  |  ポーランド語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  SQL\$11xCompat\$1CP850\$1CI\$1AS  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 850 の SQL Server ソート順 49 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP1\$1CI\$1AI  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 1252 の SQL Server ソート順 54 (非 Unicode データの場合)  | 
|  **SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS (デフォルト)**  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 1252 の SQL Server ソート順 52 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP1\$1CS\$1AS  |  Latin1-General、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 1252 の SQL Server ソート順 51 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP437\$1CI\$1AI  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 437 の SQL Server ソート順 34 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP850\$1BIN  |  Latin1-General、バイナリソート順 (Unicode データの場合)、コードページ 850 の SQL Server ソート順 40 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP850\$1BIN2  |  Latin1-General、バイナリコードポイントソート (Unicode データの場合)、コードページ 850 の SQL Server ソート順 40 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP850\$1CI\$1AI  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別なし、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 850 の SQL Server ソート順 44 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP850\$1CI\$1AS  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 850 の SQL Server ソート順 42 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1Pref\$1CP850\$1CI\$1AS  |  Latin1-General-Pref、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 850 の SQL Server ソート順 183 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP1256\$1CI\$1AS  |  Latin1-General、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 1256 の SQL Server ソート順 146 (非 Unicode データの場合)  | 
|  SQL\$1Latin1\$1General\$1CP1255\$1CS\$1AS  |  Latin1-General、大文字と小文字の区別あり、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし (Unicode データの場合)、コードページ 1255 の SQL Server ソート順 137 (非 Unicode データの場合)  | 
|  Thai\$1CI\$1AS  |  タイ語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 
|  Turkish\$1CI\$1AS  |  トルコ語、大文字と小文字の区別なし、アクセント (濁音、破裂音) の区別あり、ひらがな片仮名の区別なし、全角半角の区別なし  | 

AWS CLI を使用して、サポートされている照合順序のリストをプログラムで取得することもできます。

```
aws rds describe-db-engine-versions --engine sqlserver-ee --list-supported-character-sets --query 'DBEngineVersions[].SupportedCharacterSets[].CharacterSetName' | sort -u
```

照合を選択
+ Amazon RDS のコンソールを使用している場合、新しい DB インスタンスを作成するときには、**[Additional configuration]** (追加設定) を選択し、**[Collation]** (照合) フィールドに照合を入力します。詳細については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+ AWS CLI を使用している場合は、`--character-set-name` コマンドで `create-db-instance` オプションを使います。詳細については、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) を参照してください。
+ Amazon RDS API を使用している場合は、`CharacterSetName` 操作で `CreateDBInstance` パラメータを使用します。詳細については、[CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) を参照してください。

## Microsoft SQL Server のデータベースレベルの照合
<a name="Appendix.SQLServer.CommonDBATasks.Collation.Database-Table-Column"></a>

デフォルト照合順序は、新しいデータベースまたはデータベースオブジェクトを作成する際に、照合順序を上書きすることにより、データベース、テーブル、または列レベルで変更できます。例えば、デフォルトのサーバー照合が SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS の場合は、Mohawk 照合に対応できるように、これを Mohawk\$1100\$1CI\$1AS に変更することができます。クエリの引数も、必要に応じて他の照合順序を使用するために型変換できます。

例えば、次のクエリは、AccountName 列のデフォルト照合順序を Japanese\$1CI\$1AS に変更します。

```
CREATE TABLE [dbo].[Account]
	(
	    [AccountID] [nvarchar](10) NOT NULL,
	    [AccountName] [nvarchar](100) COLLATE Mohawk_100_CI_AS NOT NULL 
	) ON [PRIMARY];
```

Microsoft SQL Server DB エンジンは、組み込みの NCHAR、NVARCHAR、および NTEXT データ型で Unicode をサポートします。例えば、CJK サポートが必要な場合は、データベースとテーブルを作成するときに、文字列ストレージに対してこれらの Unicode データ型を使用して、デフォルトサーバー照合順序を上書きします。以下のリンクから、SQL Server に対する照合順序と Unicode のサポートに関連する Microsoft の情報を参照できます。
+ [照合順序の使用](http://msdn.microsoft.com/en-us/library/ms187582%28v=sql.105%29.aspx) 
+ [照合順序とインターナショナル対応に関する用語](http://msdn.microsoft.com/en-us/library/ms143726%28v=sql.105%29) 
+ [SQL Server 照合順序の使用](http://msdn.microsoft.com/en-us/library/ms144260%28v=sql.105%29.aspx) 
+ [データベースとデータベースエンジンアプリケーションの国際化に関する注意点](http://msdn.microsoft.com/en-us/library/ms190245%28v=sql.105%29.aspx)

# Amazon RDS for SQL Server のデータベースユーザーの作成
<a name="Appendix.SQLServer.CommonDBATasks.CreateUser"></a>

Amazon RDS for Microsoft SQL Server DB インスタンスのデータベースユーザーを作成するには、次の例のように T-SQL スクリプトを実行します。SQL Server Management Suite (SSMS) などのアプリケーションを使用します。DB インスタンスの作成時に作成されたマスターユーザーとして DB インスタンスにログインします。

```
--Initially set context to master database
USE [master];
GO
--Create a server-level login named theirname with password theirpassword
CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword';
GO
--Set context to msdb database
USE [msdb];
GO
--Create a database user named theirname and link it to server-level login theirname
CREATE USER [theirname] FOR LOGIN [theirname];
GO
```

ロールにデータベースユーザーを追加する例については、[SQLAgentUser ロールへのユーザーの追加](SQLServerAgent.AddUser.md) を参照してください。

**注記**  
ユーザーを追加する際に許可エラーが発生した場合は、DB インスタンスのマスターユーザーパスワードを変更することで許可を復元できます。詳細については、「[Amazon RDS for SQL Server のマスターユーザーの db\$1owner ロールメンバーシップのリセット](Appendix.SQLServer.CommonDBATasks.ResetPassword.md)」を参照してください。  
アプリケーションでマスターユーザーのアクセス許可をクローンすることはベストプラクティスではありません。詳細については、「[Amazon RDS for SQL Server でマスターユーザーの権限をクローンする方法](https://aws.amazon.com/blogs/database/how-to-clone-master-user-permissions-in-amazon-rds-for-sql-server/)」を参照してください。

# Amazon RDS for SQL Server データベースの復旧モデルの決定
<a name="Appendix.SQLServer.CommonDBATasks.DatabaseRecovery"></a>

Amazon RDS では、復旧モデル、保持期間、およびデータベースステータスがリンクされています。

これらの設定のいずれかを変更する前に、変更の影響を理解しておくことが重要です。各設定が他の設定に影響を与える場合があります。次に例を示します。
+ バックアップ保持を有効にしている状態でデータベースの復旧モデルを SIMPLE または BULK\$1LOGGED に変更すると、Amazon RDS で復旧モデルは 5 分以内に FULL にリセットされます。これに伴って、RDS で DB インスタンスのスナップショットも作成されます。
+ バックアップ保持期間を `0` 日に設定すると、RDS で復旧モードは SIMPLE に設定されます。
+ バックアップ保持期間を `0` 日に設定した状態で、データベースの復旧モデルを SIMPLE から他のオプションに変更すると、RDS で復旧モデルは SIMPLE にリセットされます。

**重要**  
マルチ AZ インスタンスの復旧モデルは、絶対に変更しないでください。ALTER DATABASE などを使用して変更できそうに思える場合でも、変更してはなりません。バックアップ保持期間 (FULL 復旧モデル) は、マルチ AZ に必須です。この復旧モデルを変更すると、RDS によって即座に FULL に戻されます。  
この自動リセットにより、RDS でミラーが完全に再構築されます。この再構築中は、ミラーでフェイルオーバーの準備が整うまで、データベースの可用性が約 30～90 分間低下します。DB インスタンスも、シングル AZ からマルチ AZ に切り替える場合と同じように、パフォーマンスが低下します。パフォーマンスが低下する期間は、データベースのストレージサイズに応じて異なります。データベースのストレージサイズが大きいほど、低下する期間が長くなります。

SQL Server の復旧モデルの詳細については、Microsoft ドキュメントの[復旧モデル (SQL Server)](https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/recovery-models-sql-server) を参照してください。

# Amazon RDS for SQL Server の最終フェイルオーバー時間の決定
<a name="Appendix.SQLServer.CommonDBATasks.LastFailover"></a>

最後のフェイルオーバー時間を確認するには、次のストアドプロシージャを使用します。

```
execute msdb.dbo.rds_failover_time;
```

このプロシージャは、次の情報を返します。


****  

| 出力パラメータ | 説明 | 
| --- | --- | 
|  errorlog\$1available\$1from  |  ログディレクトリでエラーログが使用可能になる時間が表示されます。  | 
|  recent\$1failover\$1time  |  エラーログに最新のフェイルオーバー時間が含まれている場合は、その時間が表示されます。それ以外の場合は、`null` が表示されます。  | 

**注記**  
ストアドプロシージャは、最新のフェイルオーバー時間を取得するために、ログディレクトリ内のすべての使用可能な SQL Server エラーログを検索します。フェイルオーバーメッセージが SQL Server によって上書きされている場合、フェイルオーバー時間は取得されません。

**Example 最近のフェイルオーバーがない例**  
この例は、エラーログに最近のフェイルオーバーが存在しない場合の出力を示しています。2020-04-29 23:59:00.01 以降、フェイルオーバーは発生していません。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example 最近のフェイルオーバーの**  
この例は、エラーログにフェイルオーバーが存在する場合の出力を示しています。最新のフェイルオーバーは、2020-05-05 18:57:51.89 に発生しています。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# ログシーケンス番号のギャップによるポイントインタイムリカバリ障害のトラブルシューティング
<a name="Appendix.SQLServer.CommonDBATasks.PITR-LSN-Gaps"></a>

RDS for SQL Server でポイントインタイムリカバリ (PITR) を試みると、ログシーケンス番号 (LSN) のギャップが原因で障害が発生する可能性があります。これらのギャップにより、RDS はデータベースを要求された時間に復元できなくなり、RDS は復元インスタンスを `incompatible-restore` 状態にします。

この問題の一般的な原因は次のとおりです。
+ データベース復旧モデルへの手動変更。
+ トランザクションログのバックアップを完了するためのリソースが不足しているため、RDS によって自動復旧モデルが変更される。

データベース内の LSN ギャップを特定するには、次のクエリを実行します。

```
SELECT * FROM msdb.dbo.rds_fn_list_tlog_backup_metadata(database_name)
ORDER BY backup_file_time_utc desc;
```

LSN ギャップを検出したら、次を実行できます。
+ LSN ギャップの前に復元ポイントを選択します。
+ 次のインスタンスバックアップが完了した後、ある時点まで待機して復元します。

この問題を回避するには、RDS for SQL Server データベースの復旧モデルを手動で変更しないことをお勧めします。これは、インスタンスの耐久性を妨げてしまうためです。また、定期的なトランザクションログのバックアップを確保するために、ワークロードに十分なリソースを持つインスタンスタイプを選択することをお勧めします。

トランザクションログ管理の詳細については、「Microsoft SQL Server ドキュメント」の「[SQL Server トランザクションログのアーキテクチャと管理ガイド](https://learn.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-ver16)」を参照してください。

# Amazon RDS for SQL Server のデータベース名の表示を拒否または許可する
<a name="Appendix.SQLServer.CommonDBATasks.ManageView"></a>

マスターユーザーは `DENY VIEW ANY DATABASE TO LOGIN` を設定して、ユーザーにデータベースを非表示にすることはできません。このアクセス許可を変更するには、代わりに次のストアドプロシージャを使用します。
+ *LOGIN* へのデータベースの表示アクセスを拒否する:

  ```
  EXEC msdb.dbo.rds_manage_view_db_permission @permission=‘DENY’, @server_principal=‘LOGIN’  
  go
  ```
+ *LOGIN* へのデータベースの表示アクセスを許可する:

  ```
  EXEC msdb.dbo.rds_manage_view_db_permission @permission='GRANT', @server_principal='LOGIN' 
   go
  ```

このストアドプロシージャを使用する場合は、次の点を考慮してください。
+ データベース名は、SSMS および内部 DMV (動的管理ビュー) には非表示になります。ただし、データベース名は監査、ログ、メタデータテーブルでは引き続き表示可能です。これらは保護されている `VIEW ANY DATABASE` サーバーアクセス許可です。詳細については、「[サーバーの権限の拒否](https://learn.microsoft.com/en-us/sql/t-sql/statements/deny-server-permissions-transact-sql?view=sql-server-ver16#permissions)」を参照してください。
+ 権限が `GRANT` (許可) に戻されると、*LOGIN* はすべてのデータベースを表示できます。
+ *LOGIN* を削除して再作成すると、LOGIN に関連する表示アクセス許可が `ALLOW` にリセットされます。
+ マルチ AZ インスタンスの場合は、プライマリホストの *LOGIN* にのみ `DENY` または `GRANT` アクセス許可を設定します。変更はセカンダリホストに自動的に伝播されます。
+ このアクセス許可は、ログインがデータベース名を表示できるかどうかのみを変更します。ただし、データベースとその内部のオブジェクトへのアクセスは個別に管理されます。

# Amazon RDS for SQL Server の一括ロード中の高速挿入の無効化
<a name="Appendix.SQLServer.CommonDBATasks.DisableFastInserts"></a>

SQL Server 2016 以降では、高速挿入はデフォルトで有効になっています。高速挿入では、データベースが単純または一括ログ復旧モデルにあるときに発生する最小限のログを活用して、挿入パフォーマンスを最適化します。高速挿入では、それぞれの一括ロードバッチが新しいエクステントを取得し、使用可能な空き領域がある既存のエクステントの配分ルックアップをバイパスして、挿入パフォーマンスを最適化します。

ただし、高速挿入では、バッチサイズが小さい一括ロードにより、オブジェクトにより消費される未使用の領域が増加する可能性があります。バッチサイズを増やすことができない場合は、トレースフラグ 692 を有効にすると、未使用の予約領域を減らすことができますが、パフォーマンスは低下します。このトレースフラグを有効にすると、ヒープまたはクラスター化インデックスにデータを一括でロードする際の高速挿入が無効になります。

DB パラメータグループを使用して、起動パラメータとしてトレースフラグ 692 を有効にします。詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

トレースフラグ 692 は、SQL Server 2016 以降での Amazon RDS でサポートされています。トレースフラグの詳細については、Microsoft ドキュメントの [DBCC TRACEON - Trace Flags](https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql) を参照してください。

# Amazon RDS for Microsoft SQL Server DB インスタンスのデータベースの削除
<a name="Appendix.SQLServer.CommonDBATasks.DropMirrorDB"></a>

単一 AZ または マルチ AZ 配置で Microsoft SQL Server を実行している Amazon RDS DB インスタンスのデータベースを削除できます。データベースを削除するには、次のコマンドを使用します。

```
--replace your-database-name with the name of the database you want to drop
EXECUTE msdb.dbo.rds_drop_database  N'your-database-name'
```

**注記**  
コマンドでストレートの単一の引用を使用します。スマート引用はエラーを発生させます。

この手順を使用してデータベースを削除すると、Amazon RDS は、このデータベースへのすべての既存の接続とデータベースのバックアップ履歴を削除します。

他のユーザーにバックアップと復元を許可するには、次の手順に従います。

```
USE master
GO
CREATE LOGIN user1 WITH PASSWORD=N'changeThis', DEFAULT_DATABASE=master, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE msdb
GO
CREATE USER user1 FOR LOGIN user1
GO
use msdb
GO
GRANT EXECUTE ON msdb.dbo.rds_backup_database TO user1
GO
GRANT EXECUTE ON msdb.dbo.rds_restore_database TO user1
GO
```

# マルチ AZ 配置の Amazon RDS for Microsoft SQL Server データベースの名前の変更
<a name="Appendix.SQLServer.CommonDBATasks.RenamingDB"></a>

マルチ AZ を使用する Microsoft SQL Server データベースインスタンスの名前を変更するには、次の手順を使用します。

1. 最初に、DB インスタンスのマルチ AZ を無効にします。

1. `rdsadmin.dbo.rds_modify_db_name` を実行して、データベースの名前を変更します。

1. 次に、DB インスタンスのマルチ AZ ミラーリングまたは AlwaysOn 可用性グループをオンにして、元の状態に戻します。

詳細については、「[Microsoft SQL Server DB インスタンスへのマルチ AZ の追加](USER_SQLServerMultiAZ.md#USER_SQLServerMultiAZ.Adding)」を参照してください。

**注記**  
インスタンスでマルチ AZ を使用していない場合は、`rdsadmin.dbo.rds_modify_db_name` の実行前または実行後に設定を変更する必要はありません。  
リードレプリカソースインスタンスのデータベースの名前を変更することはできません。

**例: **次の例では、`rdsadmin.dbo.rds_modify_db_name` に保存された手順でデータベースの名前を **MOO** から **ZAR** に変更します。これはステートメント `DDL ALTER DATABASE [MOO] MODIFY NAME = [ZAR]` の実行に似ています。

```
EXEC rdsadmin.dbo.rds_modify_db_name N'MOO', N'ZAR'
GO
```

# Amazon RDS for SQL Server のマスターユーザーの db\$1owner ロールメンバーシップのリセット
<a name="Appendix.SQLServer.CommonDBATasks.ResetPassword"></a>

RDS for SQL Server データベースの `db_owner` ロールメンバーシップからマスターユーザーをロックし、他のデータベースユーザーがメンバーシップを付与できない場合、DB インスタンスのマスターユーザーパスワードを変更することで、失われたメンバーシップを復元できます。

DB インスタンスのマスターユーザーパスワードを変更することで、RDS は誤って取り消された可能性のある DB インスタンス内のデータベースに `db_owner` メンバーシップを付与します。DB インスタンスのパスワードは、Amazon RDS コンソール、AWS CLI コマンドの [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)、または [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) API オペレーションを使用して変更できます。DB インスタンスの変更の詳細については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

# Amazon RDS for SQL Server のライセンス終了した DB インスタンスの復元
<a name="Appendix.SQLServer.CommonDBATasks.RestoreLTI"></a>

Microsoft は、Microsoft ライセンスモビリティ情報を報告しない Amazon RDS の一部のお客様について、DB インスタンスを削除するよう要求しています。Amazon RDS では、これらの DB インスタンスのスナップショットを作成するので、そのスナップショットから、ライセンスを含んだモデルを使用する新しい DB インスタンスを復元できます。

Standard Edition のスナップショットから、Standard Edition または Enterprise Edition のいずれかに復元できます。

Enterprise Edition のスナップショットから、Standard Edition または Enterprise Edition のいずれかに復元できます。

**Amazon RDS がインスタンスの最終スナップショットを作成した後で、SQL Server のスナップショットから復元するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、[**Snapshots**] を選択します。

1. SQL Server DB インスタンスのスナップショットを選択します。Amazon RDS が、DB インスタンスの最終スナップショットを作成します。終了したインスタンスのスナップショットの名前は `instance_name-final-snapshot` の形式です。例えば、DB インスタンス名が **mytest.cdxgahslksma.us-east-1.rds.com** である場合、最終スナップショットは ** mytest-final-snapshot** という名前で、元の DB インスタンスと同じ AWS リージョン内に配置されます。

1. [**アクション**]、[**スナップショットの復元**] の順に選択します。

   [**Restore DB Instance**] ウィンドウが表示されます。

1. [**ライセンスモデル**] で、[**ライセンス込み**] を選択します。

1. 使用する SQL Server DB エンジンを選択します。

1. [**DB インスタンス識別子**] に、復元された DB インスタンスの名前を入力します。

1. [**DB インスタンスの復元**] を選択します。

スナップショットから復元する方法の詳細については、「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。

# Amazon RDS for SQL Server データベースのオフラインからオンラインへの切り替え
<a name="Appendix.SQLServer.CommonDBATasks.TransitionOnline"></a>

Amazon RDS DB インスタンスの Microsoft SQL Server データベースを `OFFLINE` から `ONLINE` に切り替えることができます。


****  

| SQL Server メソッド | Amazon RDS方法 | 
| --- | --- | 
| ALTER DATABASE *db\$1name* SET ONLINE; | EXEC rdsadmin.dbo.rds\$1set\$1database\$1online *db\$1name* | 

# Amazon RDS for SQL Server の変更データキャプチャの使用
<a name="Appendix.SQLServer.CommonDBATasks.CDC"></a>

Amazon RDS は、Microsoft SQL Server で実行されている DB インスタンスの変更データキャプチャをサポートします。CDC は、テーブル内のデータに行われる変更をキャプチャします。また、各変更に関するメタデータを保存します。これにより、後にアクセスできるようになります。CDC の動作の詳細については、Microsoft ドキュメントの「[変更データキャプチャ](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server#Capture)」を参照してください。Amazon RDS DB インスタンスで CDC を使用するには、`msdb.dbo.rds_cdc_enable_db` を実行して、データベース上で有効にします。CDC が有効になると、該当データベースの `db_owner` であるユーザーは誰でも、そのデータベースのテーブルの CDC を有効または無効にすることができます。

**重要**  
復元中、CDC は無効になります。関連するメタデータはすべて、データベースより自動的に削除されます。これは、スナップショット復元とポイントインタイムリストアに適用されます。これらの復元のいずれかを実行すると、CDC を再度有効にして、追跡するテーブルを再度指定できます。

DB インスタンスの CDC を有効にするには、`msdb.dbo.rds_cdc_enable_db` ストアドプロシージャを実行します。

```
1. exec msdb.dbo.rds_cdc_enable_db 'database_name'
```

DB インスタンスの CDC を無効にするには、`msdb.dbo.rds_cdc_disable_db` ストアドプロシージャを実行します。

```
1. exec msdb.dbo.rds_cdc_disable_db 'database_name'
```

以下の手順を使用して、ユーザーに CDC アクセス許可を付与します。

```
1. go
2. 		GRANT EXECUTE ON msdb.dbo.rds_cdc_enable_db TO User1
3. 		GRANT EXECUTE ON msdb.dbo.rds_cdc_disable_db TO User1
```

**Topics**
+ [変更データキャプチャを使用したテーブルの追跡](#Appendix.SQLServer.CommonDBATasks.CDC.tables)
+ [変更データキャプチャのジョブ](#Appendix.SQLServer.CommonDBATasks.CDC.jobs)
+ [マルチ AZ インスタンスの変更データキャプチャ](#Appendix.SQLServer.CommonDBATasks.CDC.Multi-AZ)

## 変更データキャプチャを使用したテーブルの追跡
<a name="Appendix.SQLServer.CommonDBATasks.CDC.tables"></a>

CDC がデータベースで有効になったら、特定のテーブルの追跡を開始できます。追跡するテーブルを選択するには、[sys.sp\$1cdc\$1enable\$1table](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-enable-table-transact-sql) を実行します。

```
 1. --Begin tracking a table
 2. exec sys.sp_cdc_enable_table   
 3.    @source_schema           = N'source_schema'
 4. ,  @source_name             = N'source_name'
 5. ,  @role_name               = N'role_name'
 6. 
 7. --The following parameters are optional:
 8.  
 9. --, @capture_instance       = 'capture_instance'
10. --, @supports_net_changes   = supports_net_changes
11. --, @index_name             = 'index_name'
12. --, @captured_column_list   = 'captured_column_list'
13. --, @filegroup_name         = 'filegroup_name'
14. --, @allow_partition_switch = 'allow_partition_switch'
15. ;
```

テーブルの CDC 設定を表示するには、[sys.sp\$1cdc\$1help\$1change\$1data\$1capture](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-help-change-data-capture-transact-sql) を実行します。

```
1. --View CDC configuration
2. exec sys.sp_cdc_help_change_data_capture 
3. 
4. --The following parameters are optional and must be used together.
5. --  'schema_name', 'table_name'
6. ;
```

CDC テーブル、関数、ストアドプロシージャの詳細については、SQL Server のドキュメントの以下を参照してください。
+ [変更データキャプチャのストアドプロシージャ (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/change-data-capture-stored-procedures-transact-sql)
+ [変更データキャプチャの関数 (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-functions/change-data-capture-functions-transact-sql)
+ [変更データキャプチャのテーブル (Transact-SQL)](https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/change-data-capture-tables-transact-sql)

## 変更データキャプチャのジョブ
<a name="Appendix.SQLServer.CommonDBATasks.CDC.jobs"></a>

CDC が有効になったら、SQL Server により CDC ジョブが作成されます。データベースの所有者 (`db_owner`) は CDC ジョブを表示、作成、変更、および削除することができます。ただし、所有者は RDS システムアカウントです。そのため、これらのジョブをネイティブのビュー、プロシージャ、または SQL Server Management Studio で表示することはできません。

データベースの CDC の動作をコントロールするには、SQL Server のネイティブプロシージャ ([sp\$1cdc\$1enable\$1table](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-enable-table-transact-sql)、[sp\$1cdc\$1start\$1job](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-start-job-transact-sql) など) を使用します。CDC ジョブパラメータ (`maxtrans`、`maxscans` など) を変更するには、[sp\$1cdc\$1change\$1jobs](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-change-job-transact-sql) を使用できます。

CDC ジョブに関する詳細情報を取得するには、次の動的管理ビューに対してクエリを実行します。
+ sys.dm\$1cdc\$1errors
+ sys.dm\$1cdc\$1log\$1scan\$1sessions
+ sysjobs
+ sysjobhistory

## マルチ AZ インスタンスの変更データキャプチャ
<a name="Appendix.SQLServer.CommonDBATasks.CDC.Multi-AZ"></a>

マルチ AZ インスタンスで CDC を使用する場合は、ミラーの CDC ジョブ設定がプリンシパルのいずれかと一致していることを確認します。CDC ジョブは、`database_id` にマッピングされています。セカンダリのデータベース ID がプリンシパルと異なる場合、そのジョブは正しいデータベースと関連付けられません。フェイルオーバー後のエラーを防ぐために、RDS によってジョブは削除され、新しいプリンシパルに再作成されます。再作成されたジョブでは、フェイルオーバー前に記録されたパラメータがプリンシパルによって使用されます。

このプロセスはすぐに実行されますが、RDS によって変更される前に CDC ジョブを実行できる場合があります。プリンシパルとセカンダリレプリカの間で一貫したパラメータを維持するには、次の 3 つの方法があります。
+ CDC を有効にしたすべてのデータベースに対して、同じジョブパラメータを使用する。
+ CDC ジョブ設定を変更する前に、マルチ AZ インスタンスを単一 AZ に変換する。
+ プリンシパルでパラメータを変更する場合は、必ず手動で転送する。

フェイルオーバー後に CDC ジョブを再作成するために使用される CDC パラメータを表示し、定義するには、`rds_show_configuration` および `rds_set_configuration` を使用します。

次の例では、`cdc_capture_maxtrans` のために設定された値を返します。`RDS_DEFAULT` に設定されているパラメータの場合は、RDS によって自動的に値が設定されます。

```
-- Show configuration for each parameter on either primary and secondary replicas. 
exec rdsadmin.dbo.rds_show_configuration 'cdc_capture_maxtrans';
```

セカンダリの構成を設定するには、`rdsadmin.dbo.rds_set_configuration` を実行します。この手順では、セカンダリサーバーのすべてのデータベース向けにパラメータ値を設定します。これらの設定は、フェイルオーバー後にのみ使用されます。次の例では、CDC キャプチャのジョブの `maxtrans` を *1000* に設定します。

```
--To set values on secondary. These are used after failover.
exec rdsadmin.dbo.rds_set_configuration 'cdc_capture_maxtrans', 1000;
```

プリンシパルの CDC ジョブパラメータを設定するには、代わりに [sys.sp\$1cdc\$1change\$1jobs](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sys-sp-cdc-change-job-transact-sql) を使用します。

# Amazon RDS 用 SQL Server エージェントの使用
<a name="Appendix.SQLServer.CommonDBATasks.Agent"></a>

Amazon RDS では、Microsoft SQL Server の Enterprise、Standard、または Web エディションを実行している DB インスタンスの SQL Server エージェントを使用できます。SQL Server エージェントは、ジョブと呼ばれるスケジュールされた管理タスクを実行する Microsoft Windows サービスです。SQL Server エージェントを使用して T-SQL ジョブを実行し、SQL Server DB インスタンスでインデックスの再構築、データ破損の確認、およびデータの集計を行うことができます。

SQL Server DB インスタンスを作成すると、マスターユーザーが `SQLAgentUserRole` ロールに登録されます。

SQL Server エージェントは、指定したイベントに対応し、またはオンデマンドで、スケジュールに従ってジョブを実行できます。詳細については、Microsoft ドキュメントの [SQL Server エージェント](http://msdn.microsoft.com/en-us/library/ms189237)を参照してください。

**注記**  
DB インスタンスのメンテナンスおよびバックアップウィンドウ中に実行されるジョブをスケジュールすることは避けてください。AWS によって起動されたメンテナンスおよびバックアッププロセスによって、ジョブが中断されたり、ジョブがキャンセルされたりする可能性があります。  
マルチ AZ 配置では、ジョブのレプリケーション機能がオンになっているとき、SQL Server エージェントジョブは、プライマリホストからセカンダリホストにレプリケートされます。詳細については、「[SQL Server エージェントジョブレプリケーションをオンにする](#SQLServerAgent.Replicate)」を参照してください。  
マルチ AZ 配置は、SQL Server エージェントジョブの数が 10,000 に制限されています。制限の引き上げが必要な場合は、サポート に連絡して緩和をリクエストしてください。[AWS サポート センター](https://console.aws.amazon.com/support/home#/)のページを開き、必要に応じてサインインし、[**ケースの作成**] を選択します。**[Service Limit increase]** (サービス制限の緩和) を選択します。フォームに入力して送信します。

SQL Server Management Studio (SSMS) で個々の SQL Server エージェントジョブの履歴を表示するには、オブジェクトエクスプローラーを開き、ジョブを右クリックして、[**View History**] (履歴を表示) を選択します。

SQL Server エージェントは DB インスタンスのマネージドホストで実行されているため、一部のアクションはサポートされていません。
+ ActiveX、Windows コマンドシェル、または Windows PowerShell を使用した、レプリケーションジョブの実行やコマンドラインスクリプトの実行はサポートされません。
+ SQL Server エージェントを手動で起動、停止、または再起動することはできません。
+ SQL Server エージェントを使用した E メール通知は、DB インスタンスからは使用できません。
+ SQL Server エージェントのアラートとオペレータはサポートされていません。
+ SQL Server エージェントを使用したバックアップの作成はサポートされていません。Amazon RDS を使用して DB インスタンスをバックアップします。
+ RDS for SQL Server は、現在、SQL Server エージェントトークンの使用をサポートしていません。

## SQL Server エージェントジョブレプリケーションをオンにする
<a name="SQLServerAgent.Replicate"></a>

SQL Server エージェントジョブレプリケーションは、次のストアドプロシージャを使用して有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob';
```

ストアドプロシージャは、Amazon RDS for SQL Server でサポートされているすべての SQL Server バージョンで実行できます。以下のカテゴリのジョブがレプリケートされます。
+ [未分類 (ローカル)]
+ [未分類 (マルチサーバー)]
+ [未分類]
+ データコレクター
+ データベースエンジンチューニングアドバイザー
+ データベースメンテナンス
+ フルテキスト

T-SQL ジョブステップを使用するジョブのみがレプリケートされます。SQL Server Integration Services (SSIS)、SQL Server Reporting Services (SSRS)、レプリケーション、PowerShell などのステップタイプのジョブはレプリケートされません。データベースメールとサーバーレベルのオブジェクトを使用するジョブはレプリケートされません。

**重要**  
プライマリホストは、レプリケーションの信頼できるソースです。ジョブのレプリケーションをオンにする前に、SQL Server エージェントのジョブがプライマリであることを確認してください。これを行わない場合、新しいジョブがセカンダリホスト上にあるときにこの機能をオンにすると、SQL Server エージェントのジョブが削除される可能性があります。

次の関数を使用して、レプリケーションがオンになっているかどうかを確認できます。

```
SELECT * from msdb.dbo.rds_fn_get_system_database_sync_objects();
```

 SQL Server エージェントジョブがレプリケートされている場合、T-SQL クエリは以下を返します。レプリケートしていない場合は、`object_class` に対して何も返しません。

![\[SQL Server エージェントジョブがレプリケート中\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQLAgentJob.png)


次の関数を使用して、オブジェクトが UTC 時間で最後に同期された時刻を調べることができます。

```
SELECT * from msdb.dbo.rds_fn_server_object_last_sync_time();
```

例えば、01:00 に SQL Server エージェントジョブを変更するとします。直近の同期時刻は 01:00 以降になると予想されます。これは、同期が行われたことを示します。

同期後、セカンダリノードで `date_created` と `date_modified` に返される値は一致することが期待されます。

![\[サーバーオブジェクトが前回同期された時刻は 01:21:23 でした\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/SQLAgentJob_last_sync_time.png)


`tempdb` レプリケーションも使用している場合は、`@object_type` パラメータで指定することで、SQL Agent ジョブと `tempdb` 設定の両方のレプリケーションを有効にできます。

```
EXECUTE msdb.dbo.rds_set_system_database_sync_objects @object_types = 'SQLAgentJob,TempDbFile';
```

`tempdb` レプリケーションの詳細については、「[マルチ AZ 配置の TempDB 設定](SQLServer.TempDB.MAZ.md)」を参照してください。

# SQL Server エージェントのロール
<a name="SQLServerAgent.AgentRoles"></a>

RDS for SQL Server は、ジョブを管理するためのさまざまなレベルのアクセス許可を持つ、以下の SQL Server エージェントのロールをサポートしています。
+ **SQLAgentUserRole**

  アクセス許可
  + 独自のジョブ、スケジュール、オペレーターを作成および管理する
  + 独自のジョブとスケジュールのプロパティを表示する
  + 他のユーザーが作成したジョブは表示または管理できない

  このロールは、独自のジョブを作成および管理する必要があるが、他のユーザーが作成したジョブへのアクセスを必要としないユーザーに適しています。
+ **SQLAgentReaderRole**

  アクセス許可
  + SQLAgentUserRole のすべてのアクセス許可
  + すべてのジョブとスケジュール (他のユーザーが作成したものを含む) を一覧表示する
  + すべてのジョブのプロパティを表示する
  + ジョブ履歴を確認する

  このロールは、すべてのジョブのステータスをモニタリングする必要があるが、ジョブを管理する必要がないユーザーに適しています。
+ **SQLAgentOperatorRole**

  アクセス許可
  + SQLAgentUserRole と SQLAgentReaderRole のすべてのアクセス許可
  + ジョブを実行、停止、または開始する
  + ジョブ履歴を管理する
  + ジョブとスケジュールを有効/無効にする
  + オペレーターとプロキシを表示する

  このロールは、最も包括的なアクセス許可を提供するものであり、すべてのジョブを完全に制御する必要があるユーザーに適しています。

SQL Server ログインにロールを割り当てるには、次のコマンドを使用します。

```
USE msdb;
EXEC sp_addrolemember 'SQLAgentOperatorRole', 'username';
```

## RDS for SQL Server での SQLAgentOperatorRole の管理
<a name="SQLServerAgent.AgentRoles.ManageSQLAgentOperatorRole"></a>

現在のジョブを表示するには、SQLAgentOperatorRole を SQL Server ログインに追加し、データベースから切断する前にそれを削除する必要があります。

SQL Server Management Studio で SQL Server エージェントツリーを視覚化するには、次の手順に従います。

**SQL Server Management Studio (SSMS) で SQL Server エージェントを表示する**

1. RDS マスター認証情報を使用して RDS SQL Server インスタンスにログインし、目的のユーザーに SQLAgentUserRole を付与します。

   ```
   USE msdb
   GO
   IF NOT EXISTS(SELECT name FROM sys.database_principals WHERE name = 'UserName')
   BEGIN
   CREATE USER UserName FROM LOGIN UserName
   END
   GO
   ALTER ROLE SQLAgentUserRole ADD MEMBER UserName
   GO
   GRANT ALTER ON ROLE::[SQLAgentOperatorRole] to UserName
   GO
   ```

   これらのコマンドは、`msdb` データベースにユーザーが存在しない場合に作成します。また、SQLAgentUserRole にユーザーを追加し、SQL Server エージェントツリーを SSMS で表示できるようにします。最後に、SQLAgentOperatorRole に対する変更アクセス許可をユーザーに付与します。これにより、ユーザーはロールに対して自身を追加または削除できます。

1. 上記のロールに自分自身を追加するには、ジョブを表示する必要があるユーザーを使用して RDS SQL Server インスタンスに接続し、次のスクリプトを実行します。

   ```
   use msdb
   go
   ALTER ROLE SQLAgentOperatorRole ADD MEMBER UserName
   GO
   ```

   次に、**[ジョブ]** フォルダを右クリックし、**[更新]** を選択します。

1. このアクションを実行すると、**[ジョブ]** タブに **[\$1]** (プラス) ボタンが表示されます。クリックして SQL Server エージェントジョブのリストを展開します。

1. 
**重要**  
RDS SQL Server インスタンスから切断する前に、SQLAgentOperatorRole から自分自身を削除する必要があります。

   SQLAgentOperatorRole からログインを削除するには、Management Studio を切断または終了する前に次のクエリを実行します。

   ```
   USE msdb
   GO
   ALTER ROLE SQLAgentOperatorRole DROP MEMBER UserName
   GO
   ```

詳細については、「[RDS SQL Server での SQLAgentOperatorRole の活用](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/)」を参照してください。

# SQLAgentUser ロールへのユーザーの追加
<a name="SQLServerAgent.AddUser"></a>

SQL Server エージェントにログインまたはユーザーを追加できるようにするには、マスターユーザーとしてログインし、次の操作を行ってください。

1. `CREATE LOGIN` コマンドを使用して、別のサーバーレベルログインを作成します。

1. `msdb` コマンドを使用して `CREATE USER` にユーザーを作成し、このユーザーを前の手順で作成したログインにリンクします。

1. `SQLAgentUserRole` システムストアドプロシージャを使用して、`sp_addrolemember` にユーザーを追加します。

例えば、マスターユーザー名が **admin** で、ユーザー名が **theirname**、パスワードが **theirpassword** のユーザーに SQL Server エージェントへのアクセスを許可するとします。その場合は、以下の手順を使用できます。

**SQLAgentUser ロールにユーザーを追加するには**

1. マスターユーザーとしてログインします。

1. 以下のコマンドを実行します。

   ```
   --Initially set context to master database
   USE [master];
   GO
   --Create a server-level login named theirname with password theirpassword
   CREATE LOGIN [theirname] WITH PASSWORD = 'theirpassword';
   GO
   --Set context to msdb database
   USE [msdb];
   GO
   --Create a database user named theirname and link it to server-level login theirname
   CREATE USER [theirname] FOR LOGIN [theirname];
   GO
   --Added database user theirname in msdb to SQLAgentUserRole in msdb
   EXEC sp_addrolemember [SQLAgentUserRole], [theirname];
   ```

# SQL Server エージェントジョブの削除
<a name="SQLServerAgent.DeleteJob"></a>

`sp_delete_job` ストアドプロシージャを使用して、Amazon RDS for Microsoft SQL Server の SQL Server エージェントジョブを削除します。

SSMS を使用して SQL Server エージェントジョブを削除することはできません。これを試みると、次のようなエラーメッセージが表示されます。

```
The EXECUTE permission was denied on the object 'xp_regread', database 'mssqlsystemresource', schema 'sys'.
```

マネージド型サービスとしての RDS では、Windows レジストリにアクセスする手順の実行が制限されています。SSMS を使用すると、RDS が承認されていないプロセス (`xp_regread`) の実行を試みます。

**注記**  
RDS for SQL Server では、sysadmin ロールのメンバーのみが、別のログインが所有するジョブを更新または削除できます。詳細については、「[RDS SQL Server での SQLAgentOperatorRole の活用](https://aws.amazon.com/blogs/database/leveraging-sqlagentoperatorrole-in-rds-sql-server/)」を参照してください。

**SQL Server エージェントジョブを削除するには**
+ 次の T-SQL ステートメントを実行します。

  ```
  EXEC msdb..sp_delete_job @job_name = 'job_name';
  ```

# Amazon RDS for Microsoft SQL Server ログの使用方法
<a name="Appendix.SQLServer.CommonDBATasks.Logs"></a>

Amazon RDS コンソールを使用して、SQL Server エージェントのログ、Microsoft SQL Server のエラーログ、SQL Server Reporting Services (SSRS) のログを表示、監視、ダウンロードすることができます。

## ログファイルの監視
<a name="Appendix.SQLServer.CommonDBATasks.Logs.Watch"></a>

Amazon RDS コンソールでログを表示すると、その時点で存在しているログの内容を表示できます。コンソールでログを監視すると、動的な状態でログが表示され、ほぼリアルタイムでログの更新を確認できます。

監視の対象としてアクティブになるのは最新のログのみです。例えば、以下に示すようなログがあるとします。

![\[エラーログが選択された Amazon RDS コンソールのログセクションの画像。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/logs_sqlserver.png)


最新のログである log/ERROR のみがアクティブに更新されています。他のログを表示することもできますが、静的であり、更新されません。

## ログファイルのアーカイブ
<a name="Appendix.SQLServer.CommonDBATasks.Logs.Archive"></a>

Amazon RDS コンソールには、過去 1 週間と当日のログが表示されます。ログをダウンロードしてアーカイブし、過去のリファレンスとして保持できます。ログをアーカイブする方法の 1 つとして、Amazon S3 バケットにログをロードする方法があります。Amazon S3 バケットをセットアップしてファイルをアップロードする方法については、*Amazon Simple Storage Service 入門ガイド*の「[Amazon S3 の基礎](https://docs.aws.amazon.com/AmazonS3/latest/userguide/AmazonS3Basics.html)」を参照し、[**開始方法**] をクリックしてください。

## エラーログとエージェントログの表示
<a name="Appendix.SQLServer.CommonDBATasks.Logs.SP"></a>

Microsoft SQL Server のエラーログおよびエージェントログを表示するには、以下のパラメータで Amazon RDS ストアドプロシージャ `rds_read_error_log` を使用します。
+ **`@index`** – 取得するログのバージョン。デフォルト値は 0 で、現在のエラーログを取得します。以前のログを取得するには 1、さらにもう一つ前のログを取得するには 2、という方法で指定します。
+ **`@type`** – 取得するログのタイプ。エラーログを取得するには、1 を指定します。エージェントログを取得するには、2 を指定します。

**Example**  
以下の例では現在のエラーログをリクエストします。  

```
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;
```

SQL Server エラーの詳細については、Microsoft ドキュメントの [Database engine errors](https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/database-engine-events-and-errors) を参照してください。

# Amazon RDS for SQL Server のトレースファイルとダンプファイルの使用
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles"></a>

このセクションでは、Microsoft SQL Server を実行する Amazon RDS DB インスタンスのトレースファイルとダンプファイルの操作について説明します。

## トレース SQL クエリを生成する
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.TraceSQLQuery"></a>

```
1. declare @rc int 
2. declare @TraceID int 
3. declare @maxfilesize bigint 
4. 
5. set @maxfilesize = 5
6. 
7. exec @rc = sp_trace_create @TraceID output,  0, N'D:\rdsdbdata\log\rdstest', @maxfilesize, NULL
```

## オープントレースを表示する
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.ViewOpenTrace"></a>

```
1. select * from ::fn_trace_getinfo(default)
```

## トレースの内容を表示する
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.ViewTraceContents"></a>

```
1. select * from ::fn_trace_gettable('D:\rdsdbdata\log\rdstest.trc', default)
```

## トレースファイルおよびダンプファイルの保持期間を設定する
<a name="Appendix.SQLServer.CommonDBATasks.TraceFiles.PurgeTraceFiles"></a>

トレースファイルとダンプファイルが蓄積されて、ディスク領域を消費することがあります。デフォルトでは、Amazon RDS では、7 日を経過したトレースファイルとダンプファイルは消去されます。

現在のトレースファイルとダンプファイルの保持期間を表示するには、以下の例に示すように、`rds_show_configuration` の手順を使用します。

```
1. exec rdsadmin..rds_show_configuration;
```

トレースファイルの保持期間を変更するには、`rds_set_configuration` プロシージャを使用し、`tracefile retention` を分単位で設定します。以下の例では、トレースファイルの保持期間を 24 時間に設定しています。

```
1. exec rdsadmin..rds_set_configuration 'tracefile retention', 1440; 
```

ダンプファイルの保持期間を変更するには、`rds_set_configuration` プロシージャを使用し、`dumpfile retention` を分単位で設定します。以下の例では、ダンプファイルの保持期間を 3 日に設定しています。

```
1. exec rdsadmin..rds_set_configuration 'dumpfile retention', 4320; 
```

セキュリティ上の理由から、SQL Server DB インスタンスの特定のトレースファイルまたはダンプファイルを削除することはできません。未使用のトレースファイルまたはダンプファイルをすべて削除するには、ファイルの保持期間を 0 に設定します。