加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server无法删除数据库,因为它当前正在使用…

发布时间:2020-12-12 16:59:05 所属栏目:MsSql教程 来源:网络整理
导读:当我尝试删除数据库时,我收到错误“无法删除数据库”dbname“因为它当前正在使用”.但是,当我运行sp_who2时,肯定没有连接到此数据库的会话.我还将数据库设置为single_user模式,并立即回滚. 为什么会这样? 解决方法 确保您没有要删除的数据库上的数据库快照等
当我尝试删除数据库时,我收到错误“无法删除数据库”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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读