SQLserver还原失败(数据库正在使用,没法得到对数据库的独占访问权)

问题描述:

Sql server还原失败(数据库正在使用,没法得到对数据库的独占访问权)sql

数据库还原的时候还有其余进程连在上面,致使没法得到独占形成的。数据库

这个问题的缘由在于有用户链接了当前要作还原的数据库,这里的用户甚至包括当前要作还原的用户。fetch

解决办法:

方法一:

删完进程立刻有新的进程连进来,致使一直失败。
单用户模式
单用户模式设置:
右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问(MULTI_USER 默认) -> 选择Single-> 肯定。而后还原。spa

或 GUI的模式,语句的办法比较简单code

USE MASTER
GO
ALTER DATABASE 库名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;  --单用户模式
GO
ALTER DATABASE 库名 SET MULTI_USER WITH ROLLBACK IMMEDIATE; --多用户模式
GO

设置单用户数据库必需要超级用户server

 

方法二:

利用SQL语句,杀死正在使用该数据库的全部进程,sql代码以下:blog

杀掉正在运行的进程:进程

--杀死正在使用该数据库的全部进程
declare @dbname varchar(50)
set @dbname='数据库名'
declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses where db_name(dbid)=@dbname
open cs_result
fetch next from cs_result into @sql
while @@fetch_status=0
begin
    execute(@sql)
    fetch next from cs_result into @sql
end
close cs_result
deallocate cs_result

该SQL语句利用游标循环全部正在使用该数据库的进程,并经过kill命令杀死进程。ast

 

方法三:class

将当前须要还原的数据进行OFFLINE,还原后,再将该数据库ONLINE。
脚本以下,先运行第一脚本,还原成功后,运行第二脚本。

1ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE
2ALTER DATABASE [datebase] SET ONLINE WITH ROLLBACK IMMEDIATE

若是此时还原仍是不行。多是删完进程立刻有新的进程连进来,致使一直失败。应用程序一直不停的进行数据库连接。这时,能够在单用户下还原。

相关文章
相关标签/搜索