Συμπτώματα
Εξετάστε το ακόλουθο σενάριο:
-
Έχετε μια βάση δεδομένων που έχει τις επιλογές ALLOW_SNAPSHOT_ISOLATION και READ_COMMITTED_SNAPSHOT ενεργοποιημένες στον Microsoft SQL Server 2008 R2.
-
Μπορείτε να εκτελέσετε μια πρόταση Select που περιέχει τις υποδείξεις TABLOCK και UPDLOCK σε έναν πίνακα στη βάση δεδομένων.
-
Η πρόταση Select αναδιπλώνεται σε μια ρητή εκκίνηση του TRAN, αλλά η δέσμευση TRAN δεν εκτελείται.
-
Δύο ακόμη από τα ίδια ερωτήματα που έχουν ξεκινήσει με τις ίδιες υποδείξεις ερωτήματος βρίσκονται στη ρητή συναλλαγή.
Σε αυτό το σενάριο, όταν το πρώτο ερώτημα έχει δεσμευτεί, ένα από τα άλλα ερωτήματα θα είναι αδιέξοδο.
Αιτία
Το πρόβλημα παρουσιάζεται επειδή ο SQL Server αναφέρει εσφαλμένα το αδιέξοδο σε ένα από τα παρακάτω σενάρια:
-
Όταν τα ALLOW_SNAPSHOT_ISOLATION και τα READ_COMMITTED_SNAPSHOT είναι ενεργοποιημένα για μια βάση δεδομένων, πολλά ερωτήματα σε σχέση με την ίδια συναλλαγή μπορεί να αναφέρονται ως εσφαλμένα σε αδιέξοδο όταν ένα από αυτά έχει ολοκληρωθεί.
-
Όταν είναι ενεργοποιημένη η ALLOW_SNAPSHOT_ISOTION και χρησιμοποιούνται οι συμβουλές TABLOCK και UPDLOCK , η δεύτερη και η τρίτη πρόταση Select λαμβάνουν ΙΧ κλειδαριές με πρόθεση τη μετατροπή σε X. Τα κλειδώματα IX καταλήγουν να βρίσκονται σε αδιέξοδο όταν γίνεται μια απόπειρα μετατροπής σε X.
-
Όταν το ALLOW_SNAPSHOT_ISOLATION είναι απενεργοποιημένο, το δεύτερο και το τρίτο ερώτημα θα αποκτήσουν έξι κλειδαριές. Σε αυτήν την περίπτωση, όταν το SIX Lock μετατρέπεται σε X, είναι απλώς ένα σενάριο αποκλεισμού και όχι αδιέξοδο.
Επίλυση
Το πρόβλημα διορθώθηκε για πρώτη φορά με την ακόλουθη αθροιστική ενημέρωση του SQL Server. Μετά την εφαρμογή της επείγουσας επιδιόρθωσης, ο SQL Server επιλύει το πρόβλημα πραγματοποιώντας εγγραφή εάν παρουσιαστεί μια υπόδειξη δέσμευσης ανάγνωσης ή μια υπόδειξη κλειδώματος για τη βάση δεδομένων και το ερώτημα. Αυτές οι πληροφορίες χρησιμοποιούνται για την επιλογή του σωστού τύπου κλειδωμάτων για τη σωστή διαχείριση της κατάστασης, αντί για εσφαλμένη αναφορά σε αδιέξοδο.
Αθροιστική ενημερωμένη έκδοση 11 για SQL Server 2008 R2 SP2 /en-us/help/2926028
Κάθε νέα αθροιστική ενημέρωση για τον SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη αθροιστική ενημέρωση. Ανάληψη ελέγχου των πιο πρόσφατων αθροιστικών ενημερώσεων για τον SQL Server:
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "ισχύει για".