在哪里可以找到 sqljdbc_xa.dll 文件?

Where to find the sqljdbc_xa.dll file?

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

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

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

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

为 SQL 服务器启用 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 服务器安装文件夹并搜索: 宾.

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

粘贴合适的: sqljdbc_6.0\enu\xa\x64\sqljdbc_xa.dll Dll 在那里,如果你有 64 位 Express 版本。 否则,使用 32 位 dll。

如果您将 dll 放在错误的文件夹中,您将得到:

XAConnection java.sql.SQLException: XA error: XAResource.XAER_RMERR start() failed on resource 'someAppDatasource': XAER_RMERR : A resource manager error has occurred in the transaction branch javax.transaction.xa.XAException: com.microsoft.sqlserver.jdbc.SQLServerException: Could not load the DLL SQLJDBC_XA.dll, or one of the DLLs it references. Reason: 126(The specified module could not be found.). at com.microsoft.sqlserver.jdbc.SQLServerXAResource.DTC_XA_Interface(SQLServerXAResource.java:742) at com.microsoft.sqlserver.jdbc.SQLServerXAResource.start(SQLServerXAResource.java:774)

c) 你也会得到一个 xa_install.sql 随驱动程序一起提供。 你将不得不 运行 那 sql。 它将创建一个用户角色。

(d) 您需要转到您使用过的 select 数据库主数据库,以及 select 为 XA 事务创建的新用户角色。

抱歉,但是 SQL 服务器并没有使启用 XA 事务变得简单......无论出于何种原因,您都必须跳到所有勾选框才能使其工作。

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

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

在 SQL 服务器 17 之后,执行以下 2 个步骤

Step1--> 运行 程序:EXEC sp_sqljdbc_xa_install

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

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

执行 sp_grantdbaccess 'testuser', 'testuser'

EXEC sp_addrolemember [SqlJDBCXAUser], 'testuser'