如何从意外UPDATE和DELETE操作中恢复SQL Server数据

SQL DBA们的最惨的噩梦应该就是由于他们犯错而导致丢失数据了。这是很正常的对于不正确地执行了甚至忘记了在执行DELETE或UPDATE的时候加WHERE子句,最终导致数百万行数据也受到这个不加WHERE子句的update或delete牵连

那么,有哪些SQL Server数据恢复选项是可以用上的?

方案是使用一个备份,这个备份是灾难发生之前做的。

一般方案是使用已存在的数据库备份恢复丢失的数据库数据:

  1. 还原数据库备份,使用这个备份替换原来的数据库
  2. 否则
    • 在同一台服务器上还原备份,使用一个不同的数据库名
    • 在已还原的数据库上定位到相关的行
    • 使用已还原的数据库的原来的行更新原数据库受损坏的行

不幸的是,很少有这麽”整洁和干净“的还原场景可以使用这麽简单的方案。

更多的类似于:

  • 没有及早发现错误
  • 在最后一个数据库备份创建之后又发生了数据变更,并且那个查询是恢复变得更复杂
  • 大量涌入的新数据
  • 没有做常规的数据库备份,或者根本没有做备份


所有的复杂情况都会站不住阵脚

读取联机事务日志里的信息,事务日志备份或者分离的事务日志,为了恢复数据库数据,读取联机事务日志是恢复数据的一个选择。
ApexSQL Log 是一个SQL Server恢复工具 有读取事务日志数据的能力并且能依靠回滚事务来恢复丢失的数据库数据到它们原先的状态。

使用 ApexSQL Log 恢复由于意外UPDATE 或DELETE造成的数据库数据丢失:

    1. 启动 ApexSQL Log
    2. 连接到数据库
    3. Select SQL logs to analyze步骤,添加您想读取的事务日志备份和分离的事务日志文件。注意他们必须是来自一个完整的日志链的以便提供足够的审计信息。
      添加一个数据库备份可以帮助提升性能和审计跟踪数据的质量

    4. 使用过滤设置选项来收窄结果集 使用时间、操作类型、表名、用户和其他过滤选项

 

  • 当您设置了所有的选项之后,点击“打开”

 

您的事务将会被列出在应用程序主grid窗格。您依然能够在左边的面板使用过滤器去把额外的不需要的事务排除掉

执行数据恢复,再次检查您想回滚的事务并在Actions 这个tab窗格点击“Create undo script

从脚本编辑器里执行脚本,点击“Execute ”按钮或者按F5键,丢失的数据将会在数据库里进行还原。

所以请记住,如果您无意地执行了DELETE/UPDATE,您依然可以使用 ApexSQL Log 在不同的情况下恢复丢失的数据库数据

翻译者: 林勇桦

July 2, 2015