先利用Log Explorer 恢复数据.然后备份数据,然后数据再还原到指定的时间点.
 
 
    
    /*
    
     标题:Log Explorer for SQL Server v4.0.2的下载地址和使用说明 作者:爱新觉罗·毓华  时间:2008-07-14 地点:新疆乌鲁木齐 资料来源: 
    
    */
    
      
    
    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
    
    )、如果实在遇到自然因素,网络又断开了复制操作的情况下,建议只有手工"造取"一批数据出来弥补丢失数据,一般选取类似纬度(如时间、区域等)的数据。  
 
 
--
    
    数据还原到指定时间点的处理示例
    
     --
    
    创建测试数据库
    
     
    
    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
    
     #