配置 SQL Server 的 XA 事务

您必须在安装 Microsoft SQL Server 数据库之后,启动服务器之前配置 XA 事务。SQL Server JDBC 驱动程序为提供对 Java Platform, Enterprise Edition/JDBC 2.0 可选分布式事务的支持。从 SQLServerXADataSource 类获取的 JDBC 连接可参与标准分布式事务处理环境,如 Java 平台、Enterprise Edition (Java EE) 应用程序服务器。

关于此任务

配置 XA 事务失败可能会在服务器启动时导致以下错误:javax.transaction.xa.XAException: com.microsoft.sqlserver.jdbc.SQLServerException: Failed to create the XA control connection. Error: "Could not find stored procedure 'master..xp_sqljdbc_xa_init_ex'."..

在 Service Manager 中,应将 MS DTC 服务标记为“自动”,以确保在 SQL Server 服务启动时运行 MS DTC 服务。

过程

  1. 要为 XA 事务启用 MS DTC,请完成以下步骤:
    1. 选择控制面板 > 管理工具 > 组件服务
    2. 选择分布式事务协调程序组件服务 > 计算机 > 我的计算机
    3. 右键单击本地 DTC,然后选择属性
    4. 单击本地 DTC 属性窗口上的安全性选项卡。
    5. 选中启用 XA 事务复选框,然后单击确定。这将重新启动 MS DTC 服务。
    6. 再次单击确定以关闭“属性”窗口,然后关闭“组件服务”。
    7. 重新启动 SQL Server 以确保它与 MS DTC 更改同步。
  2. 配置 JDBC 分布式事务组件:
    1. 如果您尚未安装 IBM® Business Process Manager,请从 Microsoft Web 站点下载 Microsoft SQL Server JDBC Driver 4.0,并将其解压至任意文件夹。
    2. 如果已安装 BPM,请转至 bpm_install_root/jdbcdrivers/SQLServer/xa 以获取以下步骤中需要的文件:
      • sqljdbc_xa.dll 文件复制到 SQL Server 计算机的 Binn 目录(对于缺省 SQL Server 安装,该位置为 C:/Program Files/Microsoft SQL Server/MSSQL12.MSSQLSERVER/MSSQL/Binn)。使用 x64 文件夹中的 sqljdbc_xa.dll 文件。
      • 在 SQL Server 上运行 xa_install.sql 数据库脚本。例如,从命令提示符中运行 sqlcmd -i xa_install.sql。该脚本会安装由 sqljdbc_xa.dll 调用的扩展存储过程。这些扩展存储过程会针对 Microsoft SQL Server JDBC 驱动程序实施分布式事务和 XA 支持。您将需要以 SQL Server 实例管理员的身份运行该脚本。您可以忽略有关无法删除不存在的过程的错误。

下一步做什么

在配置 XA 事务之后,启动服务器之前,必须使用以下步骤配置您的 TCP/IP 连接:
  1. 从“开始”菜单中依次单击 Microsoft SQL Server 2014 > 配置工具 > SQL Server 配置管理器
  2. 展开 SQL Server 网络配置 > SQL2014 协议
  3. 找到右侧的 TCP/IP
  4. 双击 TCP/IP 并在协议选项卡下启用此协议。
  5. 双击 IP 地址选项卡,为各个已配置的 IP 地址启用 TCP 端口。
在某些情况中,您还可以在 IBM BPM SystemOut.logs 中看到以下锁定超时错误:
Lock request time out period exceeded.; nested exception
is com.microsoft.sqlserver.jdbc.SQLServerException:
  Lock request time out period exceeded.
要防止发生锁定超时(或者在锁定超时发生之后进行解决),您可以在事务服务上添加定制属性 ENABLE_XARESOURCE_TIMEOUT。事务服务将在全局事务中列出 XA 资源时为其提供相应的超时值。有关 ENABLE_XARESOURCE_TIMEOUT 定制属性的信息可在主题事务服务定制属性中找到。