sql server 還原數(shù)據(jù)庫時(shí)提示數(shù)據(jù)庫正在使用,無法進(jìn)行操作的解決方法
這個(gè)問題的原因在于有用戶連接了當(dāng)前要做還原的數(shù)據(jù)庫,這里的用戶甚至包括當(dāng)前要做還原的用戶。解決辦法就是關(guān)閉與要還原數(shù)據(jù)庫的所有連接。
腳本之家小編推薦的一個(gè)方法:到服務(wù)里面重啟下sqlserver服務(wù)即可。
問題一描述:SQL Server數(shù)據(jù)庫備份還原后,在數(shù)據(jù)庫名稱后會出現(xiàn)“受限制訪問”字樣
問題二描述:在對SQL Server數(shù)據(jù)庫進(jìn)行還原時(shí),提示:System.Data.SqlClient.SqlError:因?yàn)閿?shù)據(jù)庫正在使用,所以無法獲得對數(shù)據(jù)庫的獨(dú)占訪問權(quán)。(Microsoft.SqlServer.Smo)。出現(xiàn)此問題的原因是在還原數(shù)據(jù)庫時(shí),有其他用戶正在使用數(shù)據(jù)庫。還原數(shù)據(jù)庫要求數(shù)據(jù)庫工作在單用戶模式。通常就是DBA在操作時(shí),不允許其他用戶連接數(shù)據(jù)庫。
問題一解決辦法:
右鍵點(diǎn)擊數(shù)據(jù)庫 -> 屬性 -> 選項(xiàng) -> 狀態(tài) -> 限制訪問 -> 選擇Multiple -> 確定。
問題二解決辦法:
方法一(最方便):右鍵點(diǎn)擊數(shù)據(jù)庫 -> 屬性 -> 選項(xiàng) -> 狀態(tài) -> 限制訪問 -> 選擇Single-> 確定。然后還原。
方法二(最直接):斷開數(shù)據(jù)庫連接
方法三(最暴力):注銷/重啟數(shù)據(jù)庫服務(wù)器
方法四(最麻煩):寫代碼修改數(shù)據(jù)庫相關(guān)屬性,雖然麻煩,有的時(shí)候還是要用到,那就用到的時(shí)候再研究。
①先切換數(shù)據(jù)庫到master數(shù)據(jù)庫。執(zhí)行語句
select * from master..sysprocesses where dbid=db_id( '數(shù)據(jù)庫名稱')
②然后逐步運(yùn)行語句 exec kill spid(上一步結(jié)果集中的數(shù)據(jù)),
問題就解決了。哈哈
今天在還原數(shù)據(jù)庫的時(shí)候,提示"因?yàn)閿?shù)據(jù)庫正在使用,所以無法獲得對數(shù)據(jù)庫的獨(dú)占訪問權(quán)",無論我是重啟數(shù)據(jù)庫,還是重啟計(jì)算機(jī),都不能解決問題,多番嘗試后,終于解決了該問題?,F(xiàn)將引發(fā)該問題的原因與解決方案寫出來,有不對的地方歡迎大家提出來。
引發(fā)原因:是因?yàn)槲以谶€原數(shù)據(jù)庫的時(shí)候,還有其他的用戶正在使用數(shù)據(jù)庫,所以就會出現(xiàn)以上提示。
解決方法:
設(shè)置數(shù)據(jù)庫在單用戶模式下工作。
設(shè)置方法:在需要還原的數(shù)據(jù)庫上右擊,在右鍵菜單命令上選擇"屬性"- >"選項(xiàng)"- >"狀態(tài)"- >"限制訪問"- >"Single"。這是SQLSERVER2005的菜單命令,其它版本請自己查找。
declare @dbname varchar(50)
set @dbname='數(shù)據(jù)庫名稱'
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語句,斷開所有用戶鏈接,并回滾所有事務(wù),具體SQL語句如下:
ALTER DATABASE [數(shù)據(jù)庫名稱]
SET OFFLINE WITH ROLLBACK IMMEDIATE
注意:在使用方法2與3時(shí),不要在需要的還原的數(shù)據(jù)庫下執(zhí)行,建議在master數(shù)據(jù)庫下面執(zhí)行。
相關(guān)文章
掌握SQL?Server實(shí)戰(zhàn)教程之SQL?Server的安裝指南
對于項(xiàng)目來說最重要的一環(huán)莫過于數(shù)據(jù)庫了,一個(gè)良好的數(shù)據(jù)庫能夠讓項(xiàng)目更加清晰、條理分明,下面這篇文章主要給大家介紹了關(guān)于掌握SQL?Server實(shí)戰(zhàn)教程之SQL?Server的安裝指南,需要的朋友可以參考下2023-04-04SQL SERVER使用REPLACE將某一列字段中的某個(gè)值替換為其他的值
本節(jié)主要介紹了SQL SERVER使用REPLACE將某一列字段中的某個(gè)值替換為其他的值,需要的朋友可以參考下2014-08-08SQL Server 2012無法連接到WMI提供程序(Cannot connect to WMI provider)解
這篇文章主要介紹了SQL Server 2012無法連接到WMI提供程序(Cannot connect to WMI provider)解決方案,需要的朋友可以參考下2014-07-07SQLSERVER收集語句運(yùn)行的統(tǒng)計(jì)信息并進(jìn)行分析
例如語句的編譯時(shí)間、執(zhí)行時(shí)間、做了多少次磁盤讀等,如果DBA能夠把問題語句單獨(dú)測試運(yùn)行,可以在運(yùn)行前打開下面這三個(gè)開關(guān),收集語句運(yùn)行的統(tǒng)計(jì)信息。這些信息對分析問題很有價(jià)值,感興趣的朋友可以了解下2013-01-01sql中循環(huán)處理當(dāng)前行數(shù)據(jù)和上一行數(shù)據(jù)相加減
曾經(jīng),sql中循環(huán)處理當(dāng)前行數(shù)據(jù)和上一行數(shù)據(jù)浪費(fèi)了我不少時(shí)間,學(xué)會后才發(fā)現(xiàn)如此容易,其實(shí)學(xué)問就是如此,難者不會,會者不難。2014-08-08如何強(qiáng)制刪除或恢復(fù)SQLServer正在使用的數(shù)據(jù)庫
如何強(qiáng)制刪除或恢復(fù)SQLServer正在使用的數(shù)據(jù)庫...2007-01-01