go backsqlschool blogs list

Understanding the Dedicated Administrator Connection - DAC

by Antonios Chatzipavlis

Κάθε SQL Server DBA έχει στην συλλογή του διάφορα εργαλεία για να κάνει την καλύτερα την ημερήσια δουλεία του. Ένα από αυτά είναι και τo Dedicated Administrator Connection (DAC). Πόσοι όμως ξέρουν τι είναι αυτό και πως πρέπει να χρησιμοποιείται;

Από τον SQL Server 2005 όταν πρωτοεμφανίστηκε η συγκεκριμένη δυνατότητα έχω δει να χρησιμοποιείται τις περισσότερες φορές λάθος. Αυτό κυρίως οφείλεται στο ότι δεν έχει γίνει πλήρως κατανοητό τι ακριβώς κάνει και ποιος είναι ο βασικός σκοπός που αυτή η δυνατότητα υπάρχει.

Για να πάρουμε λοιπόν τα πράγματα με την σειρά.

Ο Σκοπός του DAC

Υπάρχουν στιγμές, ειδικά σε συστήματα που δεν έχει γίνει σωστή διαστασιολόγιση απαιτήσεων και πόρων, όπου ο SQL Server κάποια στιγμή θα βρεθεί σε μια κατάσταση που να μην μπορεί άμεσα να ανταπεξέλθει στις απαιτήσεις των χρηστών. 

Αυτό πριν τον SQL Server 2005 σήμαινε ότι ο DBA δεν μπορούσε να συνδεθεί στον instance ώστε να εντοπίσει και να σκοτώσει το ή τα sessions που δημιουργούν το μεγαλύτερο πρόβλημα.

Πλέον από τον SQL Server 2005 και μετά δεν υπάρχει καθώς με το DAC δίνεται η δυνατότητα στο DBA να συνδεθεί στο instance να εντοπίσει την αιτία του κακού και να πράξει ανάλογα.

Το DAC λοιπόν είναι ένα special connection το οποίο πρέπει να χρησιμοποιείται όταν δεν μπορούμε σαν DBA να συνδεθούμε στον SQL Server instance.

Πως το ενεργοποιώ

Για να χρησιμοποιήσει κανείς το DAC θα πρέπει να το κάνει εφόσον είναι φυσικά συνδεδεμένος στον server που είναι εγκατεστημένο το SQL Server instance κάνοντας χρήση του SQLCMD utility και ορίζοντας το διακόπτη -Α.  Αυτό μάλιστα είναι και το ενδεδειγμένο καθώς το SQLCMD είναι command line utility και δεν έχει την επιβάρυνση σε πόρους που έχουν τα UI utilities.

Φυσικά μπορείς να γίνει χρήση του DAC και μέσω του SSMS. Αυτό μπορεί να γίνει ανοίγοντας ένα New Query και στο παράθυρο που ζητάει την σύνδεση να γράψω ADMIN:<instance name>.
Για να μπορέσει όμως αυτό να πραγματοποιηθεί με επιτυχία θα πρέπει να έχει ενεργοποιηθεί στο instance το Remote Admin Connections στα configuration options του συγκεκριμένου instance.

Μάλιστα το συγκεκριμένο options αρκετοί συνάδελφοι μεταξύ αυτών και εγώ συνιστούν να είναι ενεργοποιημένο καθώς υπάρχουν περιπτώσεις που όταν υπάρχει πρόβλημα δεν είναι δυνατόν να συνδεθώ στον server ούτε με remote desktop connection ούτε  φυσικά (αν βέβαια έχω πρόσβαση στο computer room).

Επίσης θα πρέπει στο σημείο αυτό να επισημανθεί ότι η χρήση του DAC μέσω του SSMS μπορεί να γίνει μόνο για ένα New Query και όχι στο πρώτο connection dialog που εμφανίζεται όταν εκτελούμε το SSMS και οποίος ουσιαστικά χρησιμοποιείται για το Object Explorer Window.

Τα χαρακτηριστικά του DAC

  1. Το DAC είναι ένα ειδικού σκοπού connection στον SQL Server με σκοπό την διάγνωση του προβλήματος και εφόσον είναι εφικτό την επίλυση αυτού.
  2. Δεν μπορώ να έχω ταυτόχρονα ενεργά περισσότερα από ένα DAC connections. Αν το επιχειρήσω θα πάρω μήνυμα λάθος και θα καταγραφεί στα logs.
  3. Μπορώ να ελέγχω αν υπάρχει ενεργό DAC connection στο instance με το παρακάτω query . Αν αυτό δεν επιστρέψει αποτέλεσμα δεν έχω ενεργό DAC  SELECT s.session_id  FROM sys.tcp_endpoints as e  INNER JOIN sys.dm_exec_sessions as s  ON e.endpoint_id = s.endpoint_id  WHERE e.name=N'Dedicated Admin Connection';
  4. To DAC εξ ορισμού είναι διαθέσιμο για τοπική χρήση. Για να μπορώ να το εκτελώ απομακρυσμένα θα πρέπει να ενεργοποιηθεί το Remote Admin Connection configuration option.
  5. To account με το οποίο θα επιχειρήσω σύνδεση DAC θα πρέπει να είναι στο sysadmin server role.
  6. Μέσω του DAC ουσιαστικά μπορώ να εκτελέσω ερωτήματα που κάνουν χρήση κάποιου DMV. Για παράδειγμα δεν μπορώ να εκτελέσω εργασίες backup/restore καθώς αυτά ανήκουν στα parallel queries τα οποία δεν επιτρέπονται μέσω DAC.
  7. Δεν είναι φρόνιμο να εκτελώ queries που είναι resource intensive.
  8. Όταν έχω ένα DAC connection τότε ένα ξεχωριστό και ειδικό thread δίνεται σε αυτό το οποίο έχει τον δικό του scheduler (μέχρι τον SQL Server 2008 το ID του scheduler αυτού είναι το 255, από τον SQL Server 2008 R2 και μετά είναι το 1048576) και αυτό το thread δεν μπορεί να τα σκοτώσουμε.
  9. Το DAC δεν έχει lazywriter thread. Αντί αυτού έχει τα δικά του I/O Completion Port, worker thread.
  10. Δεν είναι 100% σίγουρο ότι θα μπορέσετε να συνδεθείτε πάντα μέσω DAC καθώς και αυτό δεσμεύει μνήμη καθώς έχει το δικό του scheduler και η κατάσταση του server σε μνήμη είναι παραπάνω από τερματισμένη.
  11. Όταν μέσω DAC προσπαθούμε να προσπελάσουμε κάτι το οποίο είναι ήδη locked από κάποιο άλλο process δεν θα το διαβάσουμε. Για να γίνει αυτό θα πρέπει να σκοτώσουμε το process που έχει κάνει το lock.
  12. To DAC για να μπορέσει κάποιος να το χρησιμοποιήσει στην Express έκδοση του SQL Server 2012 θα πρέπει να ξεκινήσει τo instance με το trace flag 7806.

/*antonch*/

Ημερομηνία: 26 August 2014 00:09
Share it:

Αφήστε το σχόλιο σας - Leave your comment

Τα σχόλια έχουν κλείσει.
Επιτρέπονται μόνο τα σχόλια από τα μέλη του SqlSchool.gr.


newsletter subscription

Εάν επιθυμείτε να λαμβάνετε ενημέρωση από εμάς, δώστε μας το e-mail σας.
PASS chapter logo
Official Professional Association for SQL Server (PASS) chapter for Greece
Join to PASS