利用SQL日志把数据还原到指定时间点

 先利用Log Explorer 恢复数据.然后备份数据,然后数据再还原到指定的时间点.

SQL code
   
   
/* 标题:Log Explorer for SQL Server v4.0.2的下载地址和使用说明 作者:爱新觉罗·毓华 时间:2008-07-14 地点:新疆乌鲁木齐 资料来源:http://topic.csdn.net/u/20090305/00/849723bf-74ad-495f-8fc6-22d2108beb10.html?seed=1633183628 */ 1 、Lumigent Log Explorer for SQL Server v4. 0.2 特别版下载地址 http: // down.chinaz.com / soft / 7887 .htm Log Explorer for SQL Server 4.2 注册码 wv5rc - uxvpz - e33 - nr4694qs2 2 Log Explorer for SQL Server v4. 0.2 安装完毕后,注册该程序(压缩文件有注册机) 打开log explorer file => attach log file -> 选择服务器和登陆方式 -> connect -> 选择数据库 -> attach -> 左面对话框中browse -> view log -> 就可以看到log记录了 点击“ View DDL Commands”里面就有很多drop table 命令 点击下面的“undo”按钮是生成表结构的语句( create table ....) 点击下面的“Salvage”按钮是生成插入语句的( insert into ... values ....) 想恢复的话: 右键log记录 undo transation -> 选择保存文件名和路径 -> 然后打开该文件到查询分析器里执行T - sql代码就可以了 例如 如果log是delete table where ...的话,生成的文件代码就是insert table .... log explorer使用的几个问题 1 )、对数据库做了完全、差异和日志备份 备份时选用了删除事务日志中不活动的条目 再用Log explorer打试图看日志时 提示No log recorders found that match the filter,would you like to view unfiltered data 选择yes,就看不到刚才的记录了 如果不选用了删除事务日志中不活动的条目 再用Log explorer打试图看日志时,就能看到原来的日志 2 )、修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复 3 )、然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上, 否则会出现数据库正在使用无法恢复) 恢复完后,再打开log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data 选择yes,就看不到刚才在2中修改的日志记录,所以无法做恢复. 4 )、不要用SQL的备份功能备份,搞不好你的日志就破坏了. 正确的备份方法是: 停止SQL服务,复制数据文件及日志文件进行文件备份. 然后启动SQL服务,用log explorer恢复数据 5 )、如果你的数据库的日志恢复模型是simple,那就不可能用log explorer恢复 6 )、 Log explorer必须安装在要恢复数据库的sql server服务器上,或者在sql server服务器上安装服务端,在操作的电脑上安装客户端进行数据恢复 3 、如果数据量比较大的话,使用磁带机和集群的话,安装了正版的VERITAS ,恢复数据是比较好的方法。 下面是该软件重要的新功能: 1 )、灾难恢复演习(Disaster Recovery Fire Drill) -- 能够自由测试、规划和检验灾难恢复计划,而不会中断生产过程。 2 )、集群模拟器(Cluster Simulator) -- 可测试应用故障切换方案,以验证应用的可用性,确认应用是否根据计划的故障切换策略和应用需求,迁移到最适当的服务器。 3 )、全局集群选件(Global Cluster Option ) -- 当可用性要求从本地迁移到广域灾难恢复时,能够快速、轻松地升级到任何体系结构。 4 )、即时访问复制数据 -- 在复制数据的同时,能够即时访问数据,只占用客户的部分可用存储容量。 5 )、卷复制顾问工具(Volume Replicator Advisor) -- 准确地分析带宽需求,确保应用得到优化。 4 、几点恢复数据心得: 1 )、平时需要做好双机热备份,日备份,月备份,年备份,数据复制,异常记录等工作,在数据丢失的情况下才能做到心中不急。 2 )、如果硬盘损害错误,或者误删除数据库的时候,可以考虑用Easyrecovery或者Recover4all等软件恢复删除或者受到损害的文件,再恢复数据。 3 )、如果实在遇到自然因素,网络又断开了复制操作的情况下,建议只有手工"造取"一批数据出来弥补丢失数据,一般选取类似纬度(如时间、区域等)的数据。

 

SQL code
   
   
-- 数据还原到指定时间点的处理示例 -- 创建测试数据库 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 #

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值