

# 启用 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 服务。此要求可能会影响正在运行的分布式事务。