【问题标题】:Where to find the sqljdbc_xa.dll file?在哪里可以找到 sqljdbc_xa.dll 文件?
【发布时间】:2016-05-18 07:15:47
【问题描述】:

我正在尝试为在 Windows server 2008 R2 上运行的 MS sql server 2008 启用 XA 事务。

为此,我必须将 SQLJDBC_XA.dll 文件从 JDBC 安装目录复制到 Binn 目录。

此数据库服务器在磁盘的任何位置都没有任何此类文件,并且我无权访问安装 CD。有什么办法可以得到这个特定的文件?

【问题讨论】:

标签: sql-server jdbc dll xa


【解决方案1】:

为 SQL Server 启用 XA 事务是一个不明显的过程,涉及:

(a) 进入组件服务 > 分布式事务 > 本地 DTC 并勾选一个框以启用 XA 交易: 看 https://blogs.msdn.microsoft.com/dataaccesstechnologies/2011/10/26/how-a-dba-can-confirm-if-microsoft-jdbc-xa-transactions-are-set/

(b) 您必须复制与数据库分离的 DLL。下载最新的 jdbc 驱动程序(例如 6.0)。 转到您的 SQL Server 安装文件夹并搜索: 宾恩。

你会发现一个 binn 文件夹,里面已经有 dll。 例如。 somePath\MicrosoftSQLServer_InstanceRoot\MSSQL12.SQLEXPRESS\MSSQL\Binn

粘贴适当的: sqljdbc_6.0\enu\xa\x64\sqljdbc_xa.dll 如果您有 64 位特快版,请在其中安装 DLL。 否则,请使用 32 位 dll。

如果你把 dll 放在错误的文件夹中,你会得到一个:

XAConnection java.sql.SQLException:XA 错误:XAResource.XAER_RMERR start() 在资源“someAppDatasource”上失败:XAER_RMERR:A 事务分支发生资源管理器错误 javax.transaction.xa.XAException: com.microsoft.sqlserver.jdbc.SQLServerException:无法加载 DLL SQLJDBC_XA.dll,或它引用的 DLL 之一。原因:126( 找不到指定的模块。)。在 com.microsoft.sqlserver.jdbc.SQLServerXAResource.DTC_XA_Interface(SQLServerXAResource.java:742) 在 com.microsoft.sqlserver.jdbc.SQLServerXAResource.start(SQLServerXAResource.java:774)

c) 你还会得到一个 xa_install.sql 这是驱动程序附带的。 您将不得不运行该 sql。 它将创建一个用户角色。

(d) 您需要转到您使用的并选择数据库主机,然后选择为 XA 事务创建的新用户角色。

抱歉,SQL Server 并没有让 XA 事务的启用变得简单……无论出于何种原因,您都必须到处打勾才能使其工作。

【讨论】:

  • 谢谢!非常有用的答案,由于文件位置错误,我遇到了同样的错误!
【解决方案2】:

根据我的评论,JDBC SQL Server 驱动程序可以从https://msdn.microsoft.com/en-us/library/mt484311(v=sql.110).aspx 下载,其中还包含配置等说明。

【讨论】:

    【解决方案3】:

    请参考链接:https://docs.microsoft.com/en-us/sql/connect/jdbc/understanding-xa-transactions?view=sql-server-ver15

    JDBC XA 分布式事务组件包含在 SQL Server 2017(从累积更新 16 开始)和 SQL Server 2019 的 SQL Server 引擎中,并且可以通过系统存储过程启用或禁用。不需要驱动程序中的 sqjdbc_xa.dll,建议为这些服务器版本启用服务器组件。要使所需组件能够使用 JDBC 驱动程序执行 XA 分布式事务,请执行以下存储过程。

    在 SQL Server 17 及更高版本上,请执行以下 2 个步骤

    Step1--> 运行程序:EXEC sp_sqljdbc_xa_install

    Step2-->要为 XA 事务启用 MS DTC,请按照上面链接中的步骤操作。

    Step3-->在masterdb上执行下面的sql: 使用大师

    EXEC sp_grantdbaccess 'testuser', 'testuser'

    EXEC sp_addrolemember [SqlJDBCXAUser], 'testuser'

    【讨论】:

      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多