【问题标题】:Rollback insert statement回滚插入语句
【发布时间】:2009-08-26 08:57:57
【问题描述】:

我在一张表中插入了一些记录,最多 5000 条。

但现在我意识到这些记录不应该插入到这个表中。我无法一一删除记录。或者无法区分表中先前记录的插入记录。

我怎样才能回滚这个插入语句,让我的表恢复到原来的形式。

(我认为这是一种使用日志的方式。但我不知道该怎么做。)

谢谢。

【问题讨论】:

  • 数据库是否处于FULL恢复模式,是否有事务日志备份?

标签: sql insert rollback


【解决方案1】:

您可以尝试以下几个额外的想法。

在另一个数据库中恢复完整备份,然后使用一些第三方工具(例如ApexSQL Data DiffdbForgeRed Gate)比较表

如果数据库处于完全恢复模式,请尝试读取事务日志。以下是有关此主题的几篇文章:

SQL Server Transaction Log Explorer/Analyzer

Read the log file (*.LDF) in sql server 2008

How to view transaction logs in sql server 2008

【讨论】:

    【解决方案2】:

    假设您在执行此操作时不在交易中,您会发现这个过程很痛苦。不确定您对哪种类型的 DBMS 感兴趣,但这里有一些关于 SQL Server 2005 的信息:

    Rollback transaction using transaction log

    基本上,最简单的方法是从插入之前的备份中恢复数据库。

    【讨论】:

      【解决方案3】:

      我猜插入语句已经提交到数据库,否则你可以简单地做一个 ROLLBACK;

      您有审核表吗?如果有审计表,您将能够识别在特定日期时间插入的行,然后删除它们...

      【讨论】:

        【解决方案4】:

        插入的行是否有任何特征可以使它们与所有其他行区分开来?例如,是否有插入的日期或数字标识列?如果是这样,只需根据该条件进行删除即可。

        除此之外,奶油鸡是对的,它可能有点痛苦。但我以前从未使用过这样的事务日志回滚。

        【讨论】:

        • 不,我无法区分。这是不可能的。
        • 使用管理工作室 gui 相当容易 - 只需选择“时间点”恢复选项。
        • 您不想恢复到当前数据库中的某个时间点,因为它也会带走自该时间点以来添加到其他表中的所有其他记录。您需要恢复到不同的数据库,然后替换您感兴趣的表。如果其他人也将 trecords 插入到此表中,那么您根本不能使用恢复到某个时间点选项而不冒数据完整性问题的风险。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 2010-09-21
        • 1970-01-01
        相关资源
        最近更新 更多