CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

恢复数据库失败,错误信息如正文,各位大哥给点意见

楼主stone_lin(师大林)2003-12-01 14:48:51 在 MS-SQL Server / 应用实例 提问

Server:   Msg   3270,   Level   16,   State   1,   Line   2  
  An   internal   consistency   error   occurred.   Contact   Technical   Support   for   assistance.  
  Server:   Msg   3013,   Level   16,   State   1,   Line   2  
  RESTORE   DATABASE   is   terminating   abnormally. 问题点数:100、回复次数:8Top

1 楼lvltt(未完成)回复于 2003-12-01 14:55:50 得分 10

一个内在的一致性错误。  
  http://expert.csdn.net/Expert/topic/2359/2359124.xml?temp=.4968531  
  数据库备份/恢复方案       邹建Top

2 楼zjcxc(邹建)回复于 2003-12-01 15:03:07 得分 80

试试用下面的存储过程恢复  
   
   
  /*--恢复数据库  
   
  --邹建   2003.10--*/  
   
  /*--调用示例  
  --完整恢复数据库  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_db.bak',@dbname='db'  
   
  --差异备份恢复  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'  
  exec   p_backupdb   @bkfile='c:\db_20031015_df.bak',@dbname='db',@retype='DF'  
   
  --日志备份恢复  
  exec   p_RestoreDb   @bkfile='c:\db_20031015_db.bak',@dbname='db',@retype='DBNOR'  
  exec   p_backupdb   @bkfile='c:\db_20031015_log.bak',@dbname='db',@retype='LOG'  
   
  --*/  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_RestoreDb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_RestoreDb]  
  GO  
   
  create   proc   p_RestoreDb  
  @bkfile   nvarchar(1000), --定义要恢复的备份文件名  
  @dbname   sysname='',         --定义恢复后的数据库名,默认为备份的文件名  
  @dbpath   nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录  
  @retype   nvarchar(10)='DB', --恢复类型:'DB'完事恢复数据库,'DBNOR'   为差异恢复,日志恢复进行完整恢复,'DF'   差异备份的恢复,'LOG'   日志恢复  
  @filenumber   int=1, --恢复的文件号  
  @overexist   bit=1,             --是否覆盖已经存在的数据库,仅@retype为'DB'/'DBNOR'是有效  
  @killuser   bit=1       --是否关闭用户使用进程,仅@overexist=1时有效  
  as  
  declare   @sql   varchar(8000)  
   
  --得到恢复后的数据库名  
  if   isnull(@dbname,'')=''  
  select   @sql=reverse(@bkfile)  
  ,@sql=case   when   charindex('.',@sql)=0   then   @sql  
  else   substring(@sql,charindex('.',@sql)+1,1000)   end  
  ,@sql=case   when   charindex('\',@sql)=0   then   @sql  
  else   left(@sql,charindex('\',@sql)-1)   end  
  ,@dbname=reverse(@sql)  
   
  --得到恢复后的数据库存放目录  
  if   isnull(@dbpath,'')=''  
  begin  
  select   @dbpath=rtrim(reverse(filename))   from   master..sysfiles   where   name='master'  
  select   @dbpath=reverse(substring(@dbpath,charindex('\',@dbpath),4000))  
  end  
   
  --生成数据库恢复语句  
  set   @sql='restore   '+case   @retype   when   'LOG'   then   'log   '   else   'database   '   end+@dbname  
  +'   from   disk='''+@bkfile+''''  
  +'   with   file='+cast(@filenumber   as   varchar)  
  +case   when   @overexist=1   and   @retype   in('DB','DBNOR')   then   ',replace'   else   ''   end  
  +case   @retype   when   'DBNOR'   then   ',NORECOVERY'   else   ',RECOVERY'   end  
  print   @sql  
  --添加移动逻辑文件的处理  
  if   @retype='DB'   or   @retype='DBNOR'  
  begin  
  --从备份文件中获取逻辑文件名  
  declare   @lfn   nvarchar(128),@tp   char(1),@i   int  
   
  --创建临时表,保存获取的信息  
  create   table   #tb(ln   nvarchar(128),pn   nvarchar(260),tp   char(1),fgn   nvarchar(128),sz   numeric(20,0),Msz   numeric(20,0))  
  --从备份文件中获取信息  
  insert   into   #tb   exec('restore   filelistonly   from   disk='''+@bkfile+'''')  
  declare   #f   cursor   for   select   ln,tp   from   #tb  
  open   #f  
  fetch   next   from   #f   into   @lfn,@tp  
  set   @i=0  
  while   @@fetch_status=0  
  begin  
  select   @sql=@sql+',move   '''+@lfn+'''   to   '''+@dbpath+@dbname+cast(@i   as   varchar)  
  +case   @tp   when   'D'   then   '.mdf'''   else   '.ldf'''   end  
  ,@i=@i+1  
  fetch   next   from   #f   into   @lfn,@tp  
  end  
  close   #f  
  deallocate   #f  
  end  
   
  --关闭用户进程处理  
  if   @overexist=1   and   @killuser=1  
  begin  
  declare   @spid   varchar(20)  
  declare   #spid   cursor   for  
  select   spid=cast(spid   as   varchar(20))   from   master..sysprocesses   where   dbid=db_id(@dbname)  
  open   #spid  
  fetch   next   from   #spid   into   @spid  
  while   @@fetch_status=0  
  begin      
  exec('kill   '+@spid)  
  fetch   next   from   #spid   into   @spid  
  end      
  close   #spid  
  deallocate   #spid  
  end  
   
  --恢复数据库  
  exec(@sql)  
   
  goTop

3 楼CrazyFor(冬眠的鼹鼠)回复于 2003-12-01 15:03:52 得分 10

TRY:  
  到企业管理器->到"数据库"这个字上右键,不要选中某个库->所有任务->恢复数据库->  
   
  1,输入新的数据库名,并打开你的备份文件.  
  2,在选项中,选中在现有数据库上强制恢复,并在下面输入新的还原目录.Top

4 楼stone_lin(师大林)回复于 2003-12-01 15:25:32 得分 0

TO:zjcxc(邹建)    
  出现如下错误:  
   
  restore   database   Peanut1130   from   disk='E:\Microsoft   SQL   Server\MSSQL\BACKUP\Peanut_db_200311300312.BAK'   with   file=1,replace,RECOVERY  
   
  (9   row(s)   affected)  
   
  Server:   Msg   3270,   Level   16,   State   1,   Line   1  
  An   internal   consistency   error   occurred.   Contact   Technical   Support   for   assistance.  
  Server:   Msg   3013,   Level   16,   State   1,   Line   1  
  RESTORE   DATABASE   is   terminating   abnormally.  
   
   
  TO:CrazyFor(冬眠的鼹鼠)    
  尝试多次,还是一样的错误  
  Top

5 楼zjcxc(邹建)回复于 2003-12-01 21:01:31 得分 0

看来应该是你的备份文件出了问题Top

6 楼zjcxc(邹建)回复于 2003-12-01 21:02:28 得分 0

查询分析器执行:  
  restore   filelistonly   from   disk='E:\Microsoft   SQL   Server\MSSQL\BACKUP\Peanut_db_200311300312.BAK'    
   
  及  
  restore   mediaonly   from   disk='E:\Microsoft   SQL   Server\MSSQL\BACKUP\Peanut_db_200311300312.BAK'    
   
   
  的结果分别是什么?Top

7 楼stone_lin(师大林)回复于 2003-12-02 11:04:35 得分 0

TO:zjcxc(邹建)  
  Peanut_Data D:\BDDATA\MSSQL\Data\Peanut\Peanut_Data.MDF D PRIMARY 126484480 35184372080640  
  Forums D:\BDDATA\MSSQL\Data\Peanut\Forums_Data.NDF D Forums 2097152 35184372080640  
  WebVisit D:\BDDATA\MSSQL\Data\Peanut\WebVisit_Data.NDF D WebVisit 16121856 35184372080640  
  DomainUser D:\BDDATA\MSSQL\Data\Peanut\DomainUser_Data.NDF D DomainUser 446824448 35184372080640  
  Mail D:\BDDATA\MSSQL\Data\Peanut\Mail_Data.NDF D Mail 288423936 35184372080640  
  IdxForums D:\BDDATA\MSSQL\Data\Peanut\IdxForums_Data.NDF D IdxForums 2097152 35184372080640  
  IdxDomainUser D:\BDDATA\MSSQL\Data\Peanut\IdxDomainUser_Data.NDF D IdxDomainUser 197853184 35184372080640  
  PeanutStatic D:\BDDATA\MSSQL\Data\Peanut\PeanutStatic_Data.NDF D PeanutStatic 1048576 35184372080640  
  Peanut_log D:\BDDATA\MSSQL\Data\Peanut\Peanut_log.LDF L NULL 211419136 35184372080640  
   
  RESTORE   LABELONLY的结果是:  
  NULL NULL 1 1 {52A1D9AF-0000-0000-0000-000000000000} 1 0 NULL Microsoft   SQL   Server 4608 2003-11-30   03:12:00.000  
   
   
  谢谢你热情的帮助  
  同时我在原数据中执行数据库维护计划中一致性检查出现错误,错误号22029,执行失败,没有其他信息  
  Top

8 楼zjcxc(邹建)回复于 2003-12-02 11:42:18 得分 0

估计真的是备份文件有问题了.没办法Top

相关问题

  • 大哥赐教:FindWindow失败时返回的错误代码是?用GetLastError得到的是什么?
  • ora_12638错误,凭证检索失败!!!
  • 排序错误,各位大哥帮忙
  • 错误请教你们~~大哥
  • 输入法错误,大哥救命啊?
  • '凭证检索失败'是什么错误呀
  • weblogic启动失败,“specified command search directory bad”错误
  • Windows - 延缓写入失败是种什么错误?
  • 高手:mshflexgrid执行时错误:datasource失败 -2147467259(80004005)
  • 分区大师 初始化失败:错误117?

关键词

  • 数据库
  • db
  • 恢复
  • restoredb
  • bkfile
  • retype
  • 备份
  • dbname
  • exec p
  • bak

得分解答快速导航

  • 帖主:stone_lin
  • lvltt
  • zjcxc
  • CrazyFor

相关链接

  • SQL Server类图书

广告也精彩

反馈

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