问题标签 [savepoints]

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 回答
555 浏览

sql - 回滚到保存点不会释放锁

我想我对如何使用 Savepoints 有误解。也许有人可以为我清除它。我将我的例子展示为我正在尝试做的事情,以及我所经历的事情。

我的应用程序正在执行某个程序。在该过程(和相关的数据库操作)之前,我创建了一个保存点。在该过程中,我启动了一个 select for update,它创建了许多锁:

lock1 - 持续时间=事务,类=行,类型=意向行=大数字

lock2 - 持续时间=事务,类=行,类型=WriteNoPK 行=大数字

如果该 java 过程成功,则关联的 DB 事务通过提交完成。但是,如果 java 过程失败,我还想回滚任何关联的数据库操作。我一直在尝试这样做:

conn.rollback(mySavepoint);

但是,这并没有释放由数据库操作创建的表锁(上面)(我以为我只是通过 conn.rollback(mySavepoint); 回滚)

我已经用两个数据库测试了这种行为:Sybase 和 Derby。

为什么会这样?

我真的需要在 conn.rollback(mySavepoint) 之后提交吗???这似乎有点违反直觉。

0 投票
2 回答
40569 浏览

sql - ora-01086 : 保存点未建立或无效

Ora-01086:保存点未建立或无效。KRD_UPD_BORCTAHSILATYAP_SP 这个 SP 抛出错误。当我在下面测试这个循环时,我得到了错误:ora-01086

通常它无需调用外部 sp 即可工作,我使用内联错误对其进行测试,然后回滚到保存点。我错过了什么?

0 投票
1 回答
1191 浏览

java - 如何在 Hibernate 中执行 Savepoint 和回滚?

我正在测试我的课程,所以我插入了这么多数据来测试我的代码。

所以我想savepoint and rollback在数据库中建立一些机制。

我使用 postgresql 作为数据库服务器。

以下是我的测试代码:

在这里,我通过命令对象设置值并传递给ProcessRequest()将使用休眠将数据存储在数据库中的方法。我仍然必须assert在我的testProcess()方法中编写检查数据是否正确?

所以我的问题是,当这个事务在setUp()方法中开始时,应该创建一个保存点,然后testProcess()执行方法并assert检查它们是否正确的数据,然后在tearDown()方法中我想回滚到setUp()方法中设置的保存点。

那么该怎么做呢?如果任何人都可以指导我将使用什么以及如何前进,那么我将学习那件事并自己去。

我只是想要关于我必须使用什么以及在哪里使用的指导?谢谢你们。

0 投票
3 回答
9877 浏览

oracle - 如何在 oracle 程序中使用保存点

我在一个过程中有多个更新和插入语句。

请参考以下示例:

程序示例

- 代码

更新 1

插入 1

更新 2

更新 3 --假设发生异常

现在我想回滚到第一个更新语句之前意味着没有更新或插入影响。

0 投票
1 回答
825 浏览

tsql - sql server:跨多个存储过程管理事务(开始、保存、提交、回滚)

在 T-Sql 中,rollback transaction回滚除指定保存点名称之外的所有事务。要仅回滚部分修改,我们使用rollback transaction @save_point_name. 这是一个save transaction @save_point_name必须早先说明的。如果引用的保存点已经回滚(从事务日志中删除),则会引发错误。同样,如果没有活动事务,则begin transaction @transaction_name需要声明 a,并且可以以相同的方式回滚。这可以快速发现错误或使用try...catch机制。

与 不同rollback,完全commit transaction @transaction_name忽略它的@transaction_name部分,只执行提交,减少@@trancount或结束事务。因此,无法知道或指定哪个(嵌套)事务,或者就此而言 - 一个保存点,正在(伪)提交。我知道事务一开始并不意味着嵌套,因此存在保存点。

一种典型的方法是,在每个过程中,检查@@trancount以确定是创建保存点还是开始新事务。然后,确认确定,检查事务状态并相应地提交或回滚(或什么都不做)。

这种检查是很多样板文件,尤其是当您有很多程序调用(多个)程序时,所有这些程序都只会在出现问题时回滚自己的操作。所以我的尝试是抽象事务,以便人们可以简单地编写这样的东西。

在哪里(让我打印出来)

好吧,这没有用。当我得到一个

在第一次调用 CreateSavePoint 之后。也就是说,似乎 sql server 不喜欢跨多个过程管理事务。

所以。是否有任何解决方法,例如抑制此错误的方法?或者我在这里错过了一个重要的概念?

0 投票
2 回答
5340 浏览

java - JDBC 上的保存点

我有一个 JDBC 代码,其中有多个Savepoints;像这样的东西:

现在在 catch 块中,我正在捕获异常并检查是否Savepoint存在null;如果是,则回滚整个连接,否则回滚到Savepoint. 但我无法理解Savepoint我应该回滚到哪个位置。

如果我将所有保存点名称更改为 "S1" 会好吗?在那种情况下,我将如何理解有多少直到Savepoint正确工作?

请告知如何理解直到Savepoint正确执行了哪些工作?

0 投票
0 回答
168 浏览

drupal - mysql集群上的Drupal

当我设置了ENGINE=NDBCLUSTERdrupal的所有表并在drupal中编辑并保存块时,关于savepoint.

网站遇到意外错误。请稍后再试。1 数组 ('%type' => 'PDOException', '!message' => 'SQLSTATE[42000]: 语法错误或访问冲突: 1178 表的存储引擎不支持 SAVEPOINT: SAVEPOINT savepoint_1; Array ( ) ', '%function' => 'block_admin_configure_submit()', '%file' => '/opt/lampp/htdocs/geosquare/modules/block/block.admin.inc', '%line' => 504, 'severity_level' => 3, )

我试图更改ENGINE=MyISAM哪个也不支持SAVEPOINT,但是当我编辑并保存drupal的块时。

它工作正常。迷茫了一段时间,求大神帮忙。

0 投票
1 回答
57 浏览

oracle - 如果缺少任何验证,如何回滚每个插入

我必须将数据从 xlm 插入 10 个表,层次结构如下。

  • T1 有子表 T2
  • T2 有子表 t3,t4,t5,t6 等直到 t10
  • 如果任何验证在 t3 到 t10 以上 t1 中失败,则 t2 表插入应该回滚。

我正在使用 SavePoint,如果发现缺少任何验证,我将回滚该特定的保存点。

我的问题是,我必须使用 10 个保存点来回滚所有表的事务还是只有一个保存点就足够了?

0 投票
1 回答
17 浏览

sqlite - 为什么我的修改没有使用 SAVEPOINT 写入磁盘?

我有三个操作,一个读、一个写和另一个读,每个操作都在使用 SAVEPOINT 启动的事务中。我读取了一个值,中止了我用来读取它的事务,我设置了该值,提交了我用来设置它的事务,然后我再次读取它,在我后来中止的事务中。当我再次打开我的数据库时,设置被撤消。

我在以下 shell 脚本中隔离了我的问题:

我的输出是

我错过了什么?

0 投票
1 回答
1645 浏览

sql - 使用多个保存点的正确方法是什么

我是第一次使用事务,所以我可能会问一个愚蠢的问题。

我想在 3 个表中插入数据:

例如,如果出现问题并且无法将数据插入Table2,则来自的数据Table1不会丢失并Table3保持不变(反之亦然)。

到目前为止,我已经尝试了两个版本,但没有一个是令人满意的。

版本 1:

但是如果数据不能插入Table1,那么可能的数据Table2就会丢失,我不想丢失任何东西。所以,我试着把它分开。

版本 2:

但是如果 Insert into Table2 失败,我会得到这个:

(1 行受影响)

(0 行受影响)
消息 628,级别 16,状态 0,过程 InsertInto,第 26 行(第二个 BEGIN CATCH)
当没有活动事务时无法发出 SAVE TRANSACTION。

我怎样才能做到这一点?