做个数据库还原的功能
提示错误:因为数据库正在使用,所以未能获得对数据库的排它访问权。
怎么解决这个问题?因为客户端一定要要连接在服务器上才能操作的.

解决方案 »

  1.   

    在现有数据库还原功能基础上加1 查找连接当目标数据库的连接并kill
    2 还原数据库
    --处理顺序按下面的方式进行,其中text为你要还原的数据库名;restore ...为你的还原语句declare @s varchar(1000)
    select @s=isnull(@s,'')+' Kill ' +rtrim(spID) + ';' + from master..sysprocesses where dbid=db_id('test')
    exec(@s)restore ...
      

  2.   

    use 数据库
    go 
    --kill 是先执行 这个吗?这样对数据库会有什么影响吗?因为是服务器开发,不敢先对服务器操作还有个问题我对服务器做备份到本机,但是我在本机设置了个共享文件夹,服务器还是访问不了本机的?需要设置什么东西多?感谢指导.
      

  3.   

     backup database gxwit to disk='\\192.168.1.7\qnj\11111.bak' 
    \\192.168.1.7\qnj\   这个这样可以访问,但上面的还原语句执行不了提示错误:无法打开备份文件\\192.168.1.7\qnj\11111.bak' 
      

  4.   

    use master go -kill第 1 行: 'go' 附近有语法错误。是一个-还是两个-
      

  5.   

    '\\192.168.1.7\qnj\11111.bak' 这样的路径是服务器无法接受的
      

  6.   

    那是如何?我设置映射网络驱动器了也是不行啊各位能详细说点么,弄了一天了还是没头绪

    问题1.做个数据库还原的功能 
    提示错误:因为数据库正在使用,所以未能获得对数据库的排它访问权。 
    怎么解决这个问题? KILL的具体用法 我用SQL语句KILL 53 还是提示无这进程问题2.对服务器做备份到本机,但是我在本机设置了个共享文件夹,服务器还是访问不了本机的?
    需要设置什么多?大家帮帮忙
      

  7.   

    你做了映射磁盘不是有个驱动器名么,用驱动器号,如果你的映射磁盘名为z
    backup database gxwit to disk='z:\11111.bak' 
    数据源连接master,查询出spID后逐项kill
    在delphi中这么做:
    //数据源连接master,不多说
      
    var
      sStr : string;
    begin
      sStr := 'declare @s varchar(1000)' + 
              ' select @s=isnull(@s,'''') + '' Kill '' +rtrim(spID) + '';'' + from master..sysprocesses where dbid=db_id  (''test'')' + 
              'exec(@s);';
      sStr := sStr + 'exec(''backup database gxwit to disk=''''''''z:\11111.bak'''''''')';  //这儿的'记不清是几个了,可以试下
      with adoquery1 do
      begin
        close;
        sql.text := sStr;
        execSql;
      end;
    end;
      

  8.   

    9楼的 simonhehe 
    我按照你的做了
    但是弹出错误: from 附近有语法错误
      

  9.   


    alter database Demo set offline with rollback immediate
    restore database Demo from disk='E:\1.bak'  //还原语句
    alter database Demo set online with rollback immediate给大家分享下终于找到这个办法解决了,可以安心睡觉了.分给simonhehe 大虾不过还是希望simonhehe 能指点下 9 楼 的方法与怎么修改那错误
      

  10.   


    use master  --这样避免正在使用要还原的库
    godeclare cur cursor for
      select spid from sysprocesses where dbid=db_id('Demo')
    open cur
    declare @spid intdeclare @str varchar(100)fetch next from cur into @spid
    while @@fetch_status=0
    begin
       set @str=ltrim(@spid)
       exec ('kill '+@str)
       fetch next from cur into @spid
    end
    close cur
    deallocate curgorestore database Demo from  disk='d:\111.bak' with replace