“Cannot drop database “” because it is currently in use” Hatasının Çözümü

2 Oca by NURULLAH ÇAKIR

“Cannot drop database “” because it is currently in use” Hatasının Çözümü

Veritabanını silmek istediğinizde eğer veritabanı üzerinde açık session varsa bu hatayı alırsınız. Veritabanını aşağıdaki gibi önce single_user mode’a alıp daha sonra silebilirsiniz.

USE [master]
GO
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DROP DATABASE [Test]
GO

Yukarıdaki script ile veritabanındaki açık connection’ları kapatıp veritabanını sadece kendimiz kullanabileceğimiz şekilde single_user olarak set ediyoruz ve daha sonra da siliyoruz. Eğer veritabanı zaten single_user’daysa başka biri daha önce veritabanını single_user mode’a almış demektir ve aşağıdaki gibi bir hata alırsınız.

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.

Msg 5069, Level 16, State 1, Line 3

ALTER DATABASE statement failed.

Msg 3702, Level 16, State 4, Line 5

Cannot drop database “” because it is currently in use.

Veritabanı üzerindeki açık olan tüm session’ları manual olarak kill etmek için aşağıdaki sorguyu çalıştırmalısınız. Test yazaran yere kendi veritabanı adınızı yazmalısınız.

select * from sys.sysprocesses where dbid=DB_ID('Test')

Sorgu sonucunda dönen kayıtlar bu veritabanı üzerindeki process’lerdir. Bunların session_id’lerini bulup kill edip veritabanını silebilirsiniz. Örneğin session_id’si 55 ise kill 55 demelisiniz. Sorguları kill etmeden önce ilgili kişiyi bulup sormanız daha güvenli olacaktır. Eğer gerek olmadığını düşünüyorsanız aşağıdaki script ile ilgili veritabanındaki tüm session’ları otomatik olarak kill edebilirsiniz.

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

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir