因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權(轉)


還原數據庫出錯: ” 因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權 “ 的解決方案

在還原數據庫時 , 有時會提示因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權 !!
這時需要在還原數據庫前先殺死正在使用數據庫的線程 .

該解決方案用到了系統表中的 sysprocesses ,若要訪問 sysprocesses ,您必須定位到 master 數據庫。

以下是殺死正在使用 'V091222' 數據庫的線程 :

use master

declare @dbname varchar ( 20)

set @dbname = 'v091222'

 

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

 

 

數據庫sysprocesses 表詳細說明

 

sysprocesses
sysprocesses 表中保存關於運行在 Microsoft&reg; SQL Server™ 上的進程的信息。這些進程可以是客戶端進程或系統進程。sysprocesses 只存儲在 master 數據庫中。

列名 數據類型 描述 
spid smallint SQL Server 進程 ID 。 
kpid smallint Microsoft Windows NT 4.0&reg; 線程 ID 。 
blocked smallint 分塊進程的進程 ID (spid) 。 
waittype binary(2) 保留。 
waittime int 當前等待時間(以毫秒為單位)。當進程不處於等待時,為 0 。 
lastwaittype nchar(32) 表示上次或當前等待類型名稱的字符串。 
waitresource nchar(32) 鎖資源的文本化表示法。 
dbid smallint 當前正由進程使用的數據庫 ID 。 
uid smallint 執行命令的用戶 ID 。 
cpu int 進程的累計 CPU 時間。無論 SET STATISTICS TIME ON 選項是 ON 還是 OFF ,都為所有進程更新該條目。 
physical_io int 進程的累計磁盤讀取和寫入。 
memusage int 當前分配給該進程的過程高速緩存中的頁數。一個負數,表示進程正在釋放由另一個進程分配的內存。 
login_time datetime 客戶端進程登錄到服務器的時間。對於系統進程,是存儲 SQL Server 啟動發生的時間。 
last_batch datetime 客戶端進程上次執行遠程存儲過程調用或 EXECUTE 語句的時間。對於系統進程,是存儲 SQL Server 啟動發生的時間。 
ecid smallint 用於唯一標識代表單個進程進行操作的子線程的執行上下文 ID 。 
open_tran smallint 進程的打開事務數。 
status nchar(30) 進程 ID 狀態(如運行、休眠等)。 
sid binary(85) 用戶的全局唯一標識符 (GUID) 。 
hostname nchar(128) 工作站的名稱。 
program_name nchar(128) 應用程序的名稱。 
hostprocess nchar(8) 工作站進程 ID 號。 
cmd nchar(16) 當前正在執行的命令。 
nt_domain nchar(128) 客戶端的 Windows NT 4.0 域(如果使用 Windows 身份驗證)或信任連接的 Windows NT 4.0 域。 
nt_username nchar(128) 進程的 Windows NT 4.0 用戶名(如果使用 Windows 身份驗證)或信任連接的 Windows NT 4.0 用戶名。 
net_address nchar(12) 指派給每個用戶工作站上的網絡接口卡唯一標識符。當用戶登錄時,該標識符插入 net_address 列。 
net_library nchar(12) 用於存儲客戶端網絡庫的列。每個客戶端進程都在網絡連接上進入。網絡連接有一個與這些進程關聯的網絡庫,該網絡庫使得這些進程可以建立連接。有關更多信息,請參見客戶端和服務器 Net-Library 。 
loginame nchar(128) 登錄名。 


免責聲明!

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



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