【问题标题】:Handling Uncommitable transaction SQL SERVER处理不可提交事务 SQL SERVER
【发布时间】:2011-11-10 16:32:50
【问题描述】:

我有一个程序属于以下类型

BEGIN TRY
BEGIN TRAN
...transactins A....
   BEGIN TRY
   .... Transaction B ....
   END TRY
   BEGIN CATCH
   .... Set variables and print messages ....
   END CATCH
....Transaction C
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
...Transaction D
END CATCH

事务 B 抛出错误,因此进程进入不可提交状态并抛出以下错误。我检查了 XACT_STATE() 的值是 -1

消息 3930,级别 16,状态 1,程序 xxxxxxxx,第 70 行 当前事务无法提交,也无法支持写入日志文件的操作。回滚事务。

有没有其他方法可以通过跳过事务 B 并执行事务 C 来克服这个问题

【问题讨论】:

    标签: sql-server-2008 transactions try-catch xact-abort


    【解决方案1】:

    使用事务的全部意义在于,其中的操作要么全部成功,要么全部失败。如果您想将Transaction CTransaction B 故障的影响隔离开来,请对每个BEGIN TRAN/COMMIT/ROLLBACK 操作使用单独的操作。

    【讨论】:

    • 我在网站中看到嵌套事务可以提供帮助的地方。但我无法实现它。你对此有什么想法吗???
    • 关于嵌套事务的一个关键点,来自the documentation,“SQL Server 数据库引擎会忽略提交内部事务。事务要么提交要么回滚,具体取决于在结束时采取的操作"
    • 一般来说,您可以创建一个保存点并回滚到该位置,但显然不能在您的事务处于注定状态时。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多