Bu makalede karşılaşmış olduğum hataya değinmek istedim. Çalıştığım ortamda herhangi bir veritabanını aşağıdaki komutlarla silmeye çalıştım.
USE [master]
GO
ALTER DATABASE ABC SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DROP DATABASE [ABC]
GO
Yukarıdaki komutu çalıştırdığım zaman ilk gelen single-user’ı alır mantığı olduğu için veritabanını single-user mode’a alamadım. Single user aşağıdaki hatada da belirtildiği gibi başka bir kullanıcı almıştı.
Msg 5064, Level 16, State 1, Line 3
Changes to the state or options of database ” cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.
Daha sonra işlemimiz Deadlock’a düştü.

Yukarıdaki hata ile karşılaştıktan sonra active monitore açarak ilgili database altındaki tüm user’ları kill etmeye çalıştım ve bir sonuç alamadım. Veritabanı altındaki tüm sessionları kill eden sorguyu bilmediğim için veritabanını Offline moduna alıp daha sonra Online mode aldığımda veritabanımı düzeltebildim. Şimdi take offline ve bring online ifadelerini kullanmadan aşağıdaki komutlar sayesinde veritabanı altındaki tüm sessionları kill eden sorguyu görmüş olacağız.
select 'kill '+CAST(spid AS varchar(50)) from sys.sysprocesses where dbid=DB_ID('Database_Name')
Gelen tüm kill ifadelerini kopyalayıp çalıştırmamız gerekmektedir.
Yada kill işlemini otomatik yapılmasını istiyorsak aşağıdaki komut kullanılabilir.
declare @Sql varchar(1000), @veritabaniadi varchar(100)
set @veritabaniadi = 'Buraya Veritabanı Adını Yazmalısınız'
set @Sql = ''
select @Sql = @Sql + 'kill ' + convert(char(10), spid) + ' '
from master.dbo.sysprocesses
where db_name(dbid) = @veritabaniadi
and
dbid <> 0
and
spid <> @@spid
exec(@Sql)
GO
Tüm sessionları kill ettikten sonra veritabanımızı başarılı bir şekilde kurtardık.
Başka bir makalede görüşmek üzere..
“De ki: Allah’ın bizim için yazdığından başkası bize asla erişmez. O bizim mevlâmızdır. Onun için müminler yalnız Allah’a dayanıp güvensinler.” Tevbe-51