Dedicated Admin Connection (DAC) Nedir? Nasıl kullanılır?
Selamlar, ihtiyacınız olmaması dileğiyle bugün sizlere SQL Server DAC hakkında bilgi vereceğim. İhtiyacınız olmaması dileğiyle diyorum, çünkü bu özelliği kullanıyorsanız muhtemelen SQL Server’ınızda sorun vardır ve bir production ortamındaki sıkıntıları gidermeye çalışıyor olabilirsiniz.
DAC Nedir?
Dedicated Admin Connection ilk olarak SQL Server 2005 ile sunulan ve veritabanı sunucusuna normal yollar dışında bağlanmamızı sağlayan özel bir bağlantı şeklidir. Sysadmin’ler için özel bir arka kapı da diyebiliriz. Database Engine bu bağlantı için küçük bir miktar memory ve özel bir scheduler rezerve ederek her zaman bu kapının erişilebilir olmasını mümkün kılar.
SQL Server’ın kaynak yetersizliği, aşırı yoğunluk ve benzeri sebeplerden yeni bağlantı kabul edemediği durumlarda bu aşırı yüke sebep olan durumu anlamak ve çözmek için DAC bağlantısı açarız. Bağlantıyı sağladıktan sonra aşırı kaynak tüketen sorguları, head blockerı vs sorunu yaratan session id tespit edip kill edebiliriz. DAC olmasaydı SQL Restart etmeye kadar gideceğimiz istenmeyen bir yola girmek zorunda kalabilirdik.
DAC Özelliği Nasıl Aktifleştirilir?
SQL Express harici versiyonlarda DAC localden kullanım için default olarak açık gelmektedir. Localden kısmına dikkat edin lütfen çünkü birazdan bahsedeceğim “remote admin connections” konfigürasyon seçeneğini aktifleştirmemiş olsanız bile veritabanı sunucusunda RDP yaparak bu özelliği kullanabilirsiniz.
SQL Express’te bu özelliği kulanabilmeniz için başlangıç parametrelerine -T7806 trace flag ekleyip DB Engine servisi restart etmeli ve servislerden SQL Browser’ın çalıştığına emin olmanız gerekmektedir.
DAC dafault olarak 1434 portunu kullanır. Bu port bilgisini SQL Server başlangıcında Error Log’da aşağıdaki şekilde görebilirsiniz:
Dedicated admin connection support was established for listening locally on port 1434.
Uzaktan DAC bağlantısını aktifleştirmek için de 2 yöntem kullanabiliriz:
- TSQL Query ile
- SSMS GUI aracılığıyla
TSQL İle Aktifleştirmek
Aşağıdaki kod parçacığını kullanarak uzaktan DAC erişimini kullanıma açılabiliriz.
EXEC sp_configure 'remote admin connections', 1
GO
RECONFIGURE
GO
Buradaki “Run the RECONFIGURE statement to install” uyarısını dikkate almayın çünkü kodumuzun hemen altına RECONFIGURE ekleyip çalıştırdık zaten.
Aşağıdaki sorgu ile kontrolü gerçekleştirebiliriz.
EXEC sp_configure 'remote admin connections'
“Run Value” kolonunda yazan değer bize aktiflik durumunu göstermektedir.
GUI ile Aktifleştirmek
Sunucu isminin üzerine sağ tıklatıp “Facets” seçiyoruz. Burada SQL Serverla ilgili onlarca seçeneği görebiliriz.
Gelen ekranda aşağıda kırmızı oklarla gösterdiğim seçenekleri seçip OK diyoruz.
DAC Bağlantısı Kullanımı
DAC bağlantısı kurmak için de 2 yol kullanabiliriz.
- GUI (SSMS)
- Command Prompt
SQL Server Management Studio Üzerinden Bağlanmak
Bu yöntem benim de öncelikle tercih ettiğim daha kolay ve kullanışlı bulduğum yöntemdir. Bağlanmak için her zaman kullandığımız “Connect” butonuna değil de menüden “Database Engine Query” seçeneğine gidiyoruz.
Gelen bağlantı penceresinde sunucu isminin öncesine ADMIN: veya admin: şeklinde prefix ekliyoruz.
Windows Authentication veya SQL Authentication kullanabiliriz. Fakat kullanacağımız loginin sysadmin hakkı olması şart.
“Database Engine Query” seçmeden normal şekilde bağlanmaya çalışırsanız hata alırsınız.
Veya başka bir yerden ikinci bir DAC bağlantısı açmaya çalışırsanız SQL sizi durduracaktır:
Bağlantımız sağladıktan sonra normal bir Query penceresi önümüze gelecek ve sorgularımızı çalıştırabilir hale geleceğiz.
Komut Satırı kullanarak DAC Bağlantısı Yapmak
Komut satırından normalde yapılan bağlantı dışında –A parametresini komuta ekliyoruz.
SQL Authentication:
sqlcmd -S [ServerName] -U [loginname] -P [Password] –A
Yukarıdaki örnekteki sunucumuza bağlanmak için örnek komut:
Sqlcmd –S MEHMETYAVUZ\INST01 –U sysadmin_bir_hesap –P *** -A
Windows Authentication:
sqlcmd –S [ServerName] –A
Yukarıdaki örnekteki sunucumuza bağlanmak için örnek komut:
Sqlcmd –S MEHMETYAVUZ\INST01 –A
DAC hakkında son birkaç bilgi:
- Logininize ait default veritabanı online değilse DAC bağlantısı sağlayamazsınız. error 4060 hatası alırsınız. Bu durumda SQLCMD ile master db’ye bağlanabilirsiniz. Bu durumda örnek komutumuz şu şekilde değişir:
Sqlcmd –S MEHMETYAVUZ\INST01 –d master –U sysadmin_bir_hesap –P *** -A
- DAC bağlantısında her komutu çalıştıramazsınız (Örneğin paralelizm, BACKUP, RESTORE çalışmaz)
- DAC ile çok kısıtlı miktarda kaynak kullanabilirsiniz. Bu kaynak sistem dmv’lerini sorgulama, DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, DBCC SQLPERF, KILL gibi basit komutlar için yeterlidir. Fazla kaynak tüketen sorgularınız için (Örneğin DBCC CHECKDB, DBCC DBREINDEX, or DBCC SHRINKDATABASE) DAC kullanmanızı önermem.
- Azure SQL Veritabanına da SQLCMD ile DAC bağlantısı sağlayabilirsiniz. Bunun için –d ile veritabanı ismini belirtmeniz zorunludur.