首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以在多个程序之间共享Server事务?

是否可以在多个程序之间共享Server事务?
EN

Stack Overflow用户
提问于 2018-08-10 17:49:21
回答 2查看 1.9K关注 0票数 4

在我的情况下,我们的内部工具需要以下顺序,这些工具必须一起工作,以便为测试目的准备一个数据库。

  • program1启动、开始数据库事务并退出
  • program2启动并连接相同的数据库事务,执行一堆语句和出口。
  • program3还启动和连接相同的数据库事务,执行一堆语句并退出。
  • program4启动并决定是否/何时回滚事务

这些程序是.Net命令行应用程序.

我研究了MSDTC / TransctionScope,但是我找不到程序启动事务,然后退出,同时让事务打开以供其他程序加入的任何场景。

这可行吗?

编辑(可能的解决方案):

我测试了sp_bindsession,它可以工作:

program1会这样做(在.Net代码中)

代码语言:javascript
运行
复制
begin transaction
DECLARE @bind_token varchar(255);  
EXECUTE sp_getbindtoken @bind_token OUTPUT; 
print @bind_token

并将bind_token返回/写入到其他程序可以获取令牌并加入事务的文件中:

代码语言:javascript
运行
复制
sp_bindsession ':7:FliJ.4AShUOIOjb<6^]5---0aE=--'
//Do stuff
rollback transaction

但是,program1必须在整个过程中保持活动,以便在其他程序加入/退出会话时保持会话的活力。

这个api的文档声明:

此功能处于维护模式,可能会在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 18:21:27

SQL事务被锁定到它们的连接上。一个连接不能通过多个应用程序共享。

然而,实现目标的一种方法是将所有应用程序的查询代理到一个应用程序,该应用程序实际上保存了连接,因此也包含了它的事务。

票数 2
EN

Stack Overflow用户

发布于 2018-08-10 18:16:44

事务特定于连接源的每个会话。每次独立于另一个代码运行不同的代码时,它将启动一个新事务。要让软件使用相同的连接,就必须在一次运行中从一个源运行。例如,一个应用程序启动到数据库源的打开连接,然后运行所需的所有代码,然后终止该代码。

不幸的是,一个会话不能用同一个事务连接另一个会话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51791689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档