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

SOS!!!!!!如何用SQL 语名恢复正在使用的数据库

楼主hyzxp(Tom)2004-12-03 00:54:25 在 VB / VB资源 提问

执行Restore     database     fff     from     disk='c:\ff.dat',总是提示"数据库在使用,所无法获得对数据库的排它使用权"。 问题点数:100、回复次数:5Top

1 楼mingday(小山)回复于 2004-12-03 08:34:15 得分 10

upTop

2 楼hdhai9451(☆新人类☆)回复于 2004-12-03 08:39:03 得分 10

你在當前打開的數據庫下運行是不行的。應該這樣  
   
  use   master  
  go  
   
  Restore     database     fff     from     disk='c:\ff.dat'  
  go  
   
  Top

3 楼hyzxp(Tom)回复于 2004-12-05 01:21:23 得分 0

用VB的调用Restore   database,我写的程式如下,  
   
      adcnn.colse       '   adcnn之前是打开了fff资料库,在执行restore前关闭它.  
        .  
        .  
      admaster.open       '用admaster   连线打开     SQL   中的master   资料表  
        .  
        .  
      admaster.exec   "Restore     database     fff     from     disk='c:\ff.dat'"   ‘   执行这个语句就出错,  
  提示"数据库在使用,所无法获得对数据库的排它使用权"  
   
  各位大侠:  
         
          有没有解决的好方法!!!!!!!!!!!  
   
  谢了  
   
   
       
   
   
  Top

4 楼creazyfish(梳分头的鱼)回复于 2004-12-05 23:09:46 得分 80

'*************************************************************************  
  '**模   块   名:frestoredatabase_a  
  '**描         述:恢复数据库,返回出错信息,正常恢复,返回""  
  '**调         用:frestoredatabase_a   "备份文件名","数据库名"  
  '**参数说明:  
  '**                     sDataBasePath     恢复后的数据库存放目录  
  '**                     sBackupNumber     是从那个备份号恢复  
  '**                     sReplaceExist     指定是否覆盖已经存在的数据  
  '**说         明:引用Microsoft   ActiveX   Data   Objects   2.x   Library  
  '*************************************************************************  
  Public   Function   fRestoreDatabase_a(ByVal   sBackUpfileName$   _  
                                                                  ,   ByVal   sDataBaseName$   _  
                                                                  ,   Optional   ByVal   sDataBasePath$   =   ""   _  
                                                                  ,   Optional   ByVal   sBackupNumber&   =   1   _  
                                                                  ,   Optional   ByVal   sReplaceExist   As   Boolean   =   False   _  
                                                                  )   As   String  
           
          Dim   iDb   As   ADODB.Connection,   iRe   As   ADODB.Recordset  
          Dim   iConcStr$,   iSql$,   iReturn$,   iI&  
           
          On   Error   GoTo   lbErr  
           
          '创建对象  
          Set   iDb   =   New   ADODB.Connection  
          Set   iRe   =   New   ADODB.Recordset  
           
          '连接数据库服务器,根据你的情况修改连接字符串  
          iConcStr   =   "Provider=SQLOLEDB.1;Integrated   Security=SSPI;Persist   Security   Info=False;Data   Source=zj"  
          iDb.Open   iConcStr  
           
          '得到还原后的数据库存放目录,如果没有指定,存放到SQL   SERVER的DATA目录  
          If   sDataBasePath   =   ""   Then  
                  iSql   =   "select   filename   from   master..sysfiles"  
                  iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
                  iSql   =   iRe(0)  
                  iRe.Close  
                  sDataBasePath   =   Left(iSql,   InStrRev(iSql,   "\"))  
          End   If  
           
          '检查数据库是否存在  
          If   sReplaceExist   =   False   Then  
                  iSql   =   "select   1   from   master..sysdatabases     where   name='"   &   sDataBaseName   &   "'"  
                  iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
                  If   iRe.EOF   =   False   Then  
                          iReturn   =   "数据库已经存在!"  
                          iRe.Close  
                          GoTo   lbExit  
                  End   If  
                  iRe.Close  
          End   If  
           
          '关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败  
          iSql   =   "select   spid   from   master..sysprocesses   where   dbid=db_id('"   &   sDataBaseName   &   "')"  
          iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
          While   iRe.EOF   =   False  
                  iSql   =   "kill   "   &   iRe(0)  
                  iDb.Execute   iSql  
                  iRe.MoveNext  
          Wend  
          iRe.Close  
           
          '获取数据库恢复信息  
          iSql   =   "restore   filelistonly   from   disk='"   &   sBackUpfileName   &   "'"   &   vbCrLf   &   _  
                  "with   file="   &   sBackupNumber  
          iRe.Open   iSql,   iDb,   adOpenKeyset,   adLockReadOnly  
           
          '生成数据库恢复语句  
          iSql   =   "restore   database   ["   &   sDataBaseName   &   "]"   &   vbCrLf   &   _  
                  "from   disk='"   &   sBackUpfileName   &   "'"   &   vbCrLf   &   _  
                  "with   file="   &   sBackupNumber   &   vbCrLf  
          With   iRe  
                  While   Not   .EOF  
                          iReturn   =   iRe("PhysicalName")  
                          iI   =   InStrRev(iReturn,   ".")  
                          iReturn   =   IIf(iI   =   0,   "",   Mid(iReturn,   iI))   &   "'"  
                          iSql   =   iSql   &   ",move   '"   &   iRe("LogicalName")   &   _  
                                          "'   to   '"   &   sDataBasePath   &   sDataBaseName   &   iReturn   &   vbCrLf  
                          .MoveNext  
                  Wend  
                  .Close  
          End   With  
          iSql   =   iSql   &   IIf(sReplaceExist,   ",replace",   "")  
           
          iDb.Execute   iSql  
          iReturn   =   ""  
          GoTo   lbExit  
           
  lbErr:  
          iReturn   =   Error  
  lbExit:  
          fRestoreDatabase_a   =   iReturn  
  End   Function  
   
  Top

5 楼True1024()回复于 2004-12-09 12:23:09 得分 0

 
  sql   =   "select   spid   from   master..sysprocesses   where   dbid=db_id('要还原的数据库名称')"  
          rs.Open   sql,   con,   1,   1  
          While   rs.EOF   =   False  
                  sql   =   "kill   "   &   rs(0)  
                  con.Execute   sql  
                  rs.MoveNext  
          Wend  
          rs.CloseTop

相关问题

  • sql 数据库恢复
  • 如何用SQL语句恢复SQL Server数据库
  • 谁用过SQL语句RESTORE DATABASE 来恢复数据库?
  • 怎样用SQL语句恢复SQLSERVER数据库备份,并覆盖现有(正在使用)数据库?
  • 用SQL语句恢复数据库为什么总提示数据库在使用?
  • 为了备份和恢复数据库,如何用 sql 语句清除当前数据库的访问?
  • 恢复sql server数据库此sql语句返回错误!请指教!
  • sql 6.5系统数据库的恢复
  • SQL SERVER7恢复数据库错误!
  • 怎样恢复sql server7数据库?

关键词

  • 数据库
  • 执行
  • database
  • admaster
  • 恢复
  • restore
  • 使用
  • dat
  • ff
  • fff from disk

得分解答快速导航

  • 帖主:hyzxp
  • mingday
  • hdhai9451
  • creazyfish

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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