DAC ( Dedicated Admin Connection )

SQL Server da oluşan yoğunluk ve kitlenmelerden dolayı sistem bağlantılara yanıt vermeyebilir. Bu durumda sistem yöneticisinin sisteme giriş yapabilmesini sağlayan özelliğe DAC (Dedicated Administrator Connection ) denir.

Genelde bu durumlarda rastaladığımız çözüm yaklaşımı sistemi restart etmek fakat bu durumun akabinde karşılaşacağımız daha kötü sonuçlar olabilir.  Örneğin DB lerin Emergency moda geçmesi, data kaybı, sistemim açılamaması vb gibi bir çok büyük çaplı problemle karşılaşma durmumuz oluşabilir.

Bu tür druumlarda sistemi kapatmak yerine sisteme bağlanıp bu olaya sebep olan işlemleri tespit edip incelemek ve sistemden connection ‘ını kesmek daha sağlıklı olacaktır.

Bu özelliği aktifleştirmek için aşağıda ki scripti çalıştıracağız ;

USE master;
GO
--0 = Yerel Bağlantı İzni,
--1 = Uzak Bağlantı İzni
sp_configure 'remote admin connections', 1; 
GO
RECONFIGURE;
GO

 

Remote bağlantılarda da bu özelliği aktifleştirdikten sonra hem SSMS üzerinden hemde komut satırından (SQLCMD) ile eriişim sağlayabiliriz.

SSMS üzerinden erişmek ;

1

 

 

2

 

Connect olurken Instance Name ‘in önüne ADMIN: yazarak bağlantıyı sağlayabiliriz.

3

Fakat yukarıda ki gibi Connection kurmaya kalkarsanız yukarıda ki hata mesajını alırsınız. Bu yüzden Connection ‘I aşağıda ki gibi kurmalısınız.

4

Database Engine Query ;Kırmızı kutucuğa aldığımız yere tıkladığınızda Connection ekranı çıkacak ve burada

Admin: <Instance Name> yazarak Connect olabilirsiniz.

5

Bağlantı kurdutan sonra bilmemiz gereken ;

  • Sysadmin gurubu için kullanılabilir.
  • Sadece bir adet DAC kullanılabilir.
  • SSMS üzerinde GUI imkanlarından yararlanılamaz. Yani T-SQL kodları ile işlemler yapılabilir.
  • ParaleleT-SQL komutları ( Backup,Restore) gibi komutları kullanamazsınız.

 

SQLCMD ile Bağlantı ;

–          Komut satırını açıp ,

6

–          Sqlcmd –s admin:yk

7

–          Tablomuza girip Select işlemi uygulayabiliriz ;

8

Hangi oturumun DAC bağlantıyla içeride olduğunu anlamak için aşağıdaki script kullanılabilir.

SELECT  CASE WHEN ses.session_id = @@SPID THEN 'Bu Oturum'
             ELSE ''
        END + COALESCE(ses.login_name, '???') AS WhosGotTheDAC ,
        ses.session_id ,
        ses.login_time ,
        ses.status ,
        ses.original_login_name
FROM    sys.endpoints AS en
        JOIN sys.dm_exec_sessions ses ON en.endpoint_id = ses.endpoint_id
WHERE   en.name = 'Dedicated Admin Connection';

 

9

 

İyi Çalışmalar.

Leave a Reply

Your email address will not be published. Required fields are marked *