CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

急!!!只有数据库.mdf文件,怎么恢复数据库呢?

楼主csharper2005(初学.NET)2005-02-21 10:13:14 在 MS-SQL Server / 应用实例 提问

只有数据库.mdf文件,怎么恢复数据库呢?  
  不小心把log文件.ldf给删了,咋恢复啊???  
  求详细步骤。。。 问题点数:100、回复次数:9Top

1 楼wzjcntlqs(要做钱的主人)回复于 2005-02-21 10:15:47 得分 5

1。直接拊加  
  2。用sp_attach_dbTop

2 楼vinsonshen(为了明天)回复于 2005-02-21 10:16:02 得分 10

sp_attach_single_file_db  
  将只有一个数据文件的数据库附加到当前服务器。  
   
  语法  
  sp_attach_single_file_db   [   @dbname   =   ]   'dbname'  
          ,   [   @physname   =   ]   'physical_name'  
   
  参数  
  [@dbname   =]   'dbname'  
   
  要附加到服务器的数据库的名称。dbname   的数据类型为   sysname,默认值为   NULL。    
   
  [@physname   =]   'phsyical_name'  
   
  据库文件的物理名称,包括数路径。physical_name   的数据类型为   nvarchar(260),默认值为   NULL。  
   
  返回代码值  
  0(成功)或   1(失败)  
   
  结果集  
   
   
  示例  
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。  
   
  EXEC   sp_detach_db   @dbname   =   'pubs'  
  EXEC   sp_attach_single_file_db   @dbname   =   'pubs',    
        @physname   =   'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\pubs.mdf'  
   
  Top

3 楼vinsonshen(为了明天)回复于 2005-02-21 10:16:08 得分 10

sp_attach_single_file_db  
  将只有一个数据文件的数据库附加到当前服务器。  
   
  语法  
  sp_attach_single_file_db   [   @dbname   =   ]   'dbname'  
          ,   [   @physname   =   ]   'physical_name'  
   
  参数  
  [@dbname   =]   'dbname'  
   
  要附加到服务器的数据库的名称。dbname   的数据类型为   sysname,默认值为   NULL。    
   
  [@physname   =]   'phsyical_name'  
   
  据库文件的物理名称,包括数路径。physical_name   的数据类型为   nvarchar(260),默认值为   NULL。  
   
  返回代码值  
  0(成功)或   1(失败)  
   
  结果集  
   
   
  示例  
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。  
   
  EXEC   sp_detach_db   @dbname   =   'pubs'  
  EXEC   sp_attach_single_file_db   @dbname   =   'pubs',    
        @physname   =   'c:\Program   Files\Microsoft   SQL   Server\MSSQL\Data\pubs.mdf'  
   
  Top

4 楼huazf(huazf)回复于 2005-02-21 10:19:10 得分 0

专业从事SQL   SERVER数据库修复  
  Http://www.xunxin.cn  
  Tel:0576-2454863  
  QQ:386999  
  Email:xxkj@china.com.cn  
  Msn:huazf@hotmail.comTop

5 楼csharper2005(初学.NET)回复于 2005-02-21 10:38:13 得分 0

各位大哥,小弟试过用  
  EXEC   sp_detach_db   @dbname   =   '我的数据库名'  
  EXEC   sp_attach_single_file_db   @dbname   =   '我的数据库名',    
        @physname   =   'D:\我的数据库名.mdf'  
  但是提示--〉  
  数据库'我的数据库名''不存在。请用   sp_helpdb   来显示可用的数据库。  
  未能打开新数据库   ''   .CREATE   DATABASE   将终止。  
  设备激活错误。物理文件名   ''D:\我的数据库名.LDF'   可能有误。  
   
  ---------------  
  我是不是要新建一个数据库啊?  
  如果通过企业管理器怎么做?  
  还有,我原来的数据库已经被删掉了,但是我在其他盘只有原来的.MDF文件[没有LDF日志文件]Top

6 楼wuge81(東)回复于 2005-02-21 10:49:50 得分 25

數據庫log文件丟失解決方案  
   
  1   在Enterprise   Manager上新建Newdatabase,   數據庫name   和原數據庫name相同(如p3)。先停掉SQL       Server   service   Manager,   用原p3_Dat.mdf文件覆蓋新建數據庫的p3_Data.mdf文件,再起動SQL           Server   service   Manager。  
  2   此時在Enterprise   Manager的database   目錄中,出現數據庫(suspect)。  
  3   解決數據庫suspect  
   
      (1) sp_configure   'allow   update'   ,   1  
  reconfigure   with   override  
  //执行   sp_configure   以允許對系統表進行更新,然後用   RECONFIGURE   WITH   OVERRIDE   語句強   制實施該配置  
  update   sysdatabases   set   status   =   32768   where   name   =   'p3'  
  //設置數據庫為緊急狀況  
  sp_dboption   'p3'   ,   'single   user'   ,   true  
  dbcc   checkdb(p3)  
   
   
      (2)//恢復通用設置  
  //重新起動MSSQLSERVER服務.  
   
  update   sysdatabases   set   status   =   28   where   name   =   'p3'  
  go  
  sp_dboption   'p3'   ,   'single   user'   ,   false  
  dbcc   checkdb(p3)  
  go  
  sp_configure   'allow   update'   ,   0  
  reconfigure   with   overrideTop

7 楼weixiao51(4fen)回复于 2005-02-21 11:36:54 得分 0

1、新建一个重名的数据库  
  2、停止数据库服务,将mdf文件替换成你的mdf文件  
  3、启动数据库  
  Top

8 楼sheng9hhd(无形)回复于 2005-02-28 08:53:26 得分 50

无数据库日志文件恢复数据库方法两则    
  ---------------------------------------  
  方法一  
   
  1.新建一个同名的数据库  
   
  2.再停掉sql   server(注意不要分离数据库)  
   
  3.用原数据库的数据文件覆盖掉这个新建的数据库  
   
  4.再重启sql   server  
   
  5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)  
   
  6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用  
  数据库的脚本创建一个新的数据库,并将数据导进去就行了.  
   
  USE   MASTER  
  GO  
   
  SP_CONFIGURE   'ALLOW   UPDATES',1   RECONFIGURE   WITH   OVERRIDE  
  GO  
   
  UPDATE   SYSDATABASES   SET   STATUS   =32768   WHERE   NAME='置疑的数据库名'  
  Go  
   
  sp_dboption   '置疑的数据库名',   'single   user',   'true'  
  Go  
   
  DBCC   CHECKDB('置疑的数据库名')    
  Go  
   
  update   sysdatabases   set   status   =28   where   name='置疑的数据库名'  
  Go  
   
  sp_configure   'allow   updates',   0   reconfigure   with   override  
  Go    
   
  sp_dboption   '置疑的数据库名',   'single   user',   'false'  
  GoTop

9 楼sheng9hhd(无形)回复于 2005-02-28 08:53:51 得分 0

方法二  
   
  事情的起因  
  昨天,系统管理员告诉我,我们一个内部应用数据库所在的磁盘空间不足了。我注意到数据库事件日志文件XXX_Data.ldf文件已经增长到了3GB,于是我决意缩小这个日志文件。经过收缩数据库等操作未果后,我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道:“无论如何都要保证数据库日志文件存在,它至关重要”,甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的。我真是不知道我那时候是怎么想的?!  
   
  这下子坏了!这个数据库连不上了,企业管理器在它的旁边写着“(置疑)”。而且最要命的,这个数据库从来没有备份了。我唯一找得到的是迁移半年前的另外一个数据库服务器,应用倒是能用了,但是少了许多记录、表和存储过程。真希望这只是一场噩梦!  
   
  没有效果的恢复步骤  
  附加数据库  
  _Rambo讲过被删除日志文件中不存在活动日志时,可以这么做来恢复:  
   
  1,分离被置疑的数据库,可以使用sp_detach_db  
  2,附加数据库,可以使用sp_attach_single_file_db  
   
  但是,很遗憾,执行之后,SQL   Server质疑数据文件和日志文件不符,所以无法附加数据库数据文件。  
   
  DTS数据导出  
  不行,无法读取XXX数据库,DTS   Wizard报告说“初始化上下文发生错误”。  
   
  紧急模式  
  怡红公子讲过没有日志用于恢复时,可以这么做:  
   
  1,把数据库设置为emergency   mode    
   
  2,重新建立一个log文件  
   
  3,把SQL   Server   重新启动一下  
   
  4,把应用数据库设置成单用户模式  
   
  5,做DBCC   CHECKDB  
   
  6,如果没有什么大问题就可以把数据库状态改回去了,记得别忘了把系统表的修改选项关掉  
   
     
   
  我实践了一下,把应用数据库的数据文件移走,重新建立一个同名的数据库XXX,然后停掉SQL服务,把原来的数据文件再覆盖回来。之后,按照怡红公子的步骤走。  
   
  但是,也很遗憾,除了第2步之外,其他步骤执行非常成功。可惜,重启SQL   Server之后,这个应用数据库仍然是置疑!  
   
  不过,让我欣慰的是,这么做之后,倒是能够Select数据了,让我大出一口气。只不过,组件使用数据库时,报告说:“发生错误:-2147467259,未能在数据库   'XXX'   中运行   BEGIN   TRANSACTION,因为该数据库处于回避恢复模式。”  
   
     
   
  最终成功恢复的全部步骤  
  设置数据库为紧急模式  
  ü                   停掉SQL   Server服务;  
   
  ü                   把应用数据库的数据文件XXX_Data.mdf移走;  
   
  ü                   重新建立一个同名的数据库XXX;  
   
  ü                   停掉SQL服务;  
   
  ü                   把原来的数据文件再覆盖回来;  
   
  ü                   运行以下语句,把该数据库设置为紧急模式;  
   
          运行“Use   Master  
   
  Go  
   
  sp_configure   'allow   updates',   1  
   
  reconfigure   with   override  
   
  Go”  
   
  执行结果:  
   
  DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
   
  已将配置选项   'allow   updates'   从   0   改为   1。请运行   RECONFIGURE   语句以安装。  
   
     
   
  接着运行“update   sysdatabases   set   status   =   32768   where   name   =   'XXX'”  
   
  执行结果:  
   
  (所影响的行数为   1   行)  
   
     
   
  ü                   重启SQL   Server服务;  
   
  ü                   运行以下语句,把应用数据库设置为Single   User模式;  
   
              运行“sp_dboption   'XXX',   'single   user',   'true'”  
   
  执行结果:  
   
              命令已成功完成。  
   
     
   
  ü                   做DBCC   CHECKDB;  
   
              运行“DBCC   CHECKDB('XXX')”  
   
  执行结果:  
   
  'XXX'   的   DBCC   结果。  
   
  'sysobjects'   的   DBCC   结果。  
   
  对象   'sysobjects'   有   273   行,这些行位于   5   页中。  
   
  'sysindexes'   的   DBCC   结果。  
   
  对象   'sysindexes'   有   202   行,这些行位于   7   页中。  
   
  'syscolumns'   的   DBCC   结果。  
   
  ………  
   
     
   
  ü                   运行以下语句把系统表的修改选项关掉;  
   
              运行“sp_resetstatus   "XXX"  
   
  go  
   
  sp_configure   'allow   updates',   0  
   
  reconfigure   with   override  
   
  Go”  
   
  执行结果:  
   
  在   sysdatabases   中更新数据库   'XXX'   的条目之前,模式   =   0,状态   =   28(状态   suspect_bit   =   0),  
   
  没有更新   sysdatabases   中的任何行,因为已正确地重置了模式和状态。没有错误,未进行任何更改。  
   
  DBCC   执行完毕。如果   DBCC   输出了错误信息,请与系统管理员联系。  
   
  已将配置选项   'allow   updates'   从   1   改为   0。请运行   RECONFIGURE   语句以安装。  
   
     
   
  ü                   重新建立另外一个数据库XXX.Lost;  
   
  DTS导出向导  
  ü                   运行DTS导出向导;  
   
  ü                   复制源选择EmergencyMode的数据库XXX,导入到XXX.Lost;  
   
  ü                   选择“在SQL   Server数据库之间复制对象和数据”,试了多次,好像不行,只是复制过来了所有表结构,但是没有数据,也没有视图和存储过程,而且DTS向导最后报告复制失败;  
   
  ü                   所以最后选择“从源数据库复制表和视图”,但是后来发现,这样总是只能复制一部分表记录;  
   
  ü                   于是选择“用一条查询指定要传输的数据”,缺哪个表记录,就导哪个;  
   
  ü                   视图和存储过程是执行SQL语句添加的。  
   
     
   
        这样,XXX.Lost数据库就可以替换原来的应用数据库了。  
     
  ------------------------------  
  數據庫log文件丟失解決方案  
   
  1   在Enterprise   Manager上新建Newdatabase,   數據庫name   和原數據庫name相同(如p3)。先停掉SQL       Server   service   Manager,   用原p3_Dat.mdf文件覆蓋新建數據庫的p3_Data.mdf文件,再起動SQL           Server   service   Manager。  
  2   此時在Enterprise   Manager的database   目錄中,出現數據庫(suspect)。  
  3   解決數據庫suspect  
   
      (1) sp_configure   'allow   update'   ,   1  
  reconfigure   with   override  
  //执行   sp_configure   以允許對系統表進行更新,然後用   RECONFIGURE   WITH   OVERRIDE   語句強   制實施該配置  
  update   sysdatabases   set   status   =   32768   where   name   =   'p3'  
  //設置數據庫為緊急狀況  
  sp_dboption   'p3'   ,   'single   user'   ,   true  
  dbcc   checkdb(p3)  
   
   
      (2)//恢復通用設置  
  //重新起動MSSQLSERVER服務.  
   
  update   sysdatabases   set   status   =   28   where   name   =   'p3'  
  go  
  sp_dboption   'p3'   ,   'single   user'   ,   false  
  dbcc   checkdb(p3)  
  go  
  sp_configure   'allow   update'   ,   0  
  reconfigure   with   override  
  Top

相关问题

  • 有*.mdf文件,如何恢复到数据库中
  • 如何用.mdf文件恢复数据库
  • 系统重装,如何从mdf,ldf文件恢复数据库?
  • 可以用Data下面的.mdf文件恢复数据库吗
  • 用mdf文件怎样恢复sqlserver2000数据库
  • 我的数据库的.mdf文件还在,日志文件.ldf不见了,可恢复数据库吗?
  • 只有LDF文件,没有了MDF文件,还能恢复数据库么?
  • SQL数据库坏了,没有备份,现在只有MDF和LDF文件,是否能恢复数据库
  • 数据库的MDF文件损坏,而LDF正常,该怎么恢复数据库啊?
  • 如何恢复sql_server数据库,我只有MDF和ldf文件

关键词

  • 数据库
  • 文件
  • 数据
  • 执行
  • 语句
  • 服务器
  • p3
  • 數據庫
  • mdf
  • 日志

得分解答快速导航

  • 帖主:csharper2005
  • wzjcntlqs
  • vinsonshen
  • vinsonshen
  • wuge81
  • sheng9hhd

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo