博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLSERVER拯救某个时间点被误删除的数据
阅读量:6672 次
发布时间:2019-06-25

本文共 2759 字,大约阅读时间需要 9 分钟。

转载自:

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

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

如何查看你的数据库恢复模式为完整恢复模式,运行下面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)这个方法要对数据库独占

转载于:https://blog.51cto.com/1546594/2121084

你可能感兴趣的文章
【HAVENT原创】k8s docker 管理 和 网页接口 监控系统
查看>>
1111111
查看>>
linux 学习前的准备 centos6的安装!
查看>>
Linux 下 IPsec-tools的使用
查看>>
ssh使用公钥授权不通过的问题解决
查看>>
iPad2 A5完美越狱获得重大进展--转载
查看>>
linux 调优 I/O 优化
查看>>
我的友情链接
查看>>
python内置函数2-callable()
查看>>
Python WindowsError
查看>>
nginx配置虚拟主机(2) - ttlsa教程系列之nginx
查看>>
postgresql安装
查看>>
零刻数据提供多地优质BGP双线接入服务
查看>>
基于微软office web apps实现在线预览文档
查看>>
okToAccept: WARNING! Your cache is running out of filedescriptors
查看>>
epel
查看>>
类中关于列表的应用
查看>>
[xmind] JEE - JMS 笔记
查看>>
为android封装的百度定位组件
查看>>
List分批插入数据库
查看>>