问题标签 [distributed-transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
285 浏览

database - 分布式事务的完整性和机密性

我有一个关于分布式事务的问题。假设我有 3 个事务程序:

交易A

  1. 开始
  2. a=读取(A)
  3. b=读取(B)
  4. c=a+b
  5. 写(C,C)
  6. 犯罪

交易 B

  1. 开始
  2. a=读取(A)
  3. a=a+1
  4. 写(一,一)
  5. 犯罪

交易 C

  1. 开始
  2. c=读取(C)
  3. c=c*2
  4. 写(A,C)
  5. 犯罪

所以有5对关键操作:C2-A5、A2-B4、B4-C4、B2-C4、A2-C4。

我应该确保完整性机密性,您知道如何实现吗?

先感谢您!

0 投票
2 回答
757 浏览

sql-server - DBA 对 SQL Server DTC 说不?

我试图让我们的 DBA 在 SQL Server 2005 集群上启用 DTC。不幸的是,他们一直拒绝。他们的论点是他们需要为 DTC 设置一个专用主​​机(可能需要几个月的时间!!),因为这不是勾选几个框的问题。这是真的?DTC 在共享环境(例如 SQL 场)中的侵入性如何。我对此有异议吗?

谢谢

0 投票
2 回答
3757 浏览

sql-server - 来自一个 SP 的跨数据库事务

我需要用一些简单的 SQL 语句更新多个数据库。使用“链接服务器”在 SQL 中配置数据库,并且 SQL 版本是混合的(SQL 2008、SQL 2005 和 SQL 2000)。我打算在其中一个数据库中编写一个存储过程,但我想使用事务来确保每个数据库都得到一致的更新。

以下哪项最准确:

  1. 单个 BEGIN/COMMIT TRANSACTION 是否可以保证所有数据库中的所有语句都成功?
  2. 对于数据库上的每组命令,我是否需要多个 BEGIN TRANSACTIONS?
  3. 更新远程数据库时是否支持事务?我需要执行具有嵌入式事务支持的远程 SP。

请注意,我不关心任何类型的跨数据库引用完整性;如果可能,我只是尝试从单个存储过程同时更新多个数据库。

也欢迎任何其他建议。谢谢!

0 投票
0 回答
1981 浏览

c# - MSDTC 尝试在分布式事务中登记客户端计算机

我们看到 MSDTC 记录了以下间歇性警告:

调用方已尝试将事务传播到远程系统,但机器“X”上当前禁用了 MSDTC 网络 DTC 访问。请查看 MS DTC 配置设置。

但是,MSDTC 在机器 X 上被设计为禁用 - 它是客户端机器,并且在事务中没有征用任何业务!

  • 通过 TCP 托管 WCF 服务的多个 Windows 服务端点
  • 下面的单个 SQL Server 2005 实例
  • 链接到 Sql
  • 远程客户端通过 WCF/TCP 接收事件回调

这个问题很难重现 - 通常在重新启动服务之后。我们怀疑客户端机器的回调发生在事务的上下文中。

只是想知道是否有人见过类似的问题?

0 投票
1 回答
284 浏览

sql - 复制 SQL 服务器

在我的生产服务器中,我的复制工作正常,我确实有分布式数据库,它是 2 个订阅者 db。我的数据是从生产环境复制的(工作正常),但是当数据被复制到订阅服务器中的分布式数据库时,它会引发错误

Err msg =
复制-复制分发子系统:PRD01-XYZ-VREPL1\REPL01-25 失败。违反 PRIMARY KEY 约束“PK_vendors”。无法在对象“dbo.tabname”中插入重复键。

0 投票
3 回答
124 浏览

php - 有没有办法在同一个事务中将多个 SQL 放在不同的服务器上?

在我的系统中,我们执行操作,为了报告,我们在另一台服务器上记录该操作(如果感兴趣,则为星型模式)。显然我需要动作更新/插入与日志记录在同一个事务中。
那么,有没有办法在同一个事务中包含两个不同的 sql 到两个不同的服务器?
现在我在代码级别(php)管理它

0 投票
2 回答
3504 浏览

java - 可能涉及RMI调用的Spring分布式事务?

背景

我有 Spring Client 应用程序,它使用 RMI 为两台服务器提供服务。在客户端中,我将一个实体保存到数据库(简单),并使用实体的详细信息对两台服务器进行 rmi 调用。我在服务器上使用 Spring 3.0.2,客户端是一个简单的 Spring-mvc 站点。

要求

我的要求是,如果任何一个 rmi 调用对整个事务回滚的服务器都失败,那就是实体没有保存在客户端上,如果任何一个 rmi 调用成功,这也将回滚。

我对分布式事务比较陌生,但我想我想要一个使用 RMI 调用的 XA 类事务。

我确实在这里找到了关于该主题的一个很好的链接,但它没有提到调用两个远程方法调用到不同服务器时的模式。我很想在推荐阅读方面听到更多关于这个主题的信息,以及关于如何使用 spring 实现这一点的任何指示。是否可以为此使用事务管理器?

谢谢你。

0 投票
3 回答
24735 浏览

c# - TransactionScope:避免分布式事务

我有一个父对象(DAL 的一部分),其中包含List<t>子对象的集合()。

当我将对象保存回数据库时,我输入/更新父对象,然后遍历每个子对象。为了可维护性,我将孩子的所有代码放入单独的私有方法中。

我打算使用标准的 ADO 事务,但在旅途中,我偶然发现了 TransactionScope 对象,我相信这将使我能够在一个事务中将所有数据库交互(以及子方法中的所有交互)包装在父方法中。

到现在为止还挺好..?

所以下一个问题是如何在这个 TransactionScope 内创建和使用连接。我听说使用多个连接,即使它们连接到同一个数据库也会迫使 TransactionScope 认为它是一个分布式事务(涉及一些昂贵的 DTC 工作)。

是这样吗?或者,正如我似乎在其他地方读到的那样,使用相同的连接字符串(这将有助于连接池)的情况会很好吗?

更实际地说,我是否...

  1. 在父级和子级中创建单独的连接(尽管使用相同的连接字符串)
  2. 在父级中创建一个连接并将其作为参数传递(对我来说似乎很笨拙)
  3. 做点别的……?

更新:

虽然看起来我可以使用我常用的 .NET3.5+ 和 SQL Server 2008+,但该项目的另一部分将使用 Oracle (10g),因此我不妨练习一种可以跨项目一致使用的技术。

所以我将简单地将连接传递给子方法。


选项 1 代码示例:

0 投票
3 回答
276 浏览

stored-procedures - 如何测试存储过程的两阶段提交行为?

这个特定的存储过程执行归档清除:
1)从事务数据库中选择令牌
2)将令牌放入临时表
3)循环令牌:
3.1)使用临时表中的令牌,从事务表中检索数据并插入到单独归档中的表中db(通过联邦)
3.2)提交插入。
3.3)然后这次使用相同的令牌从事务中删除数据
3.4)COMMIT 删除。


2 阶段提交允许我们在循环结束时只有一个提交

我的问题是如何模拟场景以使 proc 在插入阶段或删除阶段失败?这是为了确保即使运行失败,数据仍保持完整性——没有半处理令牌等。

0 投票
1 回答
109 浏览

unit-testing - 集成测试,我如何包装一个在事务中更改数据库的 REST 调用?

我有这样的代码:

我试图用 TransactionScope 来解决这个问题,但不起作用。有什么方法可以在不进行整个数据库还原的情况下回滚测试更改?