Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Συμπτώματα

Ας υποθέσουμε ότι δημιουργείτε μια ομάδα διαθεσιμότητας χρησιμοποιώντας τον όρο WITH DTC_SUPPORT = PER_DB στο Microsoft SQL Server. Όταν προσπαθείτε να εκτελέσετε μια πρόταση SAVE TRANSACTION σε μια συναλλαγή ή σε αποθηκευμένες διαδικασίες συστήματος, όπως sp_executesql, λαμβάνετε ένα από τα ακόλουθα μηνύματα σφάλματος:

Msg 627, Επίπεδο 16, Νομός 0, Αριθμός γραμμής
Δεν είναι δυνατή η χρήση της συνάρτησης SAVE TRANSACTION μέσα σε μια κατανεμημένη συναλλαγή.
Msg 12324, Επίπεδο 16, Πολιτεία 100, Αριθμός γραμμής
Οι κατανεμημένες συναλλαγές (DTC) δεν υποστηρίζονται με βελτιστοποιημένους πίνακες μνήμης.
Σφάλμα: 3933, Σοβαρότητα: 16, Κατάσταση: 1.
Δεν είναι δυνατή η προώθηση της συναλλαγής σε κατανεμημένη συναλλαγή, επειδή υπάρχει ενεργό σημείο αποθήκευσης σε αυτήν τη συναλλαγή.

Αιτία

Όταν μια βάση δεδομένων στην ομάδα διαθεσιμότητας Always On είναι ενεργοποιημένη για with DTC_SUPPORT = PER_DB, εφόσον μια συναλλαγή περιλαμβάνει πολλές βάσεις δεδομένων, η συναλλαγή προωθείται σε συναλλαγή MSDTC στο SQL Server 2016 SP2 και SQL Server 2017. Υπάρχουν περιορισμοί στις συναλλαγές MSDTC, για παράδειγμα, τα σημεία αποθήκευσης δεν μπορούν να χρησιμοποιηθούν, δεν είναι δυνατή η χρήση πινάκων με βελτιστοποίηση μνήμης.

Σε ορισμένες περιπτώσεις, οι συναλλαγές μεταξύ βάσεων δεδομένων γίνονται όχι επειδή οι χρήστες έχουν συναλλαγές που αφορούν δύο βάσεις δεδομένων χρηστών, αλλά επειδή οι συναλλαγές περιλαμβάνουν την τρέχουσα βάση δεδομένων και τις βάσεις δεδομένων συστήματος (κύρια, tempdb, μοντέλο, βάση δεδομένων πόρων συστήματος). Επειδή η βάση δεδομένων πόρων συστήματος είναι στην πραγματικότητα μόνο για ανάγνωση, δεν είναι απαραίτητο να προβιβάζεται σε συναλλαγή MSDTC εάν μια συναλλαγή μεταξύ βάσεων δεδομένων περιλαμβάνει βάση δεδομένων πόρων συστήματος, αλλά όχι άλλες βάσεις δεδομένων συστήματος. 

Επίλυση

Η επιδιόρθωση που παρουσιάστηκε σε αυτή την ενημέρωση KB παραλείπει την προώθηση σε συναλλαγή MSDTC εάν η βάση δεδομένων πόρων συστήματος και μια βάση δεδομένων χρηστών που αποτελεί μέρος μιας ομάδας διαθεσιμότητας που έχει ενεργοποιηθεί για PER_DB DTC συμμετέχουν σε μια συναλλαγή μεταξύ βάσεων δεδομένων εντός της ίδιας SQL Server παρουσίας.

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

  • Μια βάση δεδομένων είναι μέρος μιας ομάδας "Πάντα ενεργοποιημένη διαθεσιμότητα" ενεργοποιημένη με DTC_SUPPORT = PER_DB.

  • Μια συναλλαγή μεταξύ βάσεων δεδομένων περιλαμβάνει αυτήν τη βάση δεδομένων και τη βάση δεδομένων πόρων συστήματος στην ίδια SQL Server παρουσία.

  • Στο εσωτερικό της συναλλαγής μεταξύ βάσεων δεδομένων, χρησιμοποιείται η συνάρτηση SAVE TRANSACTION ή εμπλέκονται πίνακες με βελτιστοποίηση μνήμης.

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

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

Αυτό το πρόβλημα έχει διορθωθεί στην ακόλουθη συγκεντρωτική ενημέρωση για SQL Server:

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

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

Μπορείτε να βρείτε πρόσθετες πληροφορίες σχετικά με DTC_SUPPORT = PER_DB, πίνακες με βελτιστοποίηση μνήμης, SAVE TRANSACTION στις ακόλουθες συνδέσεις.

Οι συναλλαγές βάσης δεδομένων εντός της ίδιας παρουσίας SQL Server συνδέουν αυτό το τμήμα με https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
πίνακες βελτιστοποιημένες για μνήμη συνδέουν αυτό το τμήμα με
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsΣΎΝΔΕΣΗ SAVE TRANSACTION με https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

Κατάσταση

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

Αναφορές

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

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

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

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×