SQLserver還原失敗(數據庫正在使用,無法獲得對數據庫的獨占訪問權)


問題描述:

Sql server還原失敗(數據庫正在使用,無法獲得對數據庫的獨占訪問權)

數據庫還原的時候還有其他進程連在上面,導致無法獲得獨占造成的。

這個問題的原因在於有用戶連接了當前要做還原的數據庫,這里的用戶甚至包括當前要做還原的用戶。

解決辦法:

方法一:

刪完進程馬上有新的進程連進來,導致一直失敗。
單用戶模式
單用戶模式設置:
右鍵點擊數據庫 -> 屬性 -> 選項 -> 狀態 -> 限制訪問(MULTI_USER 默認) -> 選擇Single-> 確定。然后還原。

或 GUI的模式,語句的辦法比較簡單

USE MASTER
GO
ALTER DATABASE 庫名 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;  --單用戶模式
GO
ALTER DATABASE 庫名 SET MULTI_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。
腳本如下,先運行第一腳本,還原成功后,運行第二腳本。

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

如果此時還原還是不行。可能是刪完進程馬上有新的進程連進來,
導致一直失敗。應用程序一直不停的進行數據庫鏈接。
這時,可以在單用戶下還原。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM