问题标签 [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 投票
2 回答
4173 浏览

memory - (MSMQ) mqsvc.exe 不释放内存

MSDN 线程

大家好。

首先,请原谅以下描述中的任何英语错误,因为,我不是母语人士,而且我不能完美地写出来。

我正在尝试创建一个 .NET (4.0) 服务,用于远程/事务/异步接收来自多个队列的可恢复消息。因此,首先,我使用 BeginPeek 方法,然后在 TransactionScope 中使用 Receive 方法(隐式使用 MSDTC)。

问题是运行我的服务的主机(win7/2k8r2 sp1)的 mqsvc.exe,它什么都不做(当然与消息的接收/托管无关,MSMQ 是空的和干净的)。mqsvc.exe 内存分配增长,它从不释放任何内存。所有关于缓存清理间隔的 MSMQ 注册表项都有一个较短的时间值(大约 1 分钟)。

我尝试了几种选择:

  • 使用本地和远程 MSDTC(显然是消息主机的远程)。
  • 使用 COM 库 mqoa.dll 而不是 .NET 来为 MSMQ 使用显式 MSDTC 事务。
  • 与几台不同的机器(所有win7/2k8r2 sp1)。

在执行我的服务时没有例外,我可以关闭或/和处置的所有资源都尽快关闭/处置。我的服务的内存分配是稳定的。

在所有情况下,这都是同一个问题。如何解决?

提前致谢。

文森特。

0 投票
1 回答
85 浏览

database - 数据库同步

我正在开发的系统有一些问题。我有一个 python 脚本,它首先与虚拟化软件一起使用,如果该操作成功,它会将内容写入数据库。如果虚拟化软件出现异常,我可以管理所有的东西,但如果插入数据库失败,真正的问题就会出现。如果插入失败,我将不得不恢复该虚拟化软件中的内容,否则事情将变得异步。但问题是,恢复该软件中的内容是不可能的。

如何处理事情,以便我可以使数据库与该软件保持同步?任何中间件或特殊应用程序???或者编程中的任何逻辑?

0 投票
2 回答
218 浏览

wcf - WCF 服务仅在客户端收到结果时才写入日志

我正在开发 WCF 服务,以帮助我们的新代码与旧系统互操作。过程是这样的:

  1. 客户端通过对遗留系统的请求调用服务。
  2. 服务将请求写入数据库。
  3. 遗留系统服务在自己的时间从数据库请求并将结果写回数据库(更新状态标志以表示结果已准备好)。
  4. 客户端通过调用第二个服务方法来检索结果,该方法会轮询数据库,直到设置就绪标志。
  5. 就在返回结果之前,服务将状态标志更新为client has results,以便可以删除相关的 DB 行。

我担心的是最后一步的比赛条件。我可以看到这种情况发生:

  1. 服务向客户端更新状态有结果
  2. 客户端等待服务轮询数据库后超时。
  3. 服务尝试返回结果。欢闹随之而来。

解决此问题的一种方法是使用三个服务调用而不是两个:第二个调用检索结果,最后一个调用是客户端明确确认它拥有它们。我想知道是否有一种方法不会将这种额外的“协议”负担强加给客户端。

我已经简要地研究了在 WCF 中使用事务,听起来他们可能能够做我需要的事情。客户端(可选)启动一个事务,将其流向服务,如果它存在则使用它,并在完成时提交它。这似乎隐含地进行了“第三次调用”。

这个想法有什么好处吗?你能看出什么缺点吗?还有其他我可以探索的途径吗?

0 投票
1 回答
1452 浏览

sql - 在 SQL Server 2008 R2 中使用分布式事务时出错

我正在使用 SQL Server 2008 R2。

当我尝试从 java 端执行 SP 时出现以下错误。当我使用查询浏览器运行时,相同的 SP 运行良好。

我也尝试过使用热修复,但它不起作用。

错误 :: 无法执行操作,因为链接服务器“服务器名称”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务。在事务中执行时

0 投票
0 回答
2540 浏览

mysql - MySql 是否能够像 sql-server 的 **Begin Distributed Transaction** 那样进行分布式事务(开箱即用)?

MySql 能够进行分布式事务吗?

喜欢(来自 sql-server 背景)开始分布式事务

0 投票
2 回答
2477 浏览

.net - TransactionScope 和 SQL Server Compact

SQL Server Compact 不支持分布式事务。因此,如果 TransactionScope 内有多个连接 - 将引发异常。有没有办法设置 ADO.NET 提供程序以将一个连接用于相同的连接字符串?

我知道我可以通过 connection.BeginTransaction 使用通常的事务,但 TransactionScope 对我来说更可取。

更新
抱歉,我没有提到我使用实体框架,所以我无法控制 SQL 命令。我可能只是传递连接字符串。由于某种原因,为 TransactionScope 中的一个连接字符串创建了几个连接对象。

0 投票
2 回答
2070 浏览

glassfish - Glassfish 和 ActiveMQ XATransactions

我在用着

  • Sun GlassFish Enterprise Server v2.1.1 ((v2.1 Patch06)(9.1_02 Patch12))
  • activemq-rar-5.4.2-fuse-02-00.rar
  • XATransaction for activemq-rar

我遇到了下面的异常,我怀疑这是因为在 XATransaction 启动后 activemqra 无法获取 activemq 连接。我原以为在这种情况下 activemqra 会回滚事务。

目前,启动的事务在 Glassfish 中挂起,直到超时。当 db 事务是 XATransaction 的一部分时,这尤其糟糕,因为那时 db 连接不可用。

我不知道该怎么做,所以我没有挂起交易?

欢迎任何帮助或评论。

最好的问候

0 投票
1 回答
1893 浏览

jakarta-ee - 标记为不支持的 Java EE 事务方法

我有一种方法可以将数据从一个数据库传输到另一个数据库,并在此过程中在目标数据库中创建新表。该方法是无状态 EJB(Java EE 6,GF 3.1)的一部分,因此默认情况下,容器会在调用该方法时启动分布式事务。

数据传输过程本质上分为两个独立的步骤 1. 从源数据库读取 2. 写入目标数据库。如果读取步骤失败,那么我不希望写入步骤发生,但如果写入步骤失败并且读取已经提交,我真的不在乎 - 我只是把数据扔掉。

最初我遇到了我的数据源不是 XADataSource 的问题,所以容器抱怨了这一点。然后我将它们转换为 XADataSource,但它仍然失败,因为写入过程(在 MySQL 数据库中)包含导致隐式提交的创建表语句,而您不能在分布式事务中执行此操作。

我最终得出的解决方案是将传输方法标记为TransactionAttributeType.NOT_SUPPORTED,然后将读写过程放入父传输方法调用的自己的方法中。

不过我的问题是:读写方法是在它们自己的事务中运行还是 NOT_SUPPORTED 传播给它们?我的猜测是他们有一个隐式的 TransactionAttributeType.REQUIRED ,因此会开始他们自己的事务,但我不确定,我认为它们在事务中运行很重要。

这是解决这个问题的最佳方法吗?

0 投票
1 回答
5107 浏览

entity-framework - ObjectContext.Connection.BeginTransaction() 是否使用 MSDTC?

我想确认实体框架的 ObjectContext.Connection.BeginTransaction() 方法返回的事务是否使用 MSDTC(Microsoft 分布式事务协调器)的支持?

有没有办法在不支持 MSDTC 的情况下使用事务?

0 投票
1 回答
5089 浏览

java - 为什么在 stage3CommitProcessing 期间事务回滚?

在两个 Websphere 节点中运行的 Java 程序中,以下竞争场景发生在由 Websphere Transaction Manager 管理的分布式事务中。该事务跨越 JMS (Websphere-MQ) 事务源和数据库 (Oracle) 事务源。我想了解

  • 为什么会发生此(线程 2 中的异常,步骤 B6)异常?我预计不会发生任何问题。线程 2 仅在确保 T1 在事务 TX2 中锁定后才继续进行,因此线程 1 很自然地等待 T1 表锁(在事务 TX1 中)被释放。我想知道的是,为什么线程 2 会遇到 stage3CommitProcessing 异常?我怎么能得到更多关于它的细节,因为这个例外没有任何关于它的信息?
  • 如何调试这种与事务相关的竞赛场景?我知道复制可能很困难。但我认为可能有一些与 Websphere 相关的日志,我可以启用这些日志来查看在 stage3 期间提交失败的原因是什么?如果有人能指出我的方向,那就太好了。
  • 如何避免/解决它?

线程 1(在 Websphere 节点 1 中运行)


线程 2(在 Websphere 节点 2 中运行)


日志 1:

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; 错误的 SQL 语法 [LOCK TABLE T1 IN EXCLUSIVE MODE];嵌套异常是 java.sql.SQLSyntaxErrorException: ORA-02049: timeout: 分布式事务等待锁


日志 2: