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. 百度地图API示例之设置地图显示范围

    代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...

  2. Spark MLlib之协同过滤

    原文:http://blog.selfup.cn/1001.html 什么是协同过滤 协同过滤(Collaborative Filtering, 简称CF),wiki上的定义是:简单来说是利用某兴趣相 ...

  3. java assert

    一.语法形式: Java2在1.4中新增了一个关键字:assert.在程序开发过程中使用它创建一个断言(assertion),它的 语法形式有如下所示的两种形式: 1.assert condition ...

  4. Border-radius属性--设置圆角边框

    border-radius:该属性允许您为元素添加圆角边框! div { border:2px solid; border-radius:25px; -moz-border-radius:25px; ...

  5. 深入理解js——原型的灵活性

    在java中,class是一个模子,对象就是按照这个模子刻出来的:但是在JavaScript中对象可以刻成任意的样子. 首先,对象属性可以随时改动.对象或者函数,刚开始new出来之后,可能啥属性都没有 ...

  6. 有关于eclipse启动不了的问题

    !SESSION 2016-06-16 10:43:16.368 -----------------------------------------------eclipse.buildId=4.5. ...

  7. bs4的学习

    soup = BeautifulSoup(html,'html.parser') #'html.parser'是html解析器必须有soup.find_all("a")  #等价于 ...

  8. 使用__slots__

    [使用__slots__] 参考: 1.http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a0 ...

  9. jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2

    第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){   // 编写代码... }); 可以简写成: $(function( ...

  10. u3d shader forge 冰渐冻材质

    <ignore_js_op> 分享个自己研究的冰材质渐冻shader可以调节的参数很多,并且带模型顶点偏移,能更加真实模拟冰的凹凸厚度感.(参数过大容易出现模型破损,慎用)shader f ...