【问题标题】:Recover deleted rows from SQL Server 2000从 SQL Server 2000 中恢复已删除的行
【发布时间】:2011-10-03 07:52:58
【问题描述】:

一个脚本使用以下查询意外地从数据库中删除了几行:

DELETE FROM that_table WHERE id IN (100, 101, 102)

同时添加了更多行。有没有办法让我将三行恢复到同一个表(或者可能是另一个数据库/表)中?我不想恢复数据库,就好像这意味着我丢失了在该查询之后添加/更新的所有数据。手动输入缺失的行是一种选择。

【问题讨论】:

  • 用另一个名字恢复数据库,然后用跨数据库查询复制数据。
  • @rb。我有一个在删除之前创建的备份,所以 (i) 我该怎么做 (ii) 是否安全;我的意思是有任何陷阱吗?
  • 由于您需要第二次恢复整个数据(使用不同的名称),您需要额外的磁盘空间 - 但这就是全部......
  • 关于陷阱 - 取决于你的技能(这里是 BIT gotcha)、你的计划有多好(另一个大问题)以及应用程序有多复杂 - 有时应用程序会内置一些陷阱。
  • @marc_s:数据库约为 4GB,我有 1.2TB 可用空间,所以我没问题,对吧?

标签: sql-server sql-server-2000 data-recovery


【解决方案1】:

您可以使用ApexSQL Log,这是一种 SQL Server 审计和恢复工具,它可以从数据库事务日志中读取信息,并为 DML 和 DDL 操作提供撤消 T-SQL 脚本。

免责声明:我在 ApexSQL 担任产品支持工程师

【讨论】:

    【解决方案2】:

    当您使用 SQL Server 2000 时,您可能会很幸运,因为免费的Redgate SQL Log Rescue Tool 可以针对此版本运行。

    【讨论】:

      【解决方案3】:

      幸运的是,我有一个备份,所以我使用此处描述的过程在同一台服务器上但在一个新数据库下恢复备份:

      Restoring a Complete Backup to a New Database on the Same Server

      在新数据库中恢复数据库备份后,我找到了行并插入它们:

      INSERT INTO that_database..that_table
      SELECT * FROM copy_database..that_table WHERE id IN (100, 101, 102)
      

      上面的查询不是开箱即用的,我必须启用身份插入并暂时禁用一些约束。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        • 2013-06-28
        • 1970-01-01
        • 2013-01-25
        • 2014-06-13
        • 2010-12-27
        • 2015-12-18
        相关资源
        最近更新 更多