还原数据库出错:
”
因为数据库正在使用,所以无法获得
对数据库的独占访问权
“
的解决方案
在还原数据库时
,
有时会提示因为数据库正在使用,所以无法获得对数据库的独占访问权
!!
这时需要在还原数据库前先杀死正在使用数据库的线程
.
该解决方案用到了系统表中的
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)
登录名。
|