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

将另外一台服务器的数据库在本地还原失败

楼主rkl520(Brook Li)2004-09-02 22:56:46 在 MS-SQL Server / 应用实例 提问

我在将其他服务器上数据库dms做了备份后,拿到本地进行数据库dmsbak的还原,出现错误   :  
  数据库'dmsbak'的媒体集有2个家族成员,但只提供了1个。必须提供所有的成员。RESTORE   DATABASE操作异常终止。  
  请问各位大侠,如何解决!!!  
  问题点数:20、回复次数:9Top

1 楼zonelive(peter)回复于 2004-09-03 00:29:57 得分 0

备份的时候,你指定了两个备份文件,这时,数据是分别写入了这两个备份文件  
  所以恢复的时候,也必须指定这两个备份文件才行.  
  试试:  
  企业管理器  
  --右键一个数据库  
  --所有任务  
  --备份数据库  
  --目的--备份到中选择添加  
  --输入一个备份的文件名  
  --确定  
  Top

2 楼rkl520(Brook Li)回复于 2004-09-03 10:38:15 得分 0

也做了备份,怎么才能把这已备份的数据恢复?Top

3 楼ice3233()回复于 2004-09-04 16:28:53 得分 2

帮忙顶一下Top

4 楼rkl520(Brook Li)回复于 2004-09-04 17:09:21 得分 0

csdn就没人能解决??Top

5 楼javaflyers(我的问题总是这么经典)回复于 2004-09-05 15:55:50 得分 0

备份是一种虚拟设备,也是文件。你把它COPY到要恢复的数据库的机器上。  
   
  另外,你做的工作实际上不是恢复数据,应该是数据的导入导出。Top

6 楼hdhai9451(☆新人类☆)回复于 2004-09-05 16:37:15 得分 0

//也做了备份,怎么才能把这已备份的数据恢复?  
   
   
  企业管理器  
  --右键一个数据库  
  --所有任务  
  --数据库恢復  
  --選擇你想要恢復的數據庫  
  --确定Top

7 楼rkl520(Brook Li)回复于 2004-09-07 18:58:06 得分 0

这样怎么结贴啊!Top

8 楼ouyld(ゎたしすきぁぉた)回复于 2004-09-07 19:08:06 得分 0

数据库恢复Top

9 楼apple800(老五)回复于 2004-09-09 13:13:07 得分 18

数据库备份和恢复:  
  /********************************************************  
                      数据的备份  
  *********************************************************/  
  CREATE                                 Procedure     BackUp_DataBase      
  @dbname   varchar(20), --要备份的数据名  
                                                                                          --备份名  
    @BACKpath   varchar(800)  
  As  
   
  backup   Database   @Dbname   to   disk=@BACKpath   with   format  
                                    IF   @@ERROR   =   0  
                                              select   @backpath    
                                  ElSE  
                                            select       @@ERROR  
   
   
  GO  
   
   
  /********************************************************  
                      数据的恢复  
  *********************************************************/  
  --------===========恢复数据库,好用啊  
   
  CREATE   proc     Recover_DataBase  
  @bkfile   nvarchar(1000), --定义要恢复的备份文件名  
  @dbname   sysname='',         --定义恢复后的数据库名,默认为备份的文件名  
  @dbpath   nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录  
  @dbLogPath   nvarchar(1000)='',   --日志文件路径  
  @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  
   
  --添加移动逻辑文件的处理  
  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   '''+case   when   @i=0   Then   @dbpath   else   @dbLogPath   end+@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)  
   
   
  GO  
   
  Top

相关问题

  • 高分请教Sqlserver服务器数据库的备份和还原问题?
  • 把数据库备份到了远程服务器上,怎样把它在远程服务器上还原?
  • C# WINFORM 在客户端用服务器上的备份还原服务器上的数据库
  • 如何将本地的数据库备份文件还原到服务器上去。
  • 还原数据库
  • 还原数据库
  • 水晶报表中动态更改数据库服务器,出现打开行集失败的问题?
  • 数据库安装到最后一步在配置和启动服务器时失败,请高手帮忙
  • 别人的数据库,在服务器启动时报“任务初始化失败;在数据库中加载代理<Note ID 814>...."
  • 如何连接数据库服务器

关键词

  • 数据库
  • 数据
  • 文件名
  • 文件
  • database
  • 备份
  • 恢复
  • backpath
  • 指定
  • dbname

得分解答快速导航

  • 帖主:rkl520
  • ice3233
  • apple800

相关链接

  • SQL Server类图书

广告也精彩

反馈

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