当我尝试删除数据库时,我收到错误“无法删除数据库“dbname”,因为它当前正在使用中”。但是,当我运行时sp_who2,肯定没有会话连接到该数据库。我还将数据库设置为single_user mode with rollback immediate.
sp_who2
single_user mode with rollback immediate
为什么会这样?
确保您没有要删除的数据库上的数据库快照等依赖项。但是,错误消息看起来会有所不同。您确定没有隐藏进程连接到您的数据库吗?一个好的方法是运行一个脚本来杀死所有会话,并在将数据库重命名为另一个名称后立即删除数据库。
基于此选择创建一个游标:
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