如何通过事务日志恢复SqlServer数据库到一个特定的时间点
解决方案 »
- 一个用户名可以映射多个登录名吗,请举例。
- 关于日志中指定时间点的问题
- 很简单的基础问题:对表频繁更新会影响对表的读取性能吗?在线等!!
- 我准备来这混几条裤子穿穿
- 请问MSSQL中的日期函数是什么?
- 高分求解,很简单的问题相当于送分啊。不拿白不拿,请高手们进来给些代码示意~ 随便给师付们拜年了!!
- 数据库中关于索引的问题
- 查询重复的行有几项,具体是字段[id]哪一个
- 有没有能将 MS sql 的存储过程转换成Oracle的存储过程的工具呀~请高手推荐一下
- 高分求教菜鸟问题!请问:.db文件用什么软见打开呀?
- sql怎么看目前都有谁在使用数据库的表、存储过程,使用的那个表等信息 ?
- [求助]如何写这个随机查询的SQL语句?
还原完全备份的数据库
日志还原数据库到时间点 restore log db from disk='' with recovery ,stopat=时间
CREATE DATABASE Db
GO--对数据库进行备份
BACKUP DATABASE Db TO DISK='c:\db.bak' WITH FORMAT
GO--创建测试表
CREATE TABLE Db.dbo.TB_test(ID int)--延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败)
WAITFOR DELAY '00:00:01'
GO--假设我们现在误操作删除了 Db.dbo.TB_test 这个表
DROP TABLE Db.dbo.TB_test--保存删除表的时间
SELECT dt=GETDATE() INTO #
GO--在删除操作后,发现不应该删除表 Db.dbo.TB_test--下面演示了如何恢复这个误删除的表 Db.dbo.TB_test--首先,备份事务日志(使用事务日志才能还原到指定的时间点)
BACKUP LOG Db TO DISK='c:\db_log.bak' WITH FORMAT
GO--接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行)
RESTORE DATABASE Db FROM DISK='c:\db.bak' WITH REPLACE,NORECOVERY
GO--将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早
DECLARE @dt datetime
SELECT @dt=DATEADD(ms,-20,dt) FROM # --获取比表被删除的时间略早的时间
RESTORE LOG Db FROM DISK='c:\db_log.bak' WITH RECOVERY,STOPAT=@dt
GO--查询一下,看表是否恢复
SELECT * FROM Db.dbo.TB_test/*--结果:
ID
----------- (所影响的行数为 0 行)
--*/--测试成功
GO--最后删除我们做的测试环境
DROP DATABASE Db
DROP TABLE #