下午不小心把sql2000数据库中的一些数据表删掉了,谁知道怎么才能恢复这些数据么? 我的数据库名称是中文的。。

解决方案 »

  1.   

    先扇自己两耳光,再用log explorer试试打开log   explorer   file=> attach   log   file-> 选择服务器和登陆方式-> connect->
    选择数据库-> attach-> 左面对话框中browse-> view   log-> 就可以看到log记录了
    想恢复的话:   右键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中修改的日志记录,所以无法做恢复.
    恢复过程:
    使用工具是LogExplore,(下载地址:http://five.ttdown.com/L/Log%20Explorer%20for%20SQL%20Serverv%20v3.21.KG.exe)安装后打开log   explorer   file=> attach   log   file-> 选择服务器和登陆方式-> connect->
    选择数据库-> attach-> 左面对话框中browse-> view   log-> 就可以看到log记录,
    点击“View   DDL   Commands”里面就有很多drop   table   命令
    点击下面的“undo”按钮是生成表结构的语句(create   table   ....)
    点击下面的“Salvage”按钮是生成插入语句的(insert   into   ...values....)
    (以上lynx1111提供)我是按照上述方法的“Salvage”来生成被删除表的Insert语句,实际上用这个方法生成的SQL脚本已经包含了CreateTable。该过程速度大概用了8个小时,当时觉得慢,后来相比恢复过程,这个速度简直快的不行。最大的表脚本生成后超过1G。生成所有的SQL脚本后,防止万一,我将数据库停下,并把Date文件夹的Log和.MDF文件拷出来(怕破坏LOG文件,没有使用数据库的备份方式备份),文件大小总共为5.7G此后开始进行正式的恢复工作。新建一个数据库,先试着用SQL查询分析器运行了一个小表的脚本,完全没有问题。但后来发现导入比较大的SQL脚本文件,查询分析器就报错了。请教了realgz得知logExplorer本身对大脚本有良好支持,因此改用LogExplorer--》Run   SQL   Script   功能来运行脚本。果然大文件也可以恢复了。但开始运行后发现包含有ntext字段的表恢复起来异常缓慢,打开一个包含nText字段的表的恢复脚本发现里面使用writeText来写入数据。恢复一个30万数据的表居然用了将近12小时的时间,而数据库中又有大量这样的表,为了加快数据,我又在几个机器上装了LogExplorer加入恢复过程,终于经过3天的时间,全部的表都搞的差不多了,不过恢复过程有少量的错误。接下来我将几个机器的表导到同一个数据库中,不过此时恢复的表是没有包含索引、标识等扩展属性的,因此需要重新建立索引、标识、默认值以及触发器。在建立主键的时候发现居然有数据重复没办法只好删除重复数据。使用   select   distinct   *   into   t_New   from   t_Old   可以删除重复数据,但遇到有ntext字段的表是不能用这个方法的,最后只好用   Delete   From   t_Table   Where   ID   IN   (Select   ID   From   t_Table   a   where   (Select   Count(*)   From   t_Table   a   where   a.ID   =   ID   )   >   1   )直接删除了有重复数据的记录经过72小时的努力,99.9%的数据恢复。并于4月8日晚上恢复运行网站。这时候部分用户反映无法登陆,一查发现是有小部分数据丢失,也就是LogExplorer里报错误的那些数据……没办法,我重新用UEdit打开SQL脚本,查找这些数据,发现还在,仔细一看发现,这些数据里都有部分内容里使用大量的回车,LogExplorer无法识别,因此才出的错误。呵呵,顾客是上帝,没办法,只好将用户表重新在本地恢复一次,遇到错误就记录下ID,然后再考出SQL脚本到查询分析器运行(查询分析器可以运行)现在建立了维护计划,每个星期做一次完整备份。另外操作数据库的流程也变的规范,防止此类事故出现[一些收获:]
    1、慎重使用Text/nText字段
    2、LogExplorer的脚本执行工具对付大文件很不错,但执行过程会对多个回车产生误判断
    3、有问题不要着急,上csdn找高手帮忙,他们会很热心帮助你。
      

  2.   

    1、下载工具(Lumigent  LogExplorer4  SQLServer)2、安装注意事项,一定要注册,不然所连接的数据库就只有sql server2000自带的两个数据库pubs和msdb.3、打开log   explorer   file=>attach   log   file->选择服务器和登陆方式->connect->   
      选择数据库->attach->左面对话框中browse->view   log->就可以看到log记录了   
      想恢复的话:   右键log记录   undo   transation->选择保存文件名和路径->然后打开该文件到查询分析器里执行   
      t-sql代码就可以了  
      

  3.   

    使用Log Explorer查看和恢复数据 Log Explorer 4.1.可用于SQL Server2005的日志查看工具下载地址:
    http://download.csdn.net/source/620271使用方法:打开Log Explorer -> Attach Log File -> 选择SQL Server服务器和登陆方式 -> Connect -> 
    在Database Name中选择数据库 -> Attach-> 左面对话框中Browse-> View Log-> 就可以看到log记录了 想恢复的话: 右键Log记录 Undo Transation-> 选择保存文件名和路径-> 然后打开该文件到查询分析器里执行 
    T-sql代码就可以了 例如 如果Log是delete table where ...的话,生成的文件代码就是insert table .... 
         然后将此insert table的代码放到查询分析器里执行.就可以恢复数据.
    ----------------------------------------------------------------------
    --如何恢复被delete/update的数据
    ----------------------------------------------------------------------  
    1 连接到被删除数据库的Db
    打开log explorer  选择  "file"->"attach log file"->选择服务器和登陆方式->"connect"->选择"数据库"->"attach"
    2   查看日志
     在左面操作项目的对话框中选择"browse"项目->"view log"->就可以看到当前的Log记录了
    3   恢复数据
         右键某一条log记录,选择"undo transation"->"选择保存文件名和路径"->然后打开该文件到查询分析器里执行
    T-sql代码就可以了
    例如: 如果log是delete table where ...的话,生成的文件代码就是insert table ....
    ----------------------------------------------------------------------
    --Log Explorer恢复被drop table和truncate table后的数据
    ----------------------------------------------------------------------
    1  连接到被删除数据库的Db
         操作同上
    2   恢复方法
        1)  选择"salvaage dropped/truncate"菜单,在右边的对话框中选择表名,和droped/trucated的日期,
        File Name中选择生成insert语句脚步的存放位置,condition选择是droped还是truncated,
        最后点击"create" 就会生成insert语句,把生成的语句到查询分析器里面执行一下就可以了
        2) 选择"ViewDDL Commands"菜单->选"truncate table" 操作项->点击"Salvage"->生成语句->查询分析器里执行
    ----------------------------------------------------------------------
    --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恢复数据
      

  4.   

    就是楼上们说的:Log Explorer,利用日志去恢复。