Stellen Sie sicher, dass Sie keine Abhängigkeiten wie Datenbank-Snapshots von der Datenbank haben, die Sie entfernen möchten. Die Fehlermeldung würde jedoch anders aussehen. Sind Sie sicher, dass es keinen versteckten Prozess gibt, der eine Verbindung zu Ihrer Datenbank herstellt? Ein guter Ansatz wäre, ein Skript auszuführen, das alle Sitzungen beendet und die Datenbank sofort nach dem Umbenennen in einen anderen Namen umbenennt und die Datenbank dann löscht.
Erstellen Sie einen Cursor basierend auf dieser Auswahl:
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')
Ausgabe innerhalb des Cursors:
SET @kill_process = 'KILL ' + @spid
EXEC master.dbo.sp_executesql @kill_process
PRINT 'killed spid : '+ @spid
Nachdem der Cursor geschlossen und freigegeben wurde:
sp_dboption 'my_db', 'single user', 'TRUE'
go
sp_renamedb 'my_db', 'my_db_old'
go
DROP DATABASE MY_DB_OLD