SQLServer 挂起使用“xplog70.dll”版本“xxx”执行扩展存储过程“xp_msver”

Kyl*_*ure 5 java sql-server jdbc docker

系统信息:操作系统:macOS Catalina 10.15.2Windows 10

Docker 镜像:mcr.microsoft.com/mssql/server:2019-CU2-ubuntu-16.04(2019 GA 也有同样的问题)

JDBC 驱动程序: com.microsoft.sqlserver:mssql-jdbc:8.2.1.jre8

上下文:在 docker 容器中运行数据库并通过 JDBC 驱动程序访问。
我使用https://github.com/testcontainers/testcontainers-java/ api启动 docker 容器

行为:数据库启动正常,我得到:

[01/24/2020 14:53:23:405 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:53:23.41 spid12s     Clearing tempdb database.
Run Code Online (Sandbox Code Playgroud)

然后我执行一个 init-sqlserver.sql 文件来启用 jdbc xa 连接:

[01/24/2020 14:53:23:405 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:53:23.41 spid12s     Clearing tempdb database.
Run Code Online (Sandbox Code Playgroud)

我得到

...
[01/24/2020 14:53:23:969 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:53:23.97 spid52      Starting up database 'TEST'.
...
[01/24/2020 14:53:24:377 CST] 001 ScriptUtils                    executeDatabaseScript          I Executed database script from resources/init-sqlserver.sql in 855 ms.
[01/24/2020 14:53:25:029 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:53:25.04 spid25s     The tempdb database has 6 data file(s).
Run Code Online (Sandbox Code Playgroud)

当我实际尝试使用 xa 连接时,我得到:

[01/24/2020 14:53:47:496 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:53:47.49 spid53      Initializing Microsoft Distributed Transaction Coordinator (MS DTC) resource manager [820e1ea9-c921-4350-897e-a7534d9d1ed7] for server instance 8b0aca425794. This is an informational message only. No user action is required.
[01/24/2020 14:53:47:504 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:53:47.50 spid53      Recovery of any in-doubt distributed transactions involving Microsoft Distributed Transaction Coordinator (MS DTC) has completed. This is an informational message only. No user action is required.
[01/24/2020 14:59:44:692 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:59:44.71 spid62      Attempting to load library 'xplog70.dll' into memory. This is an informational message only. No user action is required.
[01/24/2020 14:59:44:742 CST] 051 SQLServerContainer             output                         I 
2020-01-24 20:59:44.76 spid62      Using 'xplog70.dll' version '2019.150.4003' to execute extended stored procedure 'xp_msver'. This is an informational message only; no user action is required.
Run Code Online (Sandbox Code Playgroud)

我无限期地坚持最后一部分。您还可以看到两个台阶之间有大约 6 分钟的时间。

我想在我的源代码中完成什么:

-- Create database
CREATE DATABASE TEST;

-- Enable XA connections
EXEC sp_sqljdbc_xa_install;
Run Code Online (Sandbox Code Playgroud)

问题:

  1. MSDTC 的初始化不应该是在EXEC sp_sqljdbc_xa_install;存储过程的执行 过程中发生的吗?
  2. 为什么存储过程之间会有这么长的延迟?
  3. 为什么我们挂在最后一个存储过程上?
  4. 这是 docker 映像还是 JDBC 驱动程序的问题?(这适用于 derby、db2、postgres 和 oracle)

小智 0

出于安全原因,SQL Server 可能默认禁用一个或多个扩展存储过程。

如果这是非生产开发环境,您是否尝试使用 SQL Server 管理员帐户连接到 SQL Server?