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

若是此時還原仍是不行。多是刪完進程立刻有新的進程連進來,致使一直失敗。應用程序一直不停的進行數據庫連接。這時,能夠在單用戶下還原。

相關文章
相關標籤/搜索