一尘不染

取消删除最近删除的行sql server

sql

我错误地删除了一些行b,我可以使用日志或SSMS恢复它们吗?


阅读 139

收藏
2021-03-17

共1个答案

一尘不染

如果您的数据库处于简单恢复模式,那么您可能不走运。您可以还原到最新的备份,但是如果是很久以前的备份,则可能不包含您已删除并希望重新插入的行的副本。同时也很有可能已插入其他数据。您可以还原到新的数据库,然后进行SQL手术以将消失的数据恢复回来。

如果您的数据库处于完全恢复模式,则:

  1. 查找上次完整备份,此后的所有增量备份以及自上次增量或完整备份以来的所有日志备份文件,并将其还原到正确的时间点。您可以覆盖数据库(如果可以接受的话),或者可以还原到新数据库并执行SQL手术。

  2. 恢复过程如下所示:

    BACKUP DATABASE YourDB TO DISK = 'D:\MSSQL\Data\YourDB\YourDB Pre-Repair.bak'
    

    – It is CRUCIAL you take a new backup before doing ANYTHING so you don’t
    – make another mistake you can’t reverse.

    RESTORE DATABASE YourDB FROM DISK
    = ‘D:\MSSQL\Data\YourDB\YourDB 20121208 110000.bak’ WITH REPLACE, NORECOVERY;
    – be very careful with REPLACE as needing it proves there is un-backed-up data
    RESTORE LOG YourDB FROM DISK
    = ‘D:\MSSQL\Data\YourDB\YourDB 20121208 111500.log’ WITH NORECOVERY;
    RESTORE LOG YourDB FROM DISK
    = ‘D:\MSSQL\Data\YourDB\YourDB 20121208 113000.log’ WITH NORECOVERY;
    – restore more log files, all of them, in order, with none skipped
    RESTORE LOG YourDB FROM DISK
    = ‘D:\MSSQL\Data\YourDB\YourDB 20121209 020000.log’
    WITH STOPAT = ‘20121209 01:57:00’, RECOVERY;

请注意,我WITHSTOPAT在这里使用了它,它允许您将数据库还原到特定的时间点。在我的示例中,每15分钟进行一次日志备份,并在2012-12-09的1:57:15
AM发出致命查询。

如果要将数据库还原到新数据库,则必须执行以下操作:

RESTORE DATABASE NewDB FROM DISK
   = 'D:\MSSQL\Data\YourDB\YourDB 20121208 110000.bak'
WITH
   MOVE 'YourDBLogicalName' TO 'D:\MSSQL\Data\NewDB.mdf',
   MOVE 'YourDBLogicalName_Log' TO 'L:\MSSQL\Logs\NewDB.ldf';

使用RESTORE FILELISTONLY搞清楚什么是在备份中。如果同一文件中有多个备份,则可以使用更多语法来读取该信息,然后指定要使用的备份。使用sp_helpdb 'YourDB'找出把你NEWDB数据库和日志文件。

然后,如果需要的话,还有更多脚本可以重命名逻辑文件(我一直这样做)。

我现在才意识到您可以使用SSMSGUI来完成大部分操作。但是,如果您想开始理解所有这些知识并真正变得精通,建议您编写脚本。我是一名开发人员,但是可以轻松恢复数据库,而无需寻求“官方”DBA的帮助。

2021-03-17