在作数据库恢复时出现下列情况,请帮忙
程序如下:
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('restore database lm from disk='''+‘e:\aa.mdf’+'''');
adoquery1.ExecSQL;
运行后出现提示:‘因为数据库正在使用,所以未能获得对数据库的排它访问权’
请问是何原因?如何处理?
注释如下:e盘下绝对有aa.mdf数据库文件
          数据库是sql sever 2000;
在SQL的查询分析器中:
use master
restore database lm
 from disk = 'e:\lvzhi\aa.mdf 'with replace还是出现:‘因为数据库正在使用,所以未能获得对数据库的排它访问权’

解决方案 »

  1.   

    你是不是开着sql server 的企业管理器,并且打开了这个数据库呀?
      

  2.   

    1 不要将程序连接到你要恢复的数据库上,你可以用use master
    2 你可以用sp_who或者
    select dbname = case
    when dbid = 0 then null
    when dbid <> 0 then db_name(dbid)
    end, loginame from master..sysprocesses where hostname is not null
    group by  dbid,loginame
    等列出现在正在使用的进程/用户
    3 调用kill proccess干掉他们
    4 然后再进行恢复
      

  3.   

    帅哥 firetoucher(风焱)
    你能否写的详细一些啊!我还很菜哎!
    毕业课程设计,急啊!!
      

  4.   

    另外我在SQL的查询分析器中连的就是master 库
    它也出现:‘因为数据库正在使用,所以未能获得对数据库的排它访问权’
    那是为什么啊?
      

  5.   

    我在SQL的查询分析器中连master后执行
    select dbname = case
    when dbid = 0 then null
    when dbid <> 0 then db_name(dbid)
    end, loginame from master..sysprocesses where hostname is not null
    group by  dbid,loginame
    找到三个数据库名
    你的1,2不是在delphi中写代码吗?
      

  6.   

    1 你在where条件中加dbid = DB_ID('你要恢复的数据库名')
    2 你可以在query.sql.add上面的语句然后执行,注意引号的使用
    with tquery1 do
    begin
    close;
    sql.clear;
    sql.add('sql语句');
    open;
    end;
      

  7.   

    首先是不是要让adoquery1连到master库上
    之后
    1 adoquery1.sql.add('restore database lm from disk='''+‘e:\aa.mdf’+''''where dbid = DB_ID('要恢复的数据库名'));
    2 sql.add('sql语句');
      

  8.   

    Alter Database MyDB set offline WITH ROLLBACK IMMEDIATE;//停止别的连接
    use [master];//连接别的数据库
    Restore DataBase MyDB From Disk='c:\data'//data为备份的数据库文件
    adoquery分别执行这3条sql语句。