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

摘要:
此时,您需要在还原数据库之前终止正在使用数据库的线程。此解决方案使用系统表中的sysprocesss!以下是当前分配给正在终止“V091222”数据库的线程的进程缓存中的页数。指示一个进程正在释放另一个进程分配的内存。login_Timedatetime客户端进程登录到服务器的时间。

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

在还原数据库时,有时会提示因为数据库正在使用,所以无法获得对数据库的独占访问权!!
这时需要在还原数据库前先杀死正在使用数据库的线程.

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

 

免责声明:文章转载自《还原数据库出错:”因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Redis主从Sentinel监控配置Python接口自动化(二) 发送post请求的接口;发送post【data】;python中字典和json的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FIREDAC操作SQLITE内存数据库

SQLite不仅可以把数据库放在硬盘上,还可以放在内存中,经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。 但数据库放在内存中时有如下缺陷: 1、断电或程序崩溃后数据库就会消失,你需要定期Attach到硬盘上备份; 2、在内存中的数据库不能被别的进程访问(因为没名字,以后可能支持),即使在多线程下,也得使用同一句柄; 3、不支持像在...

SQLSERVER查询数据库文件大小

SQLSERVER一个库的文件分为数据文件(行数据)和日志文件两个文件,详情可以在数据库的属性->文件中查看。 在资源管理器中打开文件所在路径可以直接看到这两个文件 但是,大多数时候我们的数据库安装在远程服务器上,在不远程的情况下,可以使用如下SQL语句: 1、查询各个磁盘分区的剩余空间(就是C盘还有多少空间,D盘还有多少...): Exec m...

oracle 迁移到clickhouse 45亿条数据

原文链接:http://www.520mwx.com/view/90469 45亿数据迁移记录 背景 数据库数据量日益增加,逐渐开始显得很是臃肿,日常查询统计的时候,仅仅是count(1) 查询下总数,耗费的时间也在500s左右,而且之前的orcle数据库,前期建立的时候,也未考虑太多,未进行索引,分表,等优化。后面鉴于种种考虑,以及后期的规划,准备...

MySQL权限

本文实例,运行于 MySQL 5.0 及以上版本。 MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。 grant select on testdb.* to common_user@'%'grant insert on test...

SQLyog快捷键

Ctrl+M   创建一个新的连接 Ctrl+N   使用当前设置新建连接 Ctrl+F4   断开当前连接 对象浏览器 F5   刷新对象浏览器(默认) Ctrl+B   设置焦点于对象浏览器 SQL 窗口 Ctrl+T   新建查询编辑器 Ctrl+E   设置焦点于 SQL 窗口 Ctrl+Y   重做  Ctrl+Z   撤销   Ctrl+X  ...

【转】Javascript异步编程之setTimeout与setInterval

Javascript异步编程之setTimeout与setInterval 转自:http://www.tuicool.com/articles/Ebueua 在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛多多原谅!) 1. setTimeout与setInterval详细分析基...