SQLServer数据库之SQLSERVER恢复具体时间点误删除的数据
小标 2019-03-20 来源 : 阅读 1490 评论 0

摘要:本文主要向大家介绍了SQLServer数据库之SQLSERVER恢复具体时间点误删除的数据,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库之SQLSERVER恢复具体时间点误删除的数据,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

SQLServer数据库之SQLSERVER恢复具体时间点误删除的数据

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

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

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

SELECT  recovery_model, recovery_model_desc2 FROM  sys.databases3 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)这个方法要对数据库独占。

本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程