如何从表中恢复旧数据

时间:2010-01-11 13:48:18

标签: sql

我在SQL 2008的表中创建了一个更新语句,该表用一些错误的数据更新了表。

我没有备份数据库。

这是一些重要的日期。

无论如何,我可以从表中恢复旧数据。

由于

SNA

7 个答案:

答案 0 :(得分:6)

基本上没有,除非您想使用商业日志阅读器并尝试使用细齿梳。没有数据库的备份可以是'更新简历,离开城镇'的情况 - 严厉但不应该发生。

答案 1 :(得分:6)

安德鲁基本上已经打过电话了。我只是想添加一些你可以考虑的想法,如果你是绝望的:

  1. 周围是否有任何报告或打印件?也许你可以从那里重建数据。
  2. 这些数据是通过网络应用程序输入的吗?如果是这样,您可以在Web服务器日志中找到原始数据,具体取决于应用程序的构建方式等。
  3. 此应用程序界面(将数据传递给)任何其他应用程序吗?他们可能有一个缓冲的数据副本......
  4. 数据是否可以从任何其他现有数据中获得?是否有审计日志表或基于此日期的架构中的其他日期,您可以从中重建原始日期?
  5. 修改

    一些评论者提到在运行它们之前测试更新/删除语句是个好主意。为了成为习惯,如果你有一个简单的方法,它会有所帮助。我通常会创建这样的DELETE语句:

    --delete --select * 
    from [User]
    where UserID=27
    

    要运行选择以测试查询,请突出显示从select开始的所有内容。若要对筛选条件满意,请运行删除,突出显示从delete开始的所有内容。 delete前面的两个破折号是这样的,如果查询意外运行,它将因语法无效而崩溃。

    您可以为UPDATE语句使用类似的构造,尽管它不是那么干净。

答案 2 :(得分:3)

SQL Server会为每次转换保留日志。因此,您可以从日志中恢复已修改的数据,而无需备份。

Select [PAGE ID],[Slot ID],[AllocUnitId],[Transaction ID]
,[RowLog Contents 0], [RowLog Contents 1],[RowLog Contents 3],[RowLog Contents 4]
,[Log Record]
FROM    sys.fn_dblog(NULL, NULL)  
WHERE
AllocUnitId IN 
(Select [Allocation_unit_id] from sys.allocation_units allocunits
INNER JOIN sys.partitions partitions ON (allocunits.type IN (1, 3)  
AND partitions.hobt_id = allocunits.container_id) OR (allocunits.type = 2 
AND partitions.partition_id = allocunits.container_id)  
Where object_id=object_ID('' + 'dbo.student' + ''))
AND Operation in ('LOP_MODIFY_ROW','LOP_MODIFY_COLUMNS') 
And [Context] IN   ('LCX_HEAP','LCX_CLUSTERED')

这是艺术,它逐步解释,如何做到这一点。 http://raresql.com/2012/02/01/how-to-recover-modified-records-from-sql-server-part-1/

姆兰

答案 3 :(得分:1)

感谢所有回复。

问题实际上是偶然的 - 我错过了在更新声明中选择where条件.--- Rest!。

这是一个快速的5分钟任务 - 就像更改日期以测试一个客户数据一样 - 所以我们没有考虑进行备份。

是的,你当然是真的..这是一个教训。

现在我会小心地在交易中写下“我的更新语句”。或“测试我的更新语句”

再次感谢 - 花时间提供一些见解而忽略了问题,因为唯一的答案是“不”。

由于

SNA

答案 4 :(得分:0)

总是在主要UPDATE语句之前进行备份,即使它没有被使用,也能让您高枕无忧

特别是使用Red Gate的对象级还原,现在可以在给定备份文件的情况下恢复单个表/行

祝你好运,我建议在其他地方寻找旧版本(DEV / QA)等......

答案 5 :(得分:0)

是否可以在UPDATE语句上进行回滚?

答案 6 :(得分:0)

迟到但希望有用...

如果数据库处于完全恢复模式,则所有事务都记录在事务日志中并可以检索。问题是这不是本机支持的,因为这不是事务日志的主要目的。

选项包括:

  • 商业工具,例如Apex Log(更昂贵,更多选项)或Quest Toad(更便宜,更少选项用于此目的主要关注SQL Server管理)
  • 尝试自己做,就像user1059637指出的那样。这种方法的问题在于它无法读取事务日志备份并且更加繁琐。

    归结为您的数据在时间和金额方面对您的价值。