博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
还原数据库出错:”因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案...
阅读量:7041 次
发布时间:2019-06-28

本文共 2165 字,大约阅读时间需要 7 分钟。

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

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

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

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

 

转载于:https://www.cnblogs.com/sheseido/archive/2012/05/18/2508082.html

你可能感兴趣的文章
springboot 处理后端long传给前端精度丢失问题
查看>>
[译文]扩展Repeater控件以支持DataPager分页
查看>>
88. Merge Sorted Array
查看>>
java抽象类和接口区别
查看>>
构建Ruby开发环境(Windows+Eclipse+Aptana Plugin)
查看>>
Miao Xian 隐私政策
查看>>
三维实景下的南极科考站是什么样子?
查看>>
Linux利用scp命令来进行文件复制
查看>>
【LabVIEW技巧】你可以不懂OOP,却不能不懂封装
查看>>
《Programming in Lua 3》读书笔记(十五)
查看>>
PHP读取xlsx Excel 文件
查看>>
R语言模型中的加总偏误与内生性:一种数值模拟方法
查看>>
ajax进error的原因
查看>>
[数据结构]浅谈哈希表的冲突避免策略
查看>>
python全栈考试作业 2017-03-30
查看>>
easyshell 安装
查看>>
UITextView 点击添加文字 光标处于最后方
查看>>
kudu 1.8.0(开发版) 源码安装
查看>>
LVS+Keepalived实现MySQL从库读操作负载均衡
查看>>
【转载】说说标准服务器架构(WWW+Image/CSS/JS+File+DB)续测试环境搭建
查看>>