sql-server – SQL Server无法删除数据库,因为它当前正在使用…但没有显示任何会话

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server无法删除数据库,因为它当前正在使用…但没有显示任何会话前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试删除数据库时,我收到错误“无法删除数据库”dbname“因为它当前正在使用”.但是,当我运行sp_who2时,肯定没有连接到此数据库的会话.我还将数据库设置为single_user模式,并立即回滚.

为什么会这样?

解决方法

确保您没有要删除数据库上的数据库快照等依赖项.但是,错误消息看起来不同.
您确定没有连接到数据库的隐藏进程吗?一个好的方法是运行一个脚本来杀死所有会话,并在将数据库重命名为另一个名称后立即删除数据库.

基于此选择创建游标:

select  d.name,convert (smallint,req_spid) As spid
      from master.dbo.syslockinfo l,master.dbo.spt_values v,master.dbo.spt_values x,master.dbo.spt_values u,master.dbo.sysdatabases d
      where   l.rsc_type = v.number 
      and v.type = 'LR' 
      and l.req_status = x.number 
      and x.type = 'LS' 
      and l.req_mode + 1 = u.number
      and u.type = 'L' 
      and l.rsc_dbid = d.dbid 
      and rsc_dbid = (select top 1 dbid from 
                      master..sysdatabases 
                      where name like 'my_db')

游标内部问题:

SET @kill_process =  'KILL ' + @spid      
            EXEC master.dbo.sp_executesql @kill_process
                   PRINT 'killed spid : '+ @spid

光标关闭并取消分配后:

sp_dboption 'my_db','single user','TRUE'

go

sp_renamedb 'my_db','my_db_old'

go

DROP DATABASE MY_DB_OLD

猜你在找的MsSQL相关文章