

# 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` を高い値に設定します。