指引网

当前位置: 主页 > 数据库 > SQLServer >

SqlServer:单用户模式下查杀相关进程实现单/多用户转换

来源:网络 作者:佚名 点击: 时间:2018-03-14 17:55
[摘要] SqlServer:单用户模式下查杀相关进程实现单/多用户转换SQLServer下,单/多用户模式转换的三种方法: 1.直接在Management Studio中设置相关数据库的Properties:Options--Restrict Access下设置MULTI/SINGL

SqlServer:单用户模式下查杀相关进程实现单/多用户转换   SQLServer下,单/多用户模式转换的三种方法:
    1.直接在Management Studio中设置相关数据库的Properties:Options-->Restrict Access下设置MULTI/SINGLE_USER。    www.2cto.com      2.若是其他人设置Server为单用户模式,或者其他未知进程占用操作DB,再使用第一种方法发现该DB的Properties是打不开的,这时应该使用如下T-SQL进行操作:
  -----------------------Conversion Between Single Modle and  Multiple Modle,the first method: EXEC   sp_dboption   @dbname   =   'DB Name',   @optname   =   'single   user ',   @optvalue   =   false  EXEC   sp_dboption   @dbname   =   'DB Name ',   @optname   =   'single   user ',   @optvalue   =   true      3.也可以直接更改DB模式: -----------------------Conversion Between Single Modle and  Multiple Modle,the second method: ALTER DATABASE DealManager SET MULTI_USER AlTER DATABASE DEALMANAGER SET SINGLE_USER   www.2cto.com     倘若在单用户模式下恢复多用户模式或者操作DB发现操作总是失败,这是因为有其他进程占用该DB的缘故,有人会直接手动查看监视器中的进程,把与目的库有关的KILL掉,这种方法是很粗糙的,效率低而且有操作错误进程的危险。其实,实时操作DB的进程在master中是有记录的,我们只需要一个select语句就知道该进程,  然后Kill相关进程:
  ----------------------Kill the process in Single Modle select * from master..sysprocesses where dbid=db_id('DB Name') --Kill spid 也写了个小脚本执行这个操作:
  DECLARE @kid varchar(100) SET @kid=''  www.2cto.com   SELECT @kid=@kid+'KILL'+CAST(spid as Varchar(10)) FROM master..sysprocesses WHERE dbid=DB_ID('DB Name') PRINT @kid EXEC(@kid)
 
------分隔线----------------------------