

# RDS for SQL Server 中的 Microsoft 分布式事务处理协调器支持
<a name="Appendix.SQLServer.Options.MSDTC"></a>

*分布式事务*是涉及两个或多个网络主机的数据库事务。RDS for SQL Server 支持在主机之间存在分布式事务，其中一个主机可以是以下之一：
+ RDS for SQL Server DB 实例
+ 本地 SQL Server 主机
+ 安装了 SQL Server 的 Amazon EC2 主机
+ 具有支持分布式事务的数据库引擎的任何其他 EC2 主机或 RDS 数据库实例

在 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)
  + [将选项组和参数组与数据库实例关联](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：
+ 使用 SQL Server 数据库镜像的实例上不支持 MSDTC。有关详细信息，请参阅[事务 – 可用性组和数据库镜像](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 服务器。
+ SQL Server 2017 版本 14.00.3223.3 及更高版本和 SQL Server 2019 支持 Java Database Connectivity (JDBC) XA 事务。
+ 依赖于 RDS 实例上的客户端动态链接库 (DLL) 的分布式事务不受支持。
+ 不支持使用自定义 XA 动态链接库。

# 启用 MSDTC
<a name="Appendix.SQLServer.Options.MSDTC.Enabling"></a>

使用以下过程为数据库实例启用 MSDTC：

1. 创建新的选项组或选择现有的选项组。

1. 将 `MSDTC` 选项添加到该选项组。

1. 创建新的参数组，或选择现有参数组。

1. 修改参数组以将 `in-doubt xact resolution` 参数设置为 1 或 2。

1. 将选项组和参数组与数据库实例关联。

## 为 MSDTC 创建选项组
<a name="Appendix.SQLServer.Options.MSDTC.OptionGroup"></a>

使用 AWS 管理控制台 或 AWS CLI 创建对应于 SQL Server 引擎和数据库实例版本的选项组。

**注意**  
如果现有选项组针对的是正确的 SQL Server 引擎和版本，也可以使用现有选项组。

### 控制台
<a name="OptionGroup.MSDTC.Console"></a>

以下控制台过程创建适用于 SQL Server 标准版 2016 的选项组。

**创建选项组**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**选项组**。

1. 选择**创建组**。

1. 在**创建选项组**窗格中，执行以下操作：

   1. 对于**名称**，输入选项组的名称，该名称在 AWS 账户内具有唯一性，例如 **msdtc-se-2016**。此名称只能包含字母、数字和连字符。

   1. 对于**描述**，输入选项组的简要描述，例如 **MSDTC option group for SQL Server SE 2016**。此说明用于显示说明。

   1. 对于**引擎**，选择 **sqlserver-se**。

   1. 对于**主要引擎版本**，选择 **13.00**。

1. 选择**创建**。

### CLI
<a name="OptionGroup.MSDTC.CLI"></a>

以下示例为 SQL Server 标准版 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 的端口。允许的值为 1150–49151，但不包括 1234、1434、3260、3343、3389 和 47001。默认值是 5000。

  确保在防火墙规则中启用了要使用的端口。此外，请确保根据需要，在与数据库实例关联的安全组的入站和出站规则中启用了此端口。有关更多信息，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。
+ **Security groups**（安全组）– RDS 数据库实例的 VPC 安全组成员。
+ **身份验证类型** – 主机之间的身份验证模式。支持以下身份验证类型：
  + 双向 – RDS 实例使用集成身份验证双向进行身份验证。如果选择此选项，则与此选项组关联的所有实例都必须加入域。
  + 无 – 主机之间不进行身份验证。我们建议不要在生产环境中使用此模式。
+ **事务日志大小** – MSDTC 事务日志的大小。允许的值为 4–1024 MB。默认大小为 4 MB。

以下选项设置可选：
+ **启用入站连接** – 是否允许指向与此选项组关联的实例的入站 MSDTC 连接。
+ **启用出站连接** – 是否允许来自与此选项组关联的实例的出站 MSDTC 连接。
+ **启用 XA** – 是否允许 XA 事务。有关 XA 协议的更多信息，请参阅 [XA 规范](https://publications.opengroup.org/c193)。
+ **启用 SNA LU** – 是否允许将 SNA LU 协议用于分布式事务。有关 SNA LU 协议支持的更多信息，请参阅 Microsoft 文档中的[管理 IBM CICS LU 6.2 事务](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. 对于 **Security groups (安全组)**，请选择要与选项关联的 VPC 安全组。

   1. 对于**身份验证类型**，请选择**双向**或**无**。

   1. 对于**事务日志大小**，请输入 4–1024 之间的值。默认值为 **4**。

1. 在**其他配置**下，执行以下操作：

   1. 对于**连接**，根据需要选择**启用入站连接**和**启用出站连接**。

   1. 对于**允许的协议**，根据需要选择**启用 XA** 和**启用 SNA LU**。

1. 在 **计划 (Scheduling)** 下，选择是立即添加选项还是在下一个维护时段添加选项。

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>

为与 SQL Server 版本和数据库实例版本对应的 `in-doubt xact resolution` 参数创建或修改参数组。

### 控制台
<a name="CreateParamGroup.MSDTC.Console"></a>

以下示例为 SQL Server 标准版 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. 选择**创建**。

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

以下示例为 SQL Server 标准版 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>

修改与 SQL Server 版本和数据库实例版本对应的参数组中的 `in-doubt xact resolution` 参数。

对于 MSDTC，将 `in-doubt xact resolution` 参数设置为以下选项之一：
+ `1` – `Presume commit`。任何 MSDTC 有疑问的事务都假定为已经提交。
+ `2` – `Presume abort`。任何 MSDTC 有疑问的事务都假定为已停止。

有关更多信息，请参阅 Microsoft 文档中的[有疑问的 Xact 解析服务器配置选项](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 标准版 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 (有疑问的 Xact 解析)**。

1. 选择**编辑参数**。

1. 输入 **1** 或 **2**。

1. 选择 **Save changes（保存更改）**。

### CLI
<a name="ModifyParam.MSDTC.CLI"></a>

以下示例修改您为 SQL Server 标准版 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"
  ```

## 将选项组和参数组与数据库实例关联
<a name="MSDTC.Apply"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 将 MSDTC 选项组和参数组与数据库实例相关联。

### 控制台
<a name="MSDTC.Apply.Console"></a>

您可以将 MSDTC 选项组和参数组与新的或现有的数据库实例相关联。
+ 对于新数据库实例，请在启动实例时将其关联。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
+ 对于现有数据库实例，请通过修改实例将其关联。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。
**注意**  
如果您使用加入域的现有数据库实例，则该实例必须已经关联了 Active Directory 域和 AWS Identity and Access Management (IAM) 角色。如果您创建新的加入域实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅 [将 AWS Managed Active Directory 用于 RDS for SQL Server](USER_SQLServerWinAuth.md)。

### CLI
<a name="MSDTC.Apply.CLI"></a>

您可以将 MSDTC 选项组和参数组与新的或现有的数据库实例相关联。

**注意**  
如果您使用现有的加入域数据库实例，则该实例必须已经关联了 Active Directory 域和 IAM 角色。如果您创建新的加入域实例，请指定现有的 Active Directory 域和 IAM 角色。有关更多信息，请参阅“[将 AWS Managed Active Directory 用于 RDS for SQL Server](USER_SQLServerWinAuth.md)”。

**使用 MSDTC 选项组和参数组创建数据库实例**
+ 指定创建选项组时使用的相同数据库引擎类型和主要版本。  
**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
  ```

**修改数据库实例并关联 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` 可提升事务，它通过将分布式事务的创建推迟到在需要时进行，以此优化分布式事务。

  在这种情况下，提升是自动的，不需要您进行任何干预。如果事务中只有一个资源管理器，则不执行任何提升。有关隐式事务范围的更多信息，请参阅 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 文档中的 [System.Transactions 与 SQL Server 的集成](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/system-transactions-integration-with-sql-server)。
  + ODP.NET 支持 `System.Transactions`。将为在 `TransactionsScope` 范围内与 Oracle Database 11g 发行版 1（版本 11.1）及更高版本建立的第一个连接创建一个本地事务。建立第二个连接时，此事务将自动提升为分布式事务。有关 ODP.NET 中的分布式事务支持的更多信息，请参阅 Microsoft 文档中的 [Microsoft 分布式事务处理协调器集成](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 数据库实例下载它们以进行故障排除。您可以通过运行以下 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 启动跟踪操作示例**  
要启动新的事务跟踪会话，请运行以下示例语句。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'START',
@traceall='0',
@traceaborted='1',
@tracelong='1';
```
一次只能有一个活动的事务跟踪会话。如果在有跟踪会话处于活动状态时发出了新的跟踪会话 `START` 命令，则返回错误，并且活动的跟踪会话保持不变。

**Example 停止跟踪操作示例**  
要停止事务跟踪会话，请运行以下语句。  

```
exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'
```
此语句停止活动的事务跟踪会话，并将事务跟踪数据保存到 RDS 数据库实例上的日志目录中。输出的第一行包含整体结果，后面的行表示操作的详细信息。  
以下是成功跟踪会话停止的示例。  

```
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 数据库实例下载日志文件的更多信息，请参阅 [监控 Amazon RDS 日志文件](USER_LogAccess.md)。  
跟踪会话日志在实例上保留 35 天。任何较旧的跟踪会话日志都会自动删除。

**Example 状态跟踪操作示例**  
要跟踪事务跟踪会话的状态，请运行以下语句。  

```
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. 选择 **Delete option (删除选项)**。

1. 在**删除选项**下，为**待删除的选项**选择 **MSDTC**。

1. 在 **Apply immediately (立即应用)** 下，选择 **Yes (是)** 可立即删除选项，选择 **No (否)** 可在下次维护时段时删除。

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 数据库实例上运行的 MSDTC 服务之间建立连接。如果是这样，请确保满足以下条件：
+ 与数据库实例关联的安全组的入站规则配置正确。有关更多信息，请参阅“[无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)”。
+ 您的客户端计算机配置正确。
+ 客户端计算机上的 MSDTC 防火墙规则已启用。

**配置客户端计算机**

1. 打开**组件服务**。

   或者，在**服务器管理器**中，选择**工具**，然后选择**组件服务**。

1. 展开**组件服务**，展开**计算机**，展开 **我的电脑**，然后展开**分布式事务处理协调器**。

1. 打开 **Local DTC (本地 DTC)** 的上下文（右键单击）菜单，然后选择 **Properties (属性)**。

1. 选择**安全性**选项卡。

1. 选择以下所有选项：
   + **网络 DTC 访问**
   + **允许入站**
   + **允许出站**

1. 确保选择了正确的身份验证模式：
   + **需要双向身份验证** – 客户端计算机与参与分布式事务的其他节点加入到同一个域中，或者在域之间配置了信任关系。
   + **无需身份验证** – 所有其他情况。

1. 选择**确定**以保存您的更改。

1. 如果系统提示您重新启动服务，请选择**是**。

**启用 MSDTC 防火墙规则**

1. 打开 Windows 防火墙，然后选择**高级设置**。

   打开**服务器管理器**，选择**工具**，然后选择**高级安全 Windows 防火墙**。
**注意**  
根据您的操作系统，Windows 防火墙可能称为 Windows Defender 防火墙。

1. 在左侧窗格中选择**入站规则**。

1. 如果尚未启用以下防火墙规则，请启用：
   + **分布式事务处理协调器 (RPC)**
   + **分布式事务处理协调器 (RPC) - EPMAP**
   + **分布式事务处理协调器 (TCP-In)**

1. 关闭 Windows 防火墙。