錯誤"因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權"的解決方案


錯誤"因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權"的解決方案

今天在還原數據庫的時候,提示"因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權",無論我是重啟數據庫,還是重啟計算機,都不能解決問題,多番嘗試后,終於解決了該問題。現將引發該問題的原因與解決方案寫出來,有不對的地方歡迎大家提出來。

引發原因:是因為我在還原數據庫的時候,還有其他的用戶正在使用數據庫,所以就會出現以上提示。

解決方法:
1,設置數據庫在單用戶模式下工作。
設置方法:在需要還原的數據庫上右擊,在右鍵菜單命令上選擇"屬性"- >"選項"- >"狀態"- >"限制訪問"- >"Single"。這是SQLSERVER2005的菜單命令,其它版本請自己查找。

 

2,利用SQL語句,殺死正在使用該數據庫的所有進程,自己以前在做一個SQL SERVER操作小工具的時候有寫過該功能的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命令殺死進程。

 

3,利用SQL語句,斷開所有用戶鏈接,並回滾所有事務,具體SQL語句如下:

ALTER DATABASE [數據庫名稱] 
SET OFFLINE WITH ROLLBACK IMMEDIATE

注意:在使用方法2與3時,不要在需要的還原的數據庫下執行,建議在master數據庫下面執行。

 

sql2005 還原時出現下面的錯誤,System.Data.SqlClient.SqlError: 尚未備份數據庫 “****” 的日志尾部。如果該日志包含您不希望丟失的工作,請使用 BACKUP LOG WITH NORECOVERY 備份該日志。請使用 RESTORE 語句的 WITH REPLACE 或 WITH STOPAT 子句來只覆蓋該日志的內容。 (Microsoft.SqlServer.Smo)

原因分析
這是因為還原的數據庫在最后備份后又產生了新的日志,所以按照默認設置的備份選項,系統將提示備份日志尾部以免造成事務中斷。
解決方法
如果需要備份尾部日志則進行備份。如果不需要,則可以在還原數據庫的的選項卡中選擇【覆蓋現有數據庫】復選框。

如果想使用命令進行操作則輸入以下命令即可:

use master exec killspid ‘TCPF’ restore database TCPF from disk=’D:backupDate20100724 120005_20100724 160038.bak’ with REPLACE

這樣就可以正確備份了

 


免責聲明!

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



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