为 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 事务的主要内容,如果未能解决你的问题,请参考以下文章
使用 Docker 卷持久化 mcr.microsoft.com/mssql/server:2019-latest 容器时权限被拒绝