使用事务日志回滚事务

Posted

技术标签:

【中文标题】使用事务日志回滚事务【英文标题】:Rollback transaction using transaction log 【发布时间】:2010-11-07 02:56:56 【问题描述】:

是否可以使用 Transactionlog 文件为特定记录回滚事务?

我正在使用SQL Server 2005。

【问题讨论】:

【参考方案1】:

本机,没有。不过,我相信有一些昂贵的第三方工具可以做到这一点。

或者,您可以从备份中恢复您的数据库,然后使用STOPAT = '6/30/2009 2:30PM' 参数将RESTORE LOGS 恢复到某个时间点。

有Apex 和SQL Log Rescue 可用。但是,如果您的日志未处于 FULL 恢复模式,那么如果您无法恢复,您可能会陷入困境。

【讨论】:

你能给我这些工具的样本吗? 推荐的方法是使用 STOPAT 恢复数据库的副本,然后将数据从副本复制到真实数据库中。 如何知道您的日志处于何种恢复模式?【参考方案2】:

据我所知,您的选择是 ApexSQL Log(价格昂贵,但有免费试用版)或未记录的 SQL Server 命令,例如 DBCC Log 和 fn_dblog。

只有当您的数据库处于完全恢复模式时,其中的任何一个才会起作用,在这种情况下,SQL Server 会在事务日志中存储更多详细信息。

另外,我认为这不适用于任何类型的交易。我见过有人使用这种技术来恢复插入、更新、删除,但我很确定它是否可以用来恢复说 ALTER TABLE 或类似的东西。

【讨论】:

免费试用只会为每 10 条记录生成撤消脚本。【参考方案3】:

就第三方软件而言,您可以免费使用戴尔的Toad 软件三十天,并且它具有带有撤消脚本生成功能的事务日志。

【讨论】:

【参考方案4】:

查看RedGate's LogRescue 产品。如果没有第 3 方产品,您可能只能在时间点恢复到单独的数据库,然后手动将记录复制回您的生产数据库。

【讨论】:

根据其网页,LogRescue 仅限于 SQL Server 2000

以上是关于使用事务日志回滚事务的主要内容,如果未能解决你的问题,请参考以下文章

事务--04---MySQL事务日志----Undo日志

如何从事务日志执行 SQL 回滚

redo日志undo日志与事务隔离性

Spring事务异常回滚,捕获异常不抛出就不会回滚

Spring事务异常回滚,捕获异常不抛出就不会回滚

事务的实现原理