现在的位置: 首页 > 综合 > 正文

Sql 还原失败 之 “因为数据库正在使用,所以未能获得对数据库的排它访问权”的处理

2013年10月17日 ⁄ 综合 ⁄ 共 2808字 ⁄ 字号 评论关闭

     之前没有太在意,这两天在程序中添加备份还原模块,发现备份没为题,还原时出现“因为数据库正在使用,所以未能获得对数据库的排它访问权”,放狗搜了一下,看到遇到类似情况地同志还不少,看了帖子中给出解决的办法是:

      1、使用两个TAdoConnection,还原时将要还原数据库的Adoconnection1断开链接,将Adoconnection2链接到Master数据库,但经我多次试验,似乎也不能成功;2、使用存储过程,这个应该能实现,大段的代码我没仔细看,稍显啰嗦。

 

    最后说说我的处理办法,单用一个AdoConnection,没用存储过程,直接上代码吧,一目了然:

 

核心部分就是这几句:

        AdoBkRs.SQL.Add('use master');
        AdoBkRs.SQL.Add('ALTER DATABASE MeterInfo SET OFFLINE WITH ROLLBACK IMMEDIATE');
        AdoBkRs.SQL.Add('Restore Database MeterInfo From Disk= '''+sFdir+''' with REPLACE ');
        AdoBkRs.SQL.Add('ALTER DATABASE MeterInfo SET ONLINE WITH ROLLBACK IMMEDIATE');

 

另外,使用如今方式亦可(未试验):

用single userEXEC sp_dboption 'dababasename','single user', 'TRUE'
RESTORE DATABASE databasename  FROM DISK = 备份文件名  with REPLACE
EXEC sp_dboption 'dababasename','single user', 'false

 

抱歉!评论已关闭.