drop database studentdb1,a,b,c,d --创建一个测试数据库create database testdb go--备份测试数据库 backup database testdb to disk='e:\testdb.bak' with format go
--使当前数据库处于当前使用状态 use testdb go--创建测试表create table test_table (sno int ) go--延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒, --不延时的话,可能会导致还原到时间点的操作失败) WAITFOR DELAY '00:00:01 ' GO --假设现在误删了上面创建的测试表drop table test_table go--保存删除时间 select dt=getdate() into # goselect * from # --查看该表下的内容--后来发现上述表不应该删除,要恢复过来--下面演示恢复该表的过程--首先备份事务日志(使用事务日志才能还原到指定的地点) backup log testdb to disk='e:\testdb_log.bak' with format go--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行) restore database testdb from disk='e:\testdb.bak' with replace,norecovery go--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早 DECLARE @dt datetime SELECT @dt=DATEADD(ms,-60,dt) FROM # --获取比表被删除的时间略早的时间 RESTORE LOG testdb FROM DISK= 'e:\testdb_log.bak ' WITH RECOVERY,STOPAT=@dt GO select * from test_table 以上我做了一遍,但最后没有恢复删除的数据表!我想是不是我的时间上的间距设置问题!大神们帮我看看!
--创建一个测试数据库create database testdb
go--备份测试数据库
backup database testdb to disk='e:\testdb.bak' with format
go
--使当前数据库处于当前使用状态
use testdb
go--创建测试表create table test_table
(sno int )
go--延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,
--不延时的话,可能会导致还原到时间点的操作失败) WAITFOR DELAY '00:00:01 '
GO
--假设现在误删了上面创建的测试表drop table test_table
go--保存删除时间
select dt=getdate() into #
goselect * from # --查看该表下的内容--后来发现上述表不应该删除,要恢复过来--下面演示恢复该表的过程--首先备份事务日志(使用事务日志才能还原到指定的地点)
backup log testdb to disk='e:\testdb_log.bak' with format
go--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行) restore database testdb from disk='e:\testdb.bak' with replace,norecovery
go--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早
DECLARE @dt datetime
SELECT @dt=DATEADD(ms,-60,dt) FROM # --获取比表被删除的时间略早的时间
RESTORE LOG testdb FROM DISK= 'e:\testdb_log.bak ' WITH RECOVERY,STOPAT=@dt
GO
select * from test_table
以上我做了一遍,但最后没有恢复删除的数据表!我想是不是我的时间上的间距设置问题!大神们帮我看看!
建议
1.将延时时间加长,如5秒.
2.SELECT @dt=DATEADD(ms,-60,dt) FROM # --获取比表被删除的时间略早的时间
--> 这里dateadd()参数2的值应该等于 -1000*延时秒数, 60太小了.注意这里不是60进制的,1s=1000ms.
你的意思-60表示的不是往前60s啊而是60ms对吧,上面的问题我解决了,谢谢哈!我把dateadd第二个参数改为-60000,提示回滚数据太靠前,我改为-10000就可以了,我就是想问下,SELECT @dt=DATEADD(ms,-60,dt) FROM # --获取比表被删除的时间略早的时间
这个时间间距有没有什么规则,比如离删除表之间的时间应该控制在什么时间段内,有没有规定的有效回复时间!