/*-----------------------------------关于误删数据表中的数据恢复方法演练-----------------------------------*/
--如果当前数据库中存在‘test’表名,则删除
IF OBJECT_ID('test') IS NOT NULL
DROP TABLE testRestore
GO
--使数据库testdb 处于当前状态
use testdb
go
--创建表testrestore
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
waitfor '00:01:00'--此处最好设置等待几分钟,以免后面日志恢复,时间点设置好有参考,回滚太前可能表都没有创建
--对数据库testdb进行完全备份,注意要追加现有媒体备份集,这也是默认备份设置
backup database testdb to disk='e:\testdb_data.bak' with format
--删除表名
waitfor time '12:55' --精确删除表的时间,为后面还原时间的准确选取做准备
delete from testrestore --删除数据
--查看数据内容,数据被删除
select * from testrestore
--对数据库进行日志备份
backup log testdb to disk='e:\testdb_log.bak' with format
--对数据库的数据文件进行还原
restore database testdb from disk='e:\testdb_data.bak' with replace,norecovery --执行后发现数据库处于还原状态
--对数据库日志文件进行还原
restore log testdb from disk='e:\testdb_log.bak' with recovery,
stopat='2013-10-18 12:54:00:000' --with recovery使数据库处于可用状态 此处时间格式要注意
--最后使用数据库,查看数据,恢复成功
use testdb
go
select * from testrestore --查看恢复后的状况,原表数据存在