数据库 为何使用 回滚

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库 为何使用 回滚相关的知识,希望对你有一定的参考价值。

参考技术A 简单的来说,我给你举两个例子:
1、对数据库做了ddl的操作,但是没有进行提交操作,此时就会提示受影响行数,如果最后没有进行提交操作,数据就会回滚。
2、对数据进行操作时,如果数据报错,如批量插入数据,其中有一条无法插入,那么此次的操作就会被视为无效,数据库就会回滚,以保证数据的完整性。
3、在程序开发时,是以事务为原子性操作的,此时可能因为一个业务操作会对数据库的多个表进行增删改,如果中间出现问题,那么对已操作部分的数据怎么办呢?
数据库的回滚就可以解决。

使用事务日志回滚事务

【中文标题】使用事务日志回滚事务【英文标题】: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

以上是关于数据库 为何使用 回滚的主要内容,如果未能解决你的问题,请参考以下文章

Spring异常捕获而且回滚事务的方法

Spring异常捕获而且回滚事务的方法

关于MySQL内核,一定要知道的!

数据库从入门到精通03

什么是回滚操作

sqlserver回滚到前一小时