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

ruby-on-rails - 使用(restful)rails 时事务何时开始

是否整个宁静动词都在一个包罗万象的事务之下?也就是说,如果我在处理 UPDATE、DELETE 或 CREATE 操作的任何时候在验证或回调中引发错误,我在以前的回调中执行的每个数据库操作是否也会回滚?简而言之,在任何回调或验证上引发错误是否会使该动词操作的数据库中根本没有发生任何变化?

0 投票
5 回答
41465 浏览

java - 使用 Spring 和 Hibernate 跨多个数据库执行分布式事务的“最佳”方法是什么

我有一个应用程序 - 更像是一个实用程序 - 它位于角落并定期更新两个不同的数据库。

这是一个使用 Spring Application Context 构建的小型独立应用程序。上下文中配置了两个 Hibernate Session Factories,依次使用 Spring 中配置的 Commons DBCP 数据源。

目前没有事务管理,但我想补充一些。对一个数据库的更新取决于对另一个数据库的成功更新。

该应用程序不位于 Java EE 容器中 - 它由从 shell 脚本调用的静态启动器类引导。启动器类实例化应用程序上下文,然后调用其中一个 bean 上的方法。

围绕数据库更新进行事务处理的“最佳”方式是什么?

我将把“最佳”的定义留给您,但我认为它应该是“易于设置”、“易于配置”、“便宜”和“易于打包和重新分发”的一些功能。自然开源软件会很好。

0 投票
3 回答
733 浏览

java - 分布式处理:JTA 的 C++ 等价物

我正在开发一个关键任务解决方案,其中数据完整性至关重要,性能紧随其后。如果数据被塞满,那将是灾难性的。

因此,我正在寻找 JTA(Java 事务 API)的 C/C++ 版本。有谁知道任何支持分布式事务的 C 或 C++ 库?是的,我用谷歌搜索了它......不成功。

我不想被告知没有,我需要实现Distributed TP: The XA Specification指定的协议。

请帮忙!


编辑(回应 kervin):如果我需要跨多个数据库服务器插入记录并且我需要原子地提交它们,那么像 Oracle 之类的产品将为此提供解决方案。如果我编写了自己的消息队列服务器并且我想以原子方式将消息提交到多个服务器,我将需要 JTA 之类的东西来确保我不会填充事务的原子性。

0 投票
5 回答
7137 浏览

.net - 如何以事务方式使用远程 MSMQ?

我正在编写一个 Windows 服务,它从 MSMQ 中提取消息并将它们发布到遗留系统 (Baan)。如果发帖失败或发帖过程中机器宕机,我不想丢失消息。因此,我使用 MSMQ 事务。失败时我中止,成功时我承诺。

在处理本地队列时,此代码运行良好。但在生产中,我希望将运行服务的机器(或机器)与队列本身分开。当我针对远程队列进行测试时,抛出 System.Messaging.MessageQueueException:“事务使用无效。”

我已验证有问题的队列是事务性的。

这是从队列接收的代码:

回答

我已经切换到SQL Service Broker。它支持远程事务接收,而 MSMQ 3.0 不支持。而且,作为额外的奖励,它已经使用了我们集群和备份的 SQL Server 实例。

0 投票
1 回答
676 浏览

transactions - SQL Server 2000 和 System.Transactions.TransactionScope()

是否可以使用带有 SQL2000 的 TransactionScope() 创建 LIGHTWEIGHT 事务?或者,如果没有,是否有使用 CommitableTransaction 和/或类似方法的解决方法?

所以答案基本上是,“如果你想在 SQL2000 上进行本地到 1 个服务器的事务,不要使用 TransactionScope()”。

0 投票
11 回答
2307 浏览

sql - 事务隔离问题还是错误的方法?

我正在帮助我的一些同事解决 SQL 问题。主要是他们想将所有行从表 A 移动到表 B(两个表具有相同的列(名称和类型))。尽管这是在 Oracle 11g 中完成的,但我认为这并不重要。

他们最初的幼稚实现类似于

他们担心的是,在从 A 复制到 B 的过程中是否对表 A 进行了 INSERT,并且“从 A 中删除”(或 TRUNCATE 是值得的)会导致数据丢失(删除 A 中较新的插入行)。

当然,我很快建议将复制行的 ID 存储在临时表中,然后仅删除 A 中与临时表中的 IDS 匹配的行。

然而,为了好奇,我们通过在 INSERT 和 DELETE 之间添加一个等待命令(不记得 PL/SQL 语法)进行了一个小测试。然后从不同的连接中,我们将在 WAIT 期间插入行。

我们观察到这样做会导致数据丢失。我在 SQL Server 中复制了整个上下文,并将其全部包装在一个事务中,但新数据仍然在 SQL Server 中丢失了。这让我认为最初的方法存在系统性错误/缺陷。

但是,我不知道是因为 TRANSACTION 没有(以某种方式?)与新的 INSERT 隔离,还是因为 INSERT 在 WAIT 命令期间出现。

最后它是使用我建议的临时表实现的,但我们无法得到“为什么数据丢失”的答案。你知道为什么吗?

0 投票
5 回答
522 浏览

sql - 多进程写入的事务封装

我有一个数据库场景(我正在使用 Oracle),其中几个进程将插入到一个表中,并且一个进程从中选择。该表主要用作中间存储,多个进程(以下称为 Writers)向其写入日志事件,而单个进程(以下称为 Reader)则从中读取事件以进行进一步处理。Reader 必须读取插入到表中的所有事件。

目前,这是通过为每个插入的记录分配一个升序的 id 来完成的。读取器周期性地从表中选择一个条目块,其中 id 大于先前读取块的最大 id。例如:

这种方法的问题在于,由于写入器是并发操作的,因此行并不总是根据其分配的 id 按顺序插入,即使这些是按顺序升序分配的。也就是说,有时会在 id=110 的记录之后写入 id=100 的行,因为写入 id=110 的行的过程在写入记录 id=100 的进程之后开始,但首先提交。如果读取器已经读取了 id=110 的行,这可能会导致读取器丢失 id=100 的行。

强制写入者对表进行排他锁将解决问题,因为这将强制它们按顺序插入,并且还会让读取器等待任何未完成的提交。然而,这可能不会很快。

我的想法是,读者在阅读之前等待任何未完成的 Writer 提交就足够了。也就是说,只要 Reader 确实读取,Writers 就可以继续并发操作,直到所有 writers 完成。

我的问题是:
如何指示我的读者进程等待我的作家进程的任何未完成的提交?也欢迎对上述问题提出任何替代建议。

0 投票
2 回答
10000 浏览

windows - DTCPing 和 DTCTester 有什么区别?

我以前用过 DTCTester 来诊断 MSDTC 问题。但是,我只是注意到 DTCPing 似乎在做同样的事情。这两者有什么区别?

据我目前所知,DTCPing 需要在客户端和服务器机器上运行,而 DTCTester 只需要从客户端运行。还有其他区别吗?

0 投票
1 回答
1109 浏览

database - 如何修复无法在分布式事务中登记 Sybase 数据库的错误?

我对 Sybase 设置知之甚少(可以说一无所知),但我知道 SSIS 在将 Sybase 纳入分布式事务时遇到了麻烦。有没有人能够完成这项工作?

当我将包的 TransactionOption 更改为必需时,就会发生这种情况。当我恢复到默认的“支持”时,包运行没有错误(尽管不是线程安全的)。

0 投票
10 回答
466 浏览

transactions - 执行顺序操作的最佳实践

一起执行几项任务的最佳方法是什么,如果一项任务失败,则不应完成下一项任务?我知道如果它是数据库操作,那么我应该使用 Transactions 但我正在谈论不同类型的操作,如下所示:

所有任务必须通过:

SendEmail ArchiveReportsInDatabase CreateAFile

在上述场景中,所有任务都必须通过,否则整个批处理操作必须回滚。