没有备份的前提下如何恢复意外update的SQL Server数据

糟了,您曾经对数据库执行了一个没有加WHERE条件的UPDATE语句并覆盖了一堆数据,使用这堆数据变为无用的了。这时候您怎麽把UPDATE之前的数据找回来呢?

如果您之前有一个数据库备份,这个数据库备份包含了表的原先的值,您可以很容易地恢复这些数据,最普通的解决放假像下面这样:

  • 还原数据库备份并且使用它代替原先的数据库
  • 万一在UPDATE语句之后您的数据库发生了一些变化又或者您不能让数据库设置为离线状态:
    1. 还原一个数据库备份到一台测试服务器
    2. 使用 SQL Server Management Studio 导出数据向导导出数据
    3. 将导出来的数据导入回去原先的数据库

但是,如果您没有一个完整数据库备份,UPDATE语句依然能够回滚使用存储在数据库的联机事务日志里的事务信息。

事务日志保存了关于您对数据库的事务的信息。如果事务日志被收缩了或者被截断了,您可以使用 ApexSQL Log

ApexSQL Log 是一款可以挖掘数据库事务日志和回滚意外UPDATE语句的工具。因此,它不需要更新表里面的全部数据,您可以回滚UPDATE语句,并只更新符合一定条件的数据

使用 ApexSQL Log 意外UPDATE的数据::

  1. 启动 ApexSQL Log

  2. 连接到数据库

  3. 使用Time range部分在过滤设置选项步骤里,选择尽可能靠近UPDATE 语句被执行时的时刻以缩小恢复时间段范围 。

  4. 在过滤设置选项步骤中选择更新行,操作选项卡

  5. 选择在过滤设置选项步骤中被更新数据的表,表过滤器

  6. 如果可能,使用用户和应用程序过滤器来缩小结果范围
  7. 点击“打开”
  8. 创建“Undo”脚本:

    1. 在主页的tab窗口里的Actions 组里去点击“Create undo 脚本 ”来创建所有在grid窗格里显示的事务undo 脚本

    2. 检查您想创建的 Undo 脚本里的事务,在主grid窗格里右击并在邮件菜单里点击“创建undo脚本” 来创建已经被选中的事务的Undo 脚本
  9. 对数据库执行脚本

在执行Undo 脚本之后,UPDATE语句都会被回滚并且原始数据都会恢复到数据库受损坏之前。

如果您无意地更新了数据库里的记录并且您没有一个完整数据库备份,那么还有一个机会还原这些数据 就是使用

翻译者: 林勇桦

July 2, 2015