

# 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 ファイアウォールを閉じます。