当我尝试删除数据库时,我收到错误“无法删除数据库”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