标签: rollback

使用Spring JDBC轻松进行交易?

我正在开发一个使用Spring IoC和JDBC Template类的Java应用程序.我有一个DAO类有4种方法:m1()到m4().m1在表t1上执行多次插入和更新,在t2上执行m2,在t3上执行m3等.

DAO方法使用如下:

while(true)
{
  //process & generate data

  dao.m1(data1);
  dao.m2(data2);
  dao.m3(data3);
  dao.m4(data4);

  //sleep
}
Run Code Online (Sandbox Code Playgroud)

我希望4个连续方法调用下的db操作是原子的,要么所有4个表都成功更新,要么都没有.因此,如果在m3()中执行操作时出错,我想回滚在m2和m1中执行的所有更改(更新和插入).

那么春天让你以下面的方式做到这一点?

while (true)
{
  //process & generate data

  transaction = TransactionManager.createNewTransaction();

  transaction.start()

  try
  {
    dao.m1(data1);
    dao.m2(data2);
    dao.m3(data3);
    dao.m4(data4);
  }
  catch(DbUpdateException e)
  {
    transaction.rollBack();
  }

  transaction.end();

  // sleep
Run Code Online (Sandbox Code Playgroud)

}

或者有更好的方法吗?

java spring transactions jdbc rollback

9
推荐指数
2
解决办法
1万
查看次数

如何在Entity Framework中回滚事务

string[] usersToAdd = new string[] { "asd", "asdert", "gasdff6" };
using (Entities context = new Entities())
{
    foreach (string user in usersToAdd)
    {
        context.AddToUsers(new User { Name = user });
    }
    try
    {
        context.SaveChanges(); //Exception thrown: user 'gasdff6' already exist.
    }
    catch (Exception e)
    {
        //Roll back all changes including the two previous users.
    }
Run Code Online (Sandbox Code Playgroud)

或者这可能是自动完成的,这意味着如果发生错误,则会针对所有更改取消提交更改.是吗?

c# entity-framework transactions savechanges rollback

9
推荐指数
2
解决办法
3万
查看次数

我怎样才能以易于回滚的方式进行git合并?

有很多关于如何在git中"撤消"合并并不容易的讨论.简短版本:如果撤消合并提交,它还会告诉git以后永远不会将这些更改合并.

在进行合并时我能做些什么来减轻这个问题吗?在很多情况下,只需在软件开发的正常过程中撤消合并就非常非常有用,更重要的是,在需要回滚更改时控制发布分支的状态.

编辑

我已经看到了本文中的解决方案,并没有真正认为它是一个解决方案,更多的是对问题的解释.这个需要

  1. 总是使用--no-ff
  2. 当你想要恢复依赖于它们的代码时,记住你所有的撤消合并(这可能是未来几小时,几天,几周或几个月......)

我想要的是

以下是它在Subversion中的工作原理.假设我有一个名为"release-candidate"的分支,这是我们在登台服务器上运行的以及我们尝试使用功能的地方.假设我在功能A分支中合并.在Subversion中,它只是一个变更集,并且所有文件的所有历史记录都已合并.假设我们不喜欢它,所以我们想把它拿出来.我们只是撤消单个变更集,而不必考虑其他任何事情.我们可以在将来的任何时候将功能分支A合并回来,而不必记住我们在某一点将其合并并将其取出.

我希望能够尽可能接近这种流程.我想优化"不必记住未来的东西",即使它让事情在某种程度上采取了更多的步骤.(这可能是不可能的......)

git merge undo rollback feature-branch

9
推荐指数
1
解决办法
472
查看次数

如何在没有事务的情况下回滚

我犯了一个大错,我执行了这个查询:

update Contact set ContaPassword = '7FD736A3070CB9766'
Run Code Online (Sandbox Code Playgroud)

我忘记了这个WHERE条款,所以这样就更新了所有用户的密码.:(

有没有办法在此查询之前恢复数据?

sql rollback sql-server-2008

9
推荐指数
1
解决办法
5086
查看次数

当rollback()在MySQL中的事务失败时会发生什么?

try
{
    Connection conn = ... MySQL connection ...;
    conn.setAutoCommit(false); // transaction starts
    .... do something ....
}
catch (MySQLException e)
{
    try {
        conn.rollback();
    }
    catch (Exception e)
    {
        // What happens now?
    }
}
Run Code Online (Sandbox Code Playgroud)

对于MySQL服务器(InnoDB Engine),如果事务的rollback()失败会发生什么?(即当rollback()正在运行时网络正常运行,等等...)

这是否意味着数据库仍然存在损坏,或者MySQL服务器是否有办法从"未完成"的回滚中恢复?

java mysql transactions rollback

9
推荐指数
1
解决办法
2306
查看次数

如何使用事务/原子进行多个REST请求?

我有以下情况.
我有一个REST客户端,作为其他3个REST客户端的外观.(我用Java编程,使用Spring Boot)

客户的责任之一包括对用户进行CRUD操作.
现在,暴露自己的REST API的所有其他3个系统都有某种用户管理.

当我收到创建用户的请求时,我必须通过他们的REST API在这3个系统上创建它们并在我的数据库中保留.

现在,在最好的情况下,我只需调用他们的API,将用户插入我的数据库中,一切都很棒.

但是,请考虑用户创建仅在1个外部服务上成功的情况.我是否会重试所有其他操作?我是否尝试删除用户已被取代的用户?

这样做的正确方法是什么?

java rest spring transactions rollback

9
推荐指数
1
解决办法
3499
查看次数

数据库异常后SQLAlchemy回滚中的错误?

我的SQLAlchemy应用程序(在MariaDB之上运行)包括两个模型MyModelA,MyModelB后者是前者的子记录:

class MyModelA(db.Model):
    a_id   = db.Column(db.Integer, nullable=False, primary_key=True)
    my_field1 = db.Column(db.String(1024), nullable=True)

class MyModelB(db.Model):
    b_id   = db.Column(db.Integer, nullable=False, primary_key=True)
    a_id = db.Column(db.Integer, db.ForeignKey(MyModelA.a_id), nullable=False)
    my_field2 = db.Column(db.String(1024), nullable=True)
Run Code Online (Sandbox Code Playgroud)

这些的实例MyModelAMyModelB我创建:

>>> my_a = MyModelA(my_field1="A1")
>>> my_a.aid
1
>>> MyModelB(a_id=my_a.aid, my_field2="B1")
Run Code Online (Sandbox Code Playgroud)

我有以下代码删除MyModelAwhere 的实例a_id==1:

db.session.commit()
try:
    my_a = MyModelA.query.get(a_id=1)
    assert my_a is not None
    print "#1) Number of MyModelAs: %s\n" % MyModelA.query.count()
    db.session.delete(my_a)
    db.session.commit()
except IntegrityError:
    print "#2) Cannot delete instance …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy rollback flask-sqlalchemy

9
推荐指数
1
解决办法
575
查看次数

回滚到旧版本的 firebase 函数(谷歌云函数)

我试图找到一种简单的方法来回滚到我的 firebase 函数(谷歌云函数)的先前版本,以防此 firebase 函数的新版本对已部署的系统造成问题。

我部署函数的方式是通过 firebase cli(firebase deploy --only 函数)而不是 gcloud cli。

有没有简单的方法可以回滚到该函数的先前版本?

rollback node.js firebase google-cloud-functions

9
推荐指数
1
解决办法
2693
查看次数

如何在 PostgreSQL 中发生错误时回滚事务?

我正在为 PostgreSQL 编写一个脚本,因为我希望它以原子方式执行,所以我将它包装在一个事务中。
我希望脚本看起来像这样:

BEGIN
-- 1) Execute some valid actions;
-- 2) Execute some action that causes an error.
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END; -- A.k.a. COMMIT;
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,pgAdmin 在初始BEGIN. 如果我通过像这样附加分号来终止命令:BEGIN;它会通知我附近的错误EXCEPTION
我意识到我可能混淆了控制结构和事务的语法,但是我在文档中找不到任何关于如何回滚失败事务的内容(也没有在 SO 中)。

我还考虑过事务可能会在出错时自动回滚,但由于以下脚本,情况似乎并非如此:

BEGIN;
-- 1) Execute some valid actions;
-- 2) Execute some action that causes an error.
COMMIT;
Run Code Online (Sandbox Code Playgroud)

警告我:ERROR: current transaction is aborted, commands ignored until end of transaction block然后我必须手动ROLLBACK;进行交易。

似乎我在这里遗漏了一些基本的东西,但是什么?

编辑:
我也试过DO像这样使用: …

postgresql transactions exception plpgsql rollback

9
推荐指数
1
解决办法
4934
查看次数

如何正确使用 SET XACT_ABORT ON

我们最近被空降到一个新的 ETL 项目,该项目的代码非常糟糕。我手中有一个包含 700 行和各种更新的查询。

我想对其进行调试SET XACT_ABORT ON;,目标是如果只有一个事务失败则回滚所有内容。

但我找到了几种将其存档在 StackOverflow 上的方法,如下所示

BEGIN TRANSACTION;
BEGIN TRY

-- Multiple sql statements goes here

COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH
Run Code Online (Sandbox Code Playgroud)

这个

BEGIN TRY
BEGIN TRANSACTION

-- Multiple sql statements goes here

COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT(ERROR_MESSAGE())
ROLLBACK TRANSACTION
END CATCH
Run Code Online (Sandbox Code Playgroud)

而这些都没有用途SET XACT_ABORT ON;

我不明白,和SET XACT_ABORT ON使用一样吗BEGIN TRY BEGIN TRANSACTION

我可以只使用:

SET XACT_ABORT ON;

-- Multiple …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server try-catch rollback xact-abort

9
推荐指数
1
解决办法
3902
查看次数