zoukankan      html  css  js  c++  java
  • SQLSERVER拯救某个时间点被误删除的数据

    SQLSERVER拯救某个时间点被误删除的数据

    转载自:http://blog.csdn.net/dba_huangzj/article/details/8491327

    要拯救某个时间点被误删除的数据,需要你在那个时间点之前有一个完整数据库备份。

    而且,需要你的数据库恢复模式为:“完整恢复模式”

    如何查看你的数据库恢复模式为完整恢复模式,运行下面SQL

    1 SELECT  recovery_model, recovery_model_desc
    2 FROM    sys.databases
    3 WHERE   name = 'GPOSDB'

    在创建完一个新数据库之后,强烈建议做一次数据库完整备份

    -------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------

    先创建测试表

     1 /*
     2 由于tempdb永远为简单恢复模式,所以不适合做案例。
     3 这里使用我的测试机器里的数据库GPOSDB
     4 */
     5 USE [GPOSDB]
     6 GO
     7 IF OBJECT_ID('testRestore') IS NOT NULL 
     8     DROP TABLE testRestore
     9 GO
    10 CREATE TABLE testRestore
    11     (
    12       id INT IDENTITY(1, 1) ,
    13       NAME VARCHAR(50)
    14     );

    插入测试数据

     1 --插入测试数据:   
     2 INSERT INTO testRestore(Name)
     3 SELECT 'test1'
     4 UNION ALL 
     5 SELECT 'test2'
     6 UNION ALL 
     7 SELECT 'test3'
     8 UNION ALL 
     9 SELECT 'test4'
    10 UNION ALL 
    11 SELECT 'test5'
    12 UNION ALL 
    13 SELECT 'test6'
    14 UNION ALL 
    15 SELECT 'test7'
    16 UNION ALL 
    17 SELECT 'test8'
    1 SELECT * FROM testRestore

    先来一个数据库完整备份,在22:32的时候完整备份数据库

    1 BACKUP DATABASE [GPOSDB]
    2 TO DISK='D:GPOSDB_FULLBACKUP2013-07-23.bak'
    3 WITH INIT
    4 go

    模拟删除表数据,这里使用waitfor time,目的是使删除数据的时间准确一点,这里选择22:34的时候删除数据方便后面还原某个时间点之前的数据

    1 USE [GPOSDB]
    2 GO
    3 WAITFOR TIME '22:34'
    4 DELETE FROM dbo.testRestore


    查询一下数据是否删除

    1 USE [GPOSDB]
    2 GO
    3 SELECT * FROM dbo.testRestore

    断开与GPOSDB数据库的连接,如果还有连接就kill掉连接,然后执行事务日志备份,在22:36的时候执行事务日志备份

     1 --删除了表中的数据之后最少要等3分钟才执行下面SQL语句,不然的话等一下还原事务日志的时候会报错
     2 --必须断开所有与GPOSDB数据库的连接
     3 USE master
     4 GO
     5 BACKUP LOG [GPOSDB] TO  DISK = N'D:GPOSDB_LOGBACKUP2013-07-23.bak' WITH  NO_TRUNCATE , NOFORMAT,  NAME = N'GPOSDB-事务日志备份', SKIP,  NORECOVERY ,  STATS = 10, CHECKSUM
     6 GO
     7 DECLARE @backupSetId AS INT
     8 SELECT  @backupSetId = position
     9 FROM    msdb..backupset
    10 WHERE   database_name = N'GPOSDB' AND backup_set_id = ( SELECT
    11                                                               MAX(backup_set_id)
    12                                                         FROM  msdb..backupset
    13                                                         WHERE database_name = N'GPOSDB'
    14                                                       )
    15 IF @backupSetId IS NULL  --这里是验证事务日志备份是否成功,如果没有断开与GPOSDB数据库的连接备份事务日志可能会失败
    16     BEGIN
    17         RAISERROR(N'验证失败。找不到数据库“GPOSDB”的备份信息。', 16, 1)
    18     END
    19 RESTORE VERIFYONLY FROM  DISK = N'D:GPOSDB_LOGBACKUP2013-07-23.bak' WITH  FILE = @backupSetId
    20 GO

    1 --查询是否备份成功
    2 SELECT TOP 10 * FROM    msdb..backupset ORDER BY [backup_set_id] DESC 

    还原数据库完整备份

    1 --数据库处于正在还原状态
    2 RESTORE DATABASE [GPOSDB] FROM DISK='D:GPOSDB_FULLBACKUP2013-07-23.bak' WITH replace, NORECOVERY 

     还原事务日志

    1 --因为删除数据是在'22:34' 所以还原到22:33
    2 RESTORE LOG [GPOSDB] FROM DISK='D:GPOSDB_LOGBACKUP2013-07-23.bak' WITH RECOVERY ,STOPAT='2013-7-23 22:33'

    如果事务日志还原失败的话,可以使用GUI界面

    查看表中的数据

    1 USE [GPOSDB]
    2 GO
    3 SELECT * FROM dbo.testRestore

     -----------------------------------------------------------华丽的分割线--------------------------------------------

    要注意的两个地方

    (1)如果你发现误操作以后还有很多人做了操作,那么你还原成功后,别人的操作就会冲掉,所以发生误操作后,要马上停止别人对数据库的操作。

    (2)这个方法要对数据库独占

  • 相关阅读:
    【leetcode】1020. Partition Array Into Three Parts With Equal Sum
    【leetcode】572. Subtree of Another Tree
    【leetcode】123. Best Time to Buy and Sell Stock III
    【leetcode】309. Best Time to Buy and Sell Stock with Cooldown
    【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
    【leetcode】467. Unique Substrings in Wraparound String
    【leetcode】823. Binary Trees With Factors
    【leetcode】143. Reorder List
    【leetcode】1014. Capacity To Ship Packages Within D Days
    【leetcode】1013. Pairs of Songs With Total Durations Divisible by 60
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3209530.html
Copyright © 2011-2022 走看看