现在的位置: 首页 > 综合 > 正文

还原数据库出错:”因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案

2013年09月09日 ⁄ 综合 ⁄ 共 1889字 ⁄ 字号 评论关闭

还原数据库出错:


因为数据库正在使用,所以无法获得
对数据库的独占访问权



的解决方案

在还原数据库时
,

有时会提示因为数据库正在使用,所以无法获得对数据库的独占访问权

!!


这时需要在还原数据库前先杀死正在使用数据库的线程
.

该解决方案用到了系统表中的
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)

登录名。

 

 

抱歉!评论已关闭.