SQLserver还原失败:数据库正在使用问题

问题描述:

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

数据库还原的时候还有其他进程连在上面,导致无法获得独占造成的。

这个问题的原因在于有用户连接了当前要做还原的数据库,这里的用户甚至包括当前要做还原的用户。

解决办法:

方法一:

删完进程马上有新的进程连进来,导致一直失败。

单用户模式

单用户模式设置:

右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问(MULTI_USER 默认) -> 选择Single-> 确定。然后还原。

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

USE MASTER

GO

ALTER DATABASE 数据库名字 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

GO

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

方法二:

利用SQL语句,杀死正在使用该数据库的所有进程,sql代码如下:

杀掉正在运行的进程:

--杀死正在使用该数据库的所有进程

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命令杀死进程。

方法三:

将当前需要还原的数据进行OFFLINE,还原后,再将该数据库ONLINE。

脚本如下,先运行第一脚本,还原成功后,运行第二脚本。

1)ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE

2)ALTER DATABASE [datebase] SET ONLINE WITH ROLLBACK IMMEDIATE

如果此时还原还是不行。可能是删完进程马上有新的进程连进来,

导致一直失败。应用程序一直不停的进行数据库链接。

这时,可以在单用户下还原。

以上是 SQLserver还原失败:数据库正在使用问题 的全部内容, 来源链接: www.h5w3.com/116292.html

回到顶部