为 MSSQL Server docker 映像启用 XA 事务

Posted

技术标签:

【中文标题】为 MSSQL Server docker 映像启用 XA 事务【英文标题】:Enable XA transactions for MSSQL Server docker image 【发布时间】:2016-11-30 23:17:54 【问题描述】:

我有用于开发的 MSSQL Server Linux docker 映像,我需要在此实例上启用 XA 事务,我搜索了很多,但我找到的所有教程都只显示了如何从 Windows 机器上做到这一点,没有 Linux。

那么如何从命令行启用 XA 事务,或者是否有配置文件。

【问题讨论】:

XA 事务似乎依赖于分布式事务协调器服务 (MSDTC)。这是一个独立于 SQL Server 的 Windows 服务。我找不到任何权威文档,但我怀疑 MSDTC 在预览版 1 中可用作 Linux 守护程序(并且可能永远不会)。您几乎肯定需要在 Windows VM(而不是 Docker)中运行 SQL Server 才能使用 XA 事务。 感谢 Ed,感谢您的帮助。最后我确实使用了虚拟机。 它终于被添加了,一切都应该在 Ubuntu 18.04 中运行。不过,我不确定如何找到这些图像。参考:github.com/MicrosoftDocs/sql-docs/issues/4042 对于任何来此评论的人:可以在hub.docker.com/_/microsoft-mssql-server找到他们 【参考方案1】:

在 SQLServer 2016 和 2017 for Linux 中,无法使用 XA 事务。从适用于 Linux 的 SqlServer 2019 开始(撰写本文时为预览版),distributed transaction support has been added。

docker run \
   -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   -e 'MSSQL_RPC_PORT=135' -e 'MSSQL_DTC_TCP_PORT=51000' \
   -p 51433:1433 -p 135:135 -p 51000:51000  \
   -d mcr.microsoft.com/mssql/server:2019-CTP2.3-ubuntu

然后您应该能够enable the JDBC XA support 使用:

EXEC sp_sqljdbc_xa_install

用户需要有权限:

 use master;
 sp_grantdbaccess 'myuser', 'myuser';
 EXEC sp_addrolemember [SqlJDBCXAUser], 'myuser'

【讨论】:

对上面链接的其他难以理解的文章进行了很好的补充。帮了我很多。也许对于像我这样的外行来说:我花了一段时间才弄清楚服务器的 docker 端口映射是 51433 而不是您连接中使用的标准 1433,而且您需要使用 dbeaver 之类的客户端登录服务器才能运行脚本。 如果我想在我的数据库上启用 XA 并且用户是针对我的数据库定义的,我如何将该用户添加到该角色?我尝试使用sa 用户,但即使sa 似乎在master 上也没有可用,我的用户名在我的数据库中也没有。你能解释一下吗?谢谢

以上是关于为 MSSQL Server docker 映像启用 XA 事务的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server使用手册

sqlserver 2017 docker安装(启动代理)

初始化后,SQL Server docker容器停止

Docker 安装运行mssql-server-linux

docker run mssql

使用 Docker 卷持久化 mcr.microsoft.com/mssql/server:2019-latest 容器时权限被拒绝