Sql server還原失敗(數據庫正在使用,無法獲得對數據庫的獨占訪問權) 問題分析:數據庫還原的時候還有其他進程連在上面,導致無法獲得獨占造成的。 解決方案: 一、切斷連接進程 1.查詢要還原的數據庫ID Select * from master..sysdatabases where name = ''; 2.獲取該數據庫的進程 Select * from sys.sysprocesses a where a.dbid = ''; 3.殺掉連接在上面的進程 kill @spid; 此時去還原一般就可以了 二、 將當前需要還原的數據進行OFFLINE,還原后,再將該數據庫ONLINE。 腳本如下,先運行第一腳本,還原成功后,運行第二腳本。 1)ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE 2)ALTER DATABASE [datebase] SET ONLINE WITH ROLLBACK IMMEDIATE 如果此時還原還是不行。可能是刪完進程馬上有新的進程連進來, 導致一直失敗。應用程序一直不停的進行數據庫鏈接。 這時,可以在單用戶下還原。 三、刪完進程馬上有新的進程連進來,導致一直失敗。 單用戶模式 單用戶模式設置: 右鍵點擊數據庫 -> 屬性 -> 選項 -> 狀態 -> 限制訪問(MULTI_USER 默認) -> 選擇Single-> 確定。然后還原。 或 GUI的模式,語句的辦法比較簡單 USE MASTER GO ALTER DATABASE 數據庫名字 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO 設置單用戶數據庫必須要超級用戶 四、 -- 首先定位到master數據庫 use master go declare @dbname varchar(20) set @dbname='dbtest' ---這是數據庫名稱 declare @sql nvarchar(500) declare @spid int--SPID 值是當用戶進行連接時指派給該連接的一個唯一的整數 set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')' exec (@sql) open getspid fetch next from getspid into @spid while @@fetch_status<>-1--如果FETCH 語句沒有執行失敗或此行不在結果集中。 begin exec('kill '+@spid)--終止正常連接 fetch next from getspid into @spid end close getspid deallocate getspid