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

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

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

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

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

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

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

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

先创建测试表

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

插入测试数据

 --插入测试数据:
INSERT INTO testRestore(Name)
SELECT 'test1'
UNION ALL
SELECT 'test2'
UNION ALL
SELECT 'test3'
UNION ALL
SELECT 'test4'
UNION ALL
SELECT 'test5'
UNION ALL
SELECT 'test6'
UNION ALL
SELECT 'test7'
UNION ALL
SELECT 'test8'
 SELECT * FROM testRestore

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

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

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

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

查询一下数据是否删除

 USE [GPOSDB]
GO
SELECT * FROM dbo.testRestore

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

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

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

还原数据库完整备份

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

还原事务日志

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

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

查看表中的数据

 USE [GPOSDB]
GO
SELECT * FROM dbo.testRestore

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

要注意的两个地方

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

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

SQLSERVER拯救某个时间点被误删除的数据的更多相关文章

  1. 恢复SQLSERVER被误删除的数据(转——收藏)

    恢复SQLSERVER被误删除的数据 摘自:http://www.cnblogs.com/lyhabc/p/3683147.html 曾经想实现Log Explorer for SQL Server的 ...

  2. 恢复SQLSERVER被误删除的数据

    原文:恢复SQLSERVER被误删除的数据 恢复SQLSERVER被误删除的数据 曾经想实现Log Explorer for SQL Server的功能,利用ldf里面的日志来还原误删除的数据 这里有 ...

  3. 恢复SQLSERVER被误删除的数据(转)

    恢复SQLSERVER被误删除的数据 曾经想实现Log Explorer for SQL Server的功能,利用ldf里面的日志来还原误删除的数据 这里有一篇文章做到了,不过似乎不是所有的数据类型都 ...

  4. SqlServer当前月份时间

    SqlServer当前月份时间 SELECT -DAY(getdate()+-DAY(getdate()))

  5. MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间

    转自:https://blog.csdn.net/haleyliu123/article/details/70927668/ MySQL查询系统时间 第一种方法:select current_date ...

  6. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  7. 恢复SQL Server被误删除的数据

    恢复SQL Server被误删除的数据 <恢复SQL Server被误删除的数据(再扩展)> 地址:http://www.cnblogs.com/lyhabc/p/4620764.html ...

  8. 在Sqlserver下巧用行列转换日期的数据统计

    在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法. ...

  9. Oracle误删除表数据后的恢复具体解释

    Oracle误删除表数据后的恢复具体解释 測试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_re ...

随机推荐

  1. Android IOS WebRTC 音视频开发总结(七二)-- 看到Google Duo,你想到了什么?

    本文主要介绍在线教育这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help 在昨天的Google I/O大会上Go ...

  2. WampServer服务中MySQL无法正常启动解决方案

    打开wampserver->mysql->my.ini,添加或修改innodb_force_recovery = 1 然后重启所有服务就大功告成了!

  3. 银行ATM机工作流程模拟编程

    [编程内容] 编程,模拟一个ATM(Automatic Teller Machine,自动取款机)的工作流程.依据帐户信息:姓名.帐号.密码.余额,完成ATM机功能:登录.显示余额.取款.修改密码. ...

  4. Egret和Http请求 (Ajax、XMLHttpRequest、Post、Get)

    一  Http请求 二  AJax和XMLHttpRequest 三  一个Ajax例子 四 Egret中的egret.HttpRequest 五 Post和Get区别 一 Http请求 Http深入 ...

  5. js/json 数组的操作

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  6. objective c,copy, mutableCopy区别

    copy总是返回不能被修改的对象,mutableCopy返回可以被修改的对象 例: NSArray *array = @[@"test", @"test2"]; ...

  7. JavaScript系列:Date对象

    <script type="text/javascript">    var oDate = new Date();    var iYear = oDate.getF ...

  8. linux下查找某文件关键字

    -e表示罗列出与关键字有关的行,“ABC”表示查找的关键字,/XXX/4.assoc.linear表示该路径下的文件 .assoc.linear

  9. JQuery Checkbox的change事件

    JQuery   Checkbox的change事件  参考 http://blog.csdn.net/hbhgjiangkun/article/details/8126981   $(functio ...

  10. 交换机和VLAN

    交换机 交换机的两个作用:一是维护CAM表,CAM表是计算机的MAC地址和交换机端口的映射表:另一个是根据CAM来进行数据的转发. 以太网交换机转发数据帧有三种方式: 1.存储转发:即先存储后转发的方 ...