KB4135113 - ΔΙΟΡΘΩΣΗ: Η αλλαγή της εγγραφής παρακολούθησης δεν είναι συνεπής κατά τη διάρκεια μιας ενημέρωσης σε έναν πίνακα που έχει ένα ευρετήριο συμπλέγματος ή μοναδικό στο SQL Server

Ισχύει για
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

Συμπτώματα

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

Για παράδειγμα, ας υποθέσουμε ότι μια στήλη που ονομάζεται "στήλη1" περιλαμβάνεται στο ευρετήριο με μορφή συμπλέγματος ή μοναδικών τιμών. Όταν η τιμή στήλης αλλάζει από μια μεγαλύτερη σε μια μικρότερη τιμή (όπως η αλλαγή της τιμής από 20 σε 16), ο πλαϊνός πίνακας παρακολούθησης αλλαγών λαμβάνει τη λειτουργία εισαγωγής πριν από τη λειτουργία διαγραφής. Για παράδειγμα, η λειτουργία εισαγωγής εγγραφής γραμμής αρχείου καταγραφής συναλλαγών λαμβάνεται πριν από τη λειτουργία διαγραφής γραμμής ή το "I" εισάγεται πριν από το "D".

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1116 19 I NULL NULL 5639485628
1116 20 D NULL NULL 5639485628

Όταν η τιμή στήλης αλλάξει από μια μικρότερη σε μια μεγαλύτερη τιμή (όπως η αλλαγή της τιμής από 16 σε 20), εισάγεται η τιμή "D" πριν από την τιμή "I".

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1126 32 D NULL NULL 5639485628
1126 33 I NULL NULL 5639485628

Αιτία

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

Επίλυση

Η επιδιόρθωση για αυτό το πρόβλημα περιλαμβάνεται στις ακόλουθες ενημερωμένες εκδόσεις για SQL Server:

Αθροιστική ενημερωμένη έκδοση 8 για SQL Server 2017

Αθροιστική ενημερωμένη έκδοση 9 για SQL Server 2016 Service Pack 1

Αθροιστική ενημερωμένη έκδοση 12 για SQL Server 2014 SP2

Σχετικά με τις δομές SQL Server

Κάθε νέα έκδοση για SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και τις επιδιορθώσεις ασφαλείας που υπήρχαν στην προηγούμενη δομή. Συνιστούμε να εγκαταστήσετε την πιο πρόσφατη έκδοση για SQL Server:

Τελευταία αθροιστική ενημέρωση για το SQL Server 2017

Τελευταία έκδοση για το SQL Server 2016

Τελευταία αθροιστική ενημερωμένη έκδοση για το SQL Server 2014

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα που αφορά τα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Περισσότερες πληροφορίες

Για έναν πίνακα με δυνατότητα παρακολούθησης αλλαγών, όταν πραγματοποιείται μια ενημέρωση σε μια μη κύρια στήλη που έχει οριστεί ως μοναδική, εισάγονται δύο καταχωρήσεις στον πλαϊνό πίνακα παρακολούθησης αλλαγών: Μία καταχώρηση για κάθε μία από τις ενέργειες διαίρεσης, Εισαγωγή και Διαγραφή.

Όταν η συνάρτηση CHANGETABLE καλείται για την απαρίθμηση των αλλαγών, αυτές οι καταχωρήσεις ταξινομούνται κατά τιμές πρωτεύοντος κλειδιού και, στη συνέχεια, οι λειτουργίες συναθροίζονται. Εάν η ενημέρωση εισαγάγει μια χαμηλότερη τιμή, πρώτα εκτελείται μια λειτουργία "I" στον πλαϊνό πίνακα και, στη συνέχεια, μια λειτουργία "D". Αυτό έχει ως αποτέλεσμα την επιστροφή εσφαλμένης λειτουργίας για αυτήν τη γραμμή. Αυτό συμβαίνει επειδή το "I" ακολουθούμενο, το "D" αθροίζεται ως "D".

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

Αυτό το πρόβλημα έχει διορθωθεί για μη πρωτεύουσες μοναδικές στήλες. Σε αυτήν την περίπτωση, όταν παρουσιάζεται η ενημέρωση, εισάγεται μόνο μία γραμμή έχοντας το "U" ως λειτουργία ενημέρωσης αντί για δύο καταχωρήσεις που έχουν "D" και "I".

Παραπομπές

Ενημερωθείτε σχετικά με την ορολογία που χρησιμοποιεί η Microsoft για να περιγράφει τις ενημερώσεις λογισμικού.