Διαβάστε μια γραμμή του αρχείου καταγραφής του SQL Server για αποτυχημένη δέσμευση ενώ η υπηρεσία εξακολουθεί να εκτελείται, και έχετε βρει εξάρτηση από τη σειρά εκκίνησης, όχι κατάρρευση. Αυτός ο συνδυασμός είναι το στοιχείο: η μηχανή ξεκίνησε πριν υπάρξει στο μηχάνημα η διεύθυνση στην οποία της είχε ζητηθεί να ακούει. Ένας προσαρμογέας VPN που εμφανίζεται μετά τη σύνδεση είναι κακή προϋπόθεση για μια υπηρεσία βάσης δεδομένων χωρίς επίβλεψη, γι’ αυτό ακολουθήστε την αποτυχία με τη σειρά που τη βλέπει η μηχανή.

Ξεκινήστε από το αρχείο καταγραφής εκκίνησης, όχι από τον client

Ανοίξτε το αρχείο σφαλμάτων της παρουσίας και διαβάστε τις εγγραφές γύρω από την προετοιμασία του δικτύου, όχι μόνο την τελευταία γραμμή. Η μηχανή αναφέρει ποιες διευθύνσεις δοκίμασε και ποια πρωτόκολλα ενεργοποίησε, και αυτή η εγγραφή είναι από πριν συνδεθεί οποιοσδήποτε client. Τώρα δείτε τι υπάρχει στον host αυτή τη στιγμή. Αν η διεπαφή που κατέχει τη ρυθμισμένη διεύθυνση εμφανίζεται μόνο αφού συνδεθεί ένας χρήστης και ξεκινήσει έναν client, η διεύθυνση έλειπε κατά την εκκίνηση και η αποτυχία δέσμευσης εξηγείται πλήρως.

Get-NetIPAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, IPAddress, PrefixOrigin
Get-Content 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\LOG\ERRORLOG' -Tail 40

Προσαρμόστε τη διαδρομή της παρουσίας στην εγκατάστασή σας και διαβάστε τη λίστα διεπαφών πριν βγάλετε συμπεράσματα. Μια διεύθυνση που υπάρχει αλλά ανήκει σε λάθος προσαρμογέα είναι διαφορετικό πρόβλημα από μια διεύθυνση που δεν υπάρχει ακόμη.

Ακολουθήστε τη σειρά δέσμευσης που όντως τηρεί η μηχανή

Η μηχανή διαβάζει τη ρύθμιση του listener και στη συνέχεια ζητά από το λειτουργικό σύστημα να δεσμεύσει. Αν η διεύθυνση δεν είναι τοπική εκείνη τη στιγμή, η δέσμευση αποτυγχάνει για αυτή τη διεύθυνση ενώ το υπόλοιπο της παρουσίας μπορεί να συνεχίσει κανονικά. Γι’ αυτό άλλα πρωτόκολλα ή άλλες διευθύνσεις μπορούν ακόμη να λειτουργούν και γι’ αυτό το «ο SQL Server είναι κάτω» είναι λάθος σύνοψη. Διατηρήστε το ακριβές τελικό σημείο από το αρχείο καταγραφής: διεύθυνση, θύρα και πρωτόκολλο, γιατί η διόρθωση εξαρτάται από το ποιο από τα τρία είναι λάθος.

Η επανεκκίνηση της υπηρεσίας αφού εμφανιστεί ο προσαρμογέας συνήθως κάνει τον listener να πετύχει, και αυτή είναι ακριβώς η παγίδα. Αποδεικνύει την εξάρτηση αντί να την αφαιρεί, και διακόπτει κάθε συνδεδεμένο χρήστη κάθε φορά που το τούνελ επανασυνδέεται.

Διαβάστε τον listener όπως τον διαβάζει η μηχανή

Στο SQL Server Configuration Manager, ανοίξτε τις ιδιότητες TCP/IP της παρουσίας και σημειώστε τη ρύθμιση Listen All πριν επεξεργαστείτε μεμονωμένες διευθύνσεις. Όταν το Listen All είναι Yes, οι τιμές Enabled ανά διεύθυνση αγνοούνται, οπότε η επεξεργασία τους δεν αλλάζει τίποτα από όσα χρησιμοποιεί ο listener. Καταγράψτε τρία πράγματα με σειρά: τη διεύθυνση που σκοπεύετε να εξυπηρετήσετε, τη θύρα και αν ο listener προορίζεται να καλύπτει όλες τις διευθύνσεις ή μόνο μία. Στη συνέχεια εφαρμόστε την αλλαγή μέσω της υποστηριζόμενης διαδικασίας επανεκκίνησης και διαβάστε το επόμενο αρχείο καταγραφής εκκίνησης για να επιβεβαιώσετε ότι η μηχανή έδεσε αυτό που ζητήσατε.

Η ακρόαση σε κάθε διεύθυνση δεν είναι έλεγχος πρόσβασης. Αν ένας ευρύς listener είναι πραγματικά απαραίτητος, κάθε προσβάσιμη διεπαφή χρειάζεται τη δική της απόφαση τείχους προστασίας και εξουσιοδότησης βάσης δεδομένων, συμπεριλαμβανομένης οποιασδήποτε διεπαφής που βλέπει στο διαδίκτυο.

Δώστε στον client έναν σταθερό προορισμό

Ο client δεν χρειάζεται ο host της βάσης δεδομένων να φορά μια διεύθυνση από pool. Ένας δρομολογημένος σχεδιασμός λειτουργεί με τον διακομιστή να ακούει στη σταθερή ιδιωτική του διεύθυνση, ενώ η πύλη VPN προωθεί την κίνηση του client προς αυτόν και μεταφέρει την απάντηση πίσω.

Test-NetConnection -ComputerName 10.80.0.15 -Port 1433
tracert -d 10.80.0.15

Αν ο client φτάνει στη 10.80.0.15, η διαδρομή αποδεικνύεται και η βάση δεδομένων χρειάζεται μόνο να εξουσιοδοτήσει αυτόν τον client. Αν όχι, διορθώστε τη δρομολόγηση και το DNS πριν αγγίξετε ξανά τον listener, γιατί ένα πρόβλημα δέσμευσης στον διακομιστή δεν ήταν ποτέ ο λόγος που ένας client δεν μπορεί να τον βρει. Η προσθήκη ψεύτικης διεύθυνσης pool στον διακομιστή, ή δεύτερης προεπιλεγμένης πύλης για να ευχαριστηθεί ο listener, δημιουργεί νέο πρόβλημα δικτύου πάνω στο παλιό. Κρατήστε τη διευθυνσιοδότηση του διακομιστή σταθερή και αφήστε το τούνελ να φέρνει τους clients σε αυτόν.

Επαληθεύστε το τελικό σημείο που χρησιμοποίησε ο client

Ολοκληρώστε με έλεγχο σε επίπεδο εφαρμογής και όχι με δοκιμή θύρας. Συνδεθείτε από τον client με τον λογαριασμό που χρησιμοποιεί η εφαρμογή και διαβάστε τις λεπτομέρειες σύνδεσης στην πλευρά του διακομιστή, που δείχνουν την τοπική διεύθυνση στην οποία προσγειώθηκε η συνεδρία σας.

sqlcmd -S tcp:10.80.0.15,1433 -Q "SELECT local_net_address, local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID"

Συγκρίνετε αυτή τη διεύθυνση με τον listener που ρυθμίσατε. Μια αναντιστοιχία σημαίνει δεύτερο listener ή ένα όνομα που επιλύεται κάπου απρόσμενα, και τα δύο αξίζει να τα ξέρετε πριν η επόμενη επανεκκίνηση δοκιμάσει τη διόρθωσή σας για εσάς. Στη συνέχεια επανεκκινήστε τον host χωρίς συνδεδεμένο χρήστη και επιβεβαιώστε ότι η δέσμευση πετυχαίνει. Αυτή η μία δοκιμή είναι η διαφορά ανάμεσα σε διορθωμένο listener και σε μια προσωρινή λύση που αποτυγχάνει την επόμενη νύχτα ενημερώσεων.

Σχετικά άρθρα