2009-11-03 27 views
1

由于我错误地更新了生产数据库上的数据。有没有办法回滚这些交易。 我已经从管理工作室执行了更新语句,并且该脚本没有在 开始Trans /回滚/提交。如何回滚SQL Server中的更改

感谢

+0

你有一个数据库备份? – David

+0

有备份,但是是12小时前。 – rmdussa

回答

2

无交易(或者甚至是有致力于交易),有恢复所做的更改没有简单的方法。

交易对于确保对数据库的一系列更改作为一个单元执行是非常有用的,即,使所有这些更改都按照规定的顺序执行,或者根本不会执行任何更改(或者更准确地说,数据库服务器回滚任何易于完成的更改,在所有更改完成之前都会出现问题)。

根据与数据库相关联的恢复模式,在SQL日志文件可能会有所帮助在以下两种方法之一:

  • 如果你有一个备份,如果日志文件被这个备份后立即开始,日志文件可能有助于将数据库“前滚”到问题中提到的不幸变化之前的位置。 (又名点即时恢复)
  • 如果没有这样的备份缴费,日志文件可以适合扭转不幸的变化

这两种方法都意味着SQL日志确实作为一些恢复模型维护,这样日志文件在每次成功的批处理/事务之后都会被截断(其数据丢失)。和这两种方法都不容易,后者尤其可能需要第三方软件(或长程序)等。

0

根据您的备份设置方式,您可能可以做一个时间点恢复。与您的DBA交谈。您也可能希望尽快使数据库脱机,以防止进行还原时最终会丢失的更多更改。

3

这里是什么,我会在这种情况下,这样做:

  1. 在单独的数据库恢复备份,并比较这些数据库恢复中存在的备份行?

  2. 如果您的数据库处于完全恢复模式,请尝试读取事务日志以恢复剩余的行。

为了读取事务日志,你可以使用第三方工具,如ApexSQL Log或试图通过此功能fn_dblog做自己(here是一个例子,但它是相当复杂)。

以下是关于这个主题的其他职位:

Read the log file (*.LDF) in SQL Server 2008

How can I rollback an UPDATE query in SQL server 2005?