问题标签 [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.
sql - 回滚到保存点不会释放锁
我想我对如何使用 Savepoints 有误解。也许有人可以为我清除它。我将我的例子展示为我正在尝试做的事情,以及我所经历的事情。
我的应用程序正在执行某个程序。在该过程(和相关的数据库操作)之前,我创建了一个保存点。在该过程中,我启动了一个 select for update,它创建了许多锁:
lock1 - 持续时间=事务,类=行,类型=意向行=大数字
lock2 - 持续时间=事务,类=行,类型=WriteNoPK 行=大数字
如果该 java 过程成功,则关联的 DB 事务通过提交完成。但是,如果 java 过程失败,我还想回滚任何关联的数据库操作。我一直在尝试这样做:
conn.rollback(mySavepoint);
但是,这并没有释放由数据库操作创建的表锁(上面)(我以为我只是通过 conn.rollback(mySavepoint); 回滚)
我已经用两个数据库测试了这种行为:Sybase 和 Derby。
为什么会这样?
我真的需要在 conn.rollback(mySavepoint) 之后提交吗???这似乎有点违反直觉。
sql - ora-01086 : 保存点未建立或无效
Ora-01086:保存点未建立或无效。KRD_UPD_BORCTAHSILATYAP_SP 这个 SP 抛出错误。当我在下面测试这个循环时,我得到了错误:ora-01086
通常它无需调用外部 sp 即可工作,我使用内联错误对其进行测试,然后回滚到保存点。我错过了什么?
java - 如何在 Hibernate 中执行 Savepoint 和回滚?
我正在测试我的课程,所以我插入了这么多数据来测试我的代码。
所以我想savepoint and rollback
在数据库中建立一些机制。
我使用 postgresql 作为数据库服务器。
以下是我的测试代码:
在这里,我通过命令对象设置值并传递给ProcessRequest()
将使用休眠将数据存储在数据库中的方法。我仍然必须assert
在我的testProcess()
方法中编写检查数据是否正确?
所以我的问题是,当这个事务在setUp()
方法中开始时,应该创建一个保存点,然后testProcess()
执行方法并assert
检查它们是否正确的数据,然后在tearDown()
方法中我想回滚到setUp()
方法中设置的保存点。
那么该怎么做呢?如果任何人都可以指导我将使用什么以及如何前进,那么我将学习那件事并自己去。
我只是想要关于我必须使用什么以及在哪里使用的指导?谢谢你们。
oracle - 如何在 oracle 程序中使用保存点
我在一个过程中有多个更新和插入语句。
请参考以下示例:
程序示例
- 代码
更新 1
插入 1
更新 2
更新 3 --假设发生异常
现在我想回滚到第一个更新语句之前意味着没有更新或插入影响。
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 不喜欢跨多个过程管理事务。
所以。是否有任何解决方法,例如抑制此错误的方法?或者我在这里错过了一个重要的概念?
java - JDBC 上的保存点
我有一个 JDBC 代码,其中有多个Savepoints
;像这样的东西:
现在在 catch 块中,我正在捕获异常并检查是否Savepoint
存在null
;如果是,则回滚整个连接,否则回滚到Savepoint
. 但我无法理解Savepoint
我应该回滚到哪个位置。
如果我将所有保存点名称更改为 "S1" 会好吗?在那种情况下,我将如何理解有多少直到Savepoint
正确工作?
请告知如何理解直到Savepoint
正确执行了哪些工作?
drupal - mysql集群上的Drupal
当我设置了ENGINE=NDBCLUSTER
drupal的所有表并在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的块时。
它工作正常。迷茫了一段时间,求大神帮忙。
oracle - 如果缺少任何验证,如何回滚每个插入
我必须将数据从 xlm 插入 10 个表,层次结构如下。
- T1 有子表 T2
- T2 有子表 t3,t4,t5,t6 等直到 t10
- 如果任何验证在 t3 到 t10 以上 t1 中失败,则 t2 表插入应该回滚。
我正在使用 SavePoint,如果发现缺少任何验证,我将回滚该特定的保存点。
我的问题是,我必须使用 10 个保存点来回滚所有表的事务还是只有一个保存点就足够了?
sqlite - 为什么我的修改没有使用 SAVEPOINT 写入磁盘?
我有三个操作,一个读、一个写和另一个读,每个操作都在使用 SAVEPOINT 启动的事务中。我读取了一个值,中止了我用来读取它的事务,我设置了该值,提交了我用来设置它的事务,然后我再次读取它,在我后来中止的事务中。当我再次打开我的数据库时,设置被撤消。
我在以下 shell 脚本中隔离了我的问题:
我的输出是
我错过了什么?
sql - 使用多个保存点的正确方法是什么
我是第一次使用事务,所以我可能会问一个愚蠢的问题。
我想在 3 个表中插入数据:
例如,如果出现问题并且无法将数据插入Table2
,则来自的数据Table1
不会丢失并Table3
保持不变(反之亦然)。
到目前为止,我已经尝试了两个版本,但没有一个是令人满意的。
版本 1:
但是如果数据不能插入Table1
,那么可能的数据Table2
就会丢失,我不想丢失任何东西。所以,我试着把它分开。
版本 2:
但是如果 Insert into Table2 失败,我会得到这个:
(1 行受影响)
(0 行受影响)
消息 628,级别 16,状态 0,过程 InsertInto,第 26 行(第二个 BEGIN CATCH)
当没有活动事务时无法发出 SAVE TRANSACTION。
我怎样才能做到这一点?