还原数据库时数据库被占用导致的还原失败解决方案

来源:互联网 发布:广告软件 编辑:程序博客网 时间:2024/05/17 03:49
还原数据库时,碰到下面错误的解决方案:

System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (Microsoft.SqlServer.Smo)

1. 比较直接的重启下Sql Server服务即可,此方案适合在普通个人电脑,或者电脑上只有这一个重要数据库的情况使用;

2.如果该数据库是服务器,上面有很多重要的数据库,不可能因为一个数据库把所有数据库的连接都断掉,可采用下面方案

在master数据库创建下面存储过程,作用:清除所有使用该数据库的会话;

USE masterGOCREATE PROC [dbo].[sp_ClearDbConnections]          @DbName    VARCHAR(30)      AS--清除某个数据库的所有数据库连接      DECLARE @SPID    INT      DECLARE @SqlForClear    NVARCHAR(100)            DECLARE curID CURSOR FORWARD_ONLY READ_ONLY FOR (          SELECT SPID          FROM Master.dbo.SysProcesses          WHERE DB_Name(DBID) = @DbName)      OPEN curID      FETCH NEXT FROM curID INTO @SPID      WHILE @@Fetch_Status = 0      BEGIN          SET @SqlForClear = N'KILL ' + Cast(@SPID AS NVARCHAR(10))          EXEC sp_ExecuteSql @SqlForClear          IF @@Error = 0              PRINT '已清除连接:' + Cast(@SPID AS VARCHAR(10))          FETCH NEXT FROM curID INTO @SPID      END      CLOSE curID      DEALLOCATE curID      PRINT '对数据库“' + @DbName + '”的连接清除操作完毕'GO

之后执行该存储过程,清除使用该数据库的所有连接,再次还原(操作间隙时间要尽量短,避免在这个间隙又有连接进来);

exec sp_ClearDbConnections '要还原的数据库名称'



1 0
原创粉丝点击