问题标签 [nested-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 投票
0 回答
210 浏览

python - 如何知道 Postgres 批量更新事务中哪条记录失败

问题

我必须R1, R2, ..., Rn使用 sqlalchemy 更新 Postgres 数据库中的几条记录。操作必须是原子的;即,如果Ri失败,则必须回滚整个事务。

代码是这样的:

如果出现错误,我想返回这样的消息:

问题

有没有办法以这种粒度获取 Postgres 事务错误?理想情况下,我希望每条失败的记录都有一个错误。如果这不可能,我想获取失败的记录号并显示正确的错误消息。

0 投票
1 回答
307 浏览

sql-server - SQL Server 嵌套事务的 BEGIN 和 COMMIT 语句数不匹配

我按照推荐的模板来处理事务中的错误,该模板在现有事务中执行时应该可以工作。

这是我的模板

如果我用 RAISERROR 替换 TRY 块中的 THROW,问题仍然存在。

试验结果:

事务中的执行失败场景:正确的结果(给出正确的错误消息)

事务中的 EXEC 成功场景:给出意外错误。

EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 1,当前计数 = 2。

事务外的执行失败场景:给出预期的错误。

事务外的 EXEC 成功场景:出现意外错误。错误和上面一样,但是每次执行它都会增加-1。这是否意味着每次都有更多的东西未提交?

这是测试的样子:

有谁知道出了什么问题?

0 投票
1 回答
2763 浏览

java - 处理异常后的Spring嵌套事务​​回滚

我有一个@Service类,它有一个在另一个服务上@Transactional调用另一个方法的方法。@Transactional像这样的东西:

我希望 A 实体将被插入,但如果任何嵌套事务抛出异常插入将拒绝,即使此异常在AService.methodOne().

我可以methodTwo()@Transactional(propagation = Propagation.REQUIRES_NEW). 但它会打败性能。

0 投票
1 回答
572 浏览

sql - 如果嵌套事务成功提交,父事务是否可能失败

我试图了解 SQL Server 中的嵌套事务。让我们考虑以下 SQL 命令链:

如果事务#2 的提交成功,事务#1 的提交是否可能失败?如果是,您能否举例说明这种情况何时发生?

0 投票
0 回答
2304 浏览

mysql - 使用 MySQL 和 Entity Framework Core 的嵌套事务

我将MySQLEF Core一起使用。我目前正在使用Pomelo Provider for MySQL。我需要为事务实施工作单元模式。我有一个服务,它调用存储库中的两种方法。我无法实现嵌套事务。这就是我的服务方法现在的样子:

这就是repo1中的save方法的 实现方式

这就是repo2中的save方法的 实现方式

在服务中运行方法时出现以下错误:

为警告“Microsoft.EntityFrameworkCore.Database.Transaction.AmbientTransactionWarning:检测到环境事务”生成错误。当前提供者不支持环境事务。请参阅http://go.microsoft.com/fwlink/?LinkId=800142 '。通过将事件 ID 'RelationalEventId.AmbientTransactionWarning' 传递给 'DbContext.OnConfiguring' 或 'AddDbContext' 中的 'ConfigureWarnings' 方法,可以抑制或记录此异常。

这就是我在Startup.cs中注册UserDbContext的方式

我什至尝试添加一个中间件,它在请求开始时启动事务并在响应期间提交/回滚。但我仍然无法管理嵌套事务。

这是我的中间件的样子:

任何人都可以帮助我吗?

0 投票
1 回答
741 浏览

tsql - 回滚嵌套事务和日志错误 - 在触发器中,Sql Server 2008

我在将语句插入表时有一个触发器(可能会修改插入的值)。如果触发器中发生错误,我想记录它。并且 INSERT 仍然必须插入。所以我使用了一个 TRY / CATCH 块,其中 catch 部分将进行日志记录。问题是我只能回滚整个事务然后记录。但随后插入也被回滚。

在 Sql Server 2008 上运行...

到目前为止,一切都很好。

为了测试捕获部分的日志记录,我使用了 RAISERROR。(也许这是个问题?我会回到那部分)。然后我运行插入到表中。

在触发器中,我放置了一个 BEGIN TRANSACTION triggerTransaction2。我命名了它,所以我可以回滚那个特定的事务。另请注意,插入语句已启动事务。但问题是我无法回滚嵌套的 (triggerTransaction2) 事务。只有整个事务(使用没有名称的 ROLLBACK)。

如果我查看XACT_STATE () 那么它是-1。这应该意味着“它只能请求事务的完全回滚。”。

我试图简化代码,并希望它仍然有意义。我也遵循了这个例子- 这对我有用,但也不是嵌套事务。

所以我在想,将 RAISERROR 与所选值一起使用不是很好。

触发器的伪代码:

0 投票
0 回答
1585 浏览

mysql - 每个请求的事务中间件不工作

我正在尝试添加一个中间件,以便事务在请求开始时开始,并根据情况提交或回滚。这是我的中间件:

我在Startup.cs中注册了上面的中间件

我有一种服务方法,它一个接一个地执行两个数据库操作。

如果databaseOperation2()发生异常,则databaseOperation1()当前没有回滚。我正在尝试为每个 Web 请求实现工作单元。

提前致谢。

0 投票
0 回答
133 浏览

sql - 嵌套事务和@@trancount 计数(70-761 练习题的问题)

从 Measure up 得到一个练习题,不确定它是否措辞不当,或者我遗漏了有关嵌套事务的一些内容。

基本上给了我一个存储过程和状态的定义

当 sp 运行时, 的值是@@trancount多少?

我知道 SQL Server 只关心外部事务,但@@trancount应该为 0,因为所有内容都已提交,如果失败,所有内容都会回滚,仍然为 0,但它告诉我应该为 1。

它没有在代码中指定@@trancount运行的位置,但措辞建议它在 sp 执行后运行。

我最后用一些虚拟数据运行了 sp,@@trancount得到了 0。

预计@@trancount为 0,因为没有可供计算的未结交易。

0 投票
1 回答
137 浏览

hibernate - Hibernate REQUIRES_NEW 或 NESTED 不适用于 MariaDB InnoDB

我在 JBoss-EAP 7.2.6 中有一个可能长时间运行的事务,我需要在几个步骤中提交。

我了解 MariaDB 没有嵌套的但链式事务。这是我对它应该如何工作的想法:

我试图去NESTED,并将驱动程序从 2.4.3 升级到 2.5.4 无济于事。

如何让这样的场景与 InnoDB 一起工作?我愿意自己发布一个低级别COMMIT AND CHAIN,因为在@Spring/Hibernate 中似乎没有这样做的 API。

我试过

但这导致

尽管

导致

0 投票
1 回答
37 浏览

spring-boot - 如何在 Spring 中将 nestedTransactionAllowed 设置为 true?

我有一个案例,我需要以相同的方法发起对四个不同服务的调用。根据我们的业务逻辑,所有四个步骤都必须成功,否则回滚。问题在于,由于所有步骤都发生在同一个事务中(通过 @Transactional 注释),因此该方法中的第二个调用无法处理第一个的结果。我在第一次调用时尝试了 Propagation.REQUIRES_NEW ,但是由于它启动了一个新事务,因此无论其他调用是否成功,它所做的更改都会被提交并且不会回滚。在某些时候,Propagation.NESTED 似乎可以完成这项工作,但我得到一个 NestedTransactionNotSupportedException,它警告我将 nestedTransactionAllowed 属性设置为 true。但我找不到任何关于如何做到这一点的文件。有任何想法吗?并且也将不胜感激任何其他关于该问题的建议。

根法:

停用方法: