Μακρά εργασία SQL: κρατήστε την σε λειτουργία όταν πέφτει το VPN
Μια διακοπή VPN αφήνει ένα ερώτημα που το σφάλμα του πελάτη δεν μπορεί να απαντήσει: δεσμεύτηκε η εργασία; Αναθέστε τις μακρές εργασίες σε διαρκή ιδιοκτήτη και συμφιλιώστε πριν δοκιμάσετε ξανά.
Το VPN πέφτει είκοσι λεπτά μετά την έναρξη μιας ανακατασκευής ευρετηρίου, ο πελάτης SQL δείχνει σπασμένη σύνδεση, και η προφανής ερώτηση δεν έχει απάντηση σε αυτό το σφάλμα. Τελείωσε η εντολή, ακυρώθηκε, ή συνέχισε να εκτελείται χωρίς εσάς; Η επανασύνδεση και η εκ νέου υποβολή είναι η χειρότερη από τις τρεις επιλογές, γιατί μετατρέπει ένα αβέβαιο αποτέλεσμα σε δύο πιθανά. Μεταφέρετε την εργασία σε κάτι με διαρκή ιδιοκτήτη πριν από το επόμενο παράθυρο.
Τι δεν σας λέει το σφάλμα σύνδεσης
Ένα σφάλμα στην πλευρά του πελάτη περιγράφει τον πελάτη. Αναφέρει ότι έκλεισε ο υποδοχέας, όχι τι έκανε ο διακομιστής με τη συναλλαγή. Η εντολή μπορεί να εκτελείται ακόμη, να δεσμεύτηκε λίγο πριν πεθάνει η ζεύξη, ή να ακυρώθηκε όταν καθαρίστηκε η συνεδρία της. Και οι τρεις περιπτώσεις παράγουν το ίδιο μήνυμα στο φορητό σας.
Μόνο η κατάσταση του διακομιστή μπορεί να το ξεκαθαρίσει. Κοιτάξτε εκεί πριν αποφασίσετε οτιδήποτε.
Αναθέστε την εργασία σε ιδιοκτήτη στην πλευρά του διακομιστή
Για εργασία που δεν χρειάζεται άνθρωπο να την παρακολουθεί, αφήστε τον κεντρικό υπολογιστή της βάσης δεδομένων να κατέχει την εκτέλεση. Το SQL Server Agent εκτελεί εργασίες κατά απαίτηση ή βάσει χρονοδιαγράμματος και καταγράφει κάθε εκτέλεση, ώστε ο κύκλος ζωής της εργασίας να είναι ανεξάρτητος από τη συνεδρία VPN σας. Η ταυτότητα της εργασίας χρειάζεται ακριβώς τα δικαιώματα που απαιτεί η αποστολή, όχι το πλήρες διαδραστικό πλαίσιο ενός διαχειριστή. Τότε το φορητό ξεκινά την εργασία και διαβάζει αποτελέσματα, αντί να είναι η διεργασία που την κρατά ζωντανή.
EXEC msdb.dbo.sp_start_job @job_name = N'nightly-customer-reindex';Η διαθεσιμότητα του Agent εξαρτάται από την έκδοση και την υπηρεσία που αναπτύξατε. Χρησιμοποιήστε τον μηχανισμό που παρέχει πραγματικά η πλατφόρμα σας αντί να υποθέτετε ότι αυτός υπάρχει παντού.
Ένας ενδιάμεσος διακομιστής κοντά στη βάση δεδομένων συντομεύει τη διαδρομή και αξίζει να υπάρχει, αλλά δεν αλλάζει το ζήτημα της ιδιοκτησίας. Η συνεδρία τελειώνει ακόμη όταν τελειώσει το δίκτυο. Χρησιμοποιήστε τον για παρατήρηση, όχι για να είναι αυτό που κρατά την εργασία ζωντανή.
Αφήστε μια εγγραφή που μπορεί να διαβάσει η επόμενη συνεδρία
Καταγράψτε ένα όνομα εργασίας ή αναγνωριστικό, τη βάση δεδομένων προορισμού και το αποτέλεσμα που περιμένετε. Αυτή η εγγραφή είναι που επιτρέπει σε μια άλλη συνεδρία, ή σε ένα άλλο άτομο, να απαντήσει την ερώτηση που δεν μπόρεσε το σφάλμα. Χωρίς αυτήν, μένει μια αόριστη ανάμνηση μιας ενημέρωσης και κανένας τρόπος να ελέγξετε.
EXEC msdb.dbo.sp_help_jobhistory @job_name = N'nightly-customer-reindex';Το ιστορικό δείχνει αποτέλεσμα και χρονισμό ανά βήμα, κάτι πιο χρήσιμο από μια μεμονωμένη σημαία επιτυχίας. Για εργασίες που αλλάζουν δεδομένα, προσθέστε και την επαλήθευση της ίδιας της εφαρμογής: πλήθος γραμμών, άθροισμα ελέγχου ή γραμμή κατάστασης που γράφει η εργασία. Δύο ανεξάρτητες εγγραφές κάνουν μια επανάληψη ασφαλή, και το καταγεγραμμένο ιστορικό εργασιών είναι το πρώτο από αυτά.
Συμφιλιώστε πριν υποβάλετε ξανά
Όταν η σύνδεση παρατήρησης εξαφανιστεί, βρείτε την υπάρχουσα εκτέλεση πριν ξεκινήσετε άλλη. Διαβάστε τα αποτελέσματα των βημάτων της και αποφασίστε αν η εργασία δεσμεύτηκε, ολοκληρώθηκε μερικώς ή δεν ξεκίνησε ποτέ. Μόνο τότε εφαρμόστε τον κανόνα επανάληψης που ορίζει η ροή εργασίας, γιατί μια τυφλή εκ νέου υποβολή μπορεί να διπλασιάσει μια φόρτωση ή να αποτύχει στα μισά για δεύτερη φορά.
Κρατήστε τον διαρκή ιδιοκτήτη και το επιθεωρήσιμο αποτέλεσμα, και μια σύντομη αποτυχία πρόσβασης γίνεται ενόχληση αντί για εικασία. Αυτός είναι όλος ο σχεδιαστικός στόχος: η εργασία πρέπει να ζήσει περισσότερο από τη σύνδεση που τη ζήτησε.