還原數據庫出錯: ” 因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權 “ 的解決方案
在還原數據庫時 , 有時會提示因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權 !!
這時需要在還原數據庫前先殺死正在使用數據庫的線程 .
該解決方案用到了系統表中的 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® SQL Server? 上的進程的信息。這些進程可以是客戶端進程或系統進程。sysprocesses 只存儲在 master 數據庫中。
列名 數據類型 描述?
spid smallint SQL Server 進程 ID 。?
kpid smallint Microsoft Windows NT 4.0® 線程 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) 登錄名。?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
