Συμπτώματα
Ας υποθέσουμε ότι χρησιμοποιείτε Microsoft SQL Server 2012 ή SQL Server 2014. Όταν εκτελείτε συντηρητή απομακρυσμένης αποθήκευσης αντικειμένων BLOB (RBS), το εργαλείο συντηρητή RBS αποτυγχάνει και λαμβάνετε το ακόλουθο μήνυμα λάθους:
Σημείωση
Εκκίνηση εργασιών Συντηρητή.
Εκκίνηση συλλογής απορριμμάτων.
Έναρξη σάρωσης αναφοράς.
Αναφορά: Η σάρωση ολοκληρώθηκε για αυτήν τη βάση δεδομένων.
Σαρώθηκαν 113 σταγόνες. Διαγράφηκαν 0 σταγόνες στην περιοχή από 0x000000000000000000000000(εκτός αυτού) έως και 0x00000000000000b600000002(συμπεριλαμβανομένων).
Αυτή η εργασία έχει τερματιστεί. Υποβλήθηκαν σε επεξεργασία 1 μονάδα εργασίας συνολικά. 0 Οι μονάδες εργασίας ήταν ελλιπείς.
Έναρξη μετάδοσης διαγραφής.
Δεν υπάρχει διαθέσιμο έργο αυτήν τη στιγμή.
Άλλοι υπολογιστές-πελάτες, διαδικασίες ή νήματα ενδέχεται να εργάζονται αυτήν τη στιγμή σε άλλες εργασίες.
Παράλειψη της τρέχουσας μονάδας εργασίας λόγω σφάλματος. Για περισσότερες πληροφορίες, ανατρέξτε στο αρχείο καταγραφής συντηρητή RBS.
[..]
Αυτή η εργασία έχει τερματιστεί. Υποβλήθηκαν σε επεξεργασία 102 μονάδες εργασίας συνολικά. 101 μονάδες εργασίας ήταν ελλιπείς. Απαιτείται για τη διαγραφή 0 blobs. Κατάφερε να διαγράψει 0 blobs, 0 blobs δεν βρέθηκαν στο χώρο αποθήκευσης blob.
Αυτή η εργασία έχει τερματιστεί.
Αυτή η εργασία έχει τερματιστεί.
Όταν χρησιμοποιείτε το Profiler για την ανίχνευση του προβλήματος, λαμβάνετε το ακόλουθο μήνυμα λάθους:
Σημείωση
Msg 50000, Επίπεδο 16, Κατάσταση 0, Διαδικασία rbs_sp_rethrow_error, Γραμμή 38
Σφάλμα RBS. Αρχικό σφάλμα: Αριθμός 535, Επίπεδο σοβαρότητας 16, Κατάσταση 0, Διαδικασία rbs_sp_count, Γραμμή 52,
Μήνυμα: Η συνάρτηση datediff οδήγησε σε υπερχείλιση. Ο αριθμός των τμημάτων ημερομηνίας που χωρίζουν δύο εμφανίσεις ημερομηνίας/ώρας είναι πολύ μεγάλος. Δοκιμάστε να χρησιμοποιήσετε τη συνάρτηση datediff με ένα λιγότερο ακριβές τμήμα ημερομηνίας.
Αιτία
Αυτό το ζήτημα παρουσιάζεται επειδή ένα ερώτημα που ελέγχει το χρόνο από την τελευταία εκτέλεση μπορεί να υπερχειλίσει όταν μετατρέπει μια τιμή σε χιλιοστά του δευτερολέπτου. Αυτό έχει ως αποτέλεσμα την αποτυχία του ερωτήματος και τον τερματισμό της εργασίας χωρίς επεξεργασία των δεδομένων.
Επίλυση
Η επιδιόρθωση για αυτό το πρόβλημα είναι διαθέσιμη στο τελευταίο πακέτο δυνατοτήτων που κατεβάσατε για RBS.msi. Εάν έχετε ήδη μια υπάρχουσα εγκατάσταση της υπηρεσίας RBS, συνιστούμε να εκτελέσετε τη δέσμη ενεργειών που παρέχεται στην ενότητα "Εναλλακτικός τρόπος αντιμετώπισης" για να διορθώσετε προσωρινά το πρόβλημα.
Λήψη του πακέτου δυνατοτήτων του Microsoft SQL Server 2014 Service Pack 2 (SP2)
Λήψη του πακέτου δυνατοτήτων Microsoft SQL Server 2012 Service Pack 4 (SP4)
Λύση
Εάν έχετε μια υπάρχουσα εγκατάσταση της υπηρεσίας RBS στις SQL Server 2012 ή SQL Server 2014 που δεν έχει εγκατεστημένη την επιδιόρθωση, μπορείτε να χρησιμοποιήσετε τα παρακάτω βήματα επίλυσης:
Στο SSMS, ανοίξτε τη δέσμη ενεργειών από το βήμα 3 και, στη συνέχεια, συνδεθείτε με την SQL Server παρουσία που φιλοξενεί τη βάση δεδομένων προγράμματος-πελάτη RBS στην οποία θέλετε να εφαρμόσετε την ενημέρωση κώδικα.
Στη δέσμη ενεργειών, αντικαταστήστε τη συμβολοσειρά "your_RBS_client_database" με το πραγματικό όνομα της βάσης δεδομένων προγράμματος-πελάτη RBS.
Εκτελέστε τη δέσμη ενεργειών για να εφαρμόσετε την επιδιόρθωση.
χρήση [your_RBS_client_database]
μετάβασηΕάν η object_id(N'mssqlrbs_resources.rbs_sp_count') δεν είναι null
διαδικασία απόρριψης mssqlrbs_resources.rbs_sp_count
μετάβασηΔημιουργία διαδικασίας mssqlrbs_resources.rbs_sp_count (
@operation smallint,
@object smallint = 0,
@value bigint = null,
@start_time datetime = null,
@end_time datetime = null,
@description sysname = N'',
@message nvarchar(max) = null
)
ως
εκκίνησηδηλώνουν @type tinyint,
@secondsUsed κομμάτι,
@seconds αιώρησηδηλώνουν @maxDays int = 10;
εάν δεν υπάρχει (
Επιλέξτε * from mssqlrbs_resources.rbs_internal_counters
όπου operation = @operation and object = @object and description = @description
)
raiserror (N'Εσωτερικό σφάλμα στο RBS. Προσπαθήστε να καταμετρήσετε μη έγκυρο μετρητή επιδόσεων. Μετρητής: <%d>.<%δ>.<%s>.»,
16, 101, @operation, @object, @description)επιλογή
@type = τύπος,
@secondsUsed = seconds_used
από
mssqlrbs_resources.rbs_internal_counters
όπου
λειτουργία = @operation και
αντικείμενο = @object και
Περιγραφή = @descriptionεάν @object != 0
εκκίνηση
Εάν @value είναι Null
raiserror (N'Εσωτερικό σφάλμα στο RBS. Η τιμή δεν έχει καθοριστεί για τον μετρητή <επιδόσεων %d>.<%δ>.<%s>.»,
16, 103, @operation, @object, @description)
τέλοςεάν @secondsUsed = 1
εκκίνηση
Εάν (@start_time είναι null)
raiserror (N'Εσωτερικό σφάλμα στο RBS. Η ώρα έναρξης δεν έχει καθοριστεί για τον μετρητή <επιδόσεων %d>.<%δ>.<%s>.»,
16, 102, @operation, , @object@description)set @end\_time = isnull(@end_time, getutcdate())
Εάν (@start_time >@end\_time)
raiserror (N'Εσωτερικό σφάλμα στο RBS. Η ώρα έναρξης είναι μετά την ώρα λήξης. Μετρητής: <%d>.<%δ>.<%s>.»,
16, 104, @operation, @object, @description)if (datediff(day, @start\_time, @end\_time)>= @maxDays)
εκκίνηση
set @seconds = convert(float, datediff(second, @start\_time, @end\_time))
τέλος
αλλιώς,
εκκίνηση
set @seconds = convert(float, datediff(millisecond, @start\_time, @end\_time)) / 1000
τέλος
τέλοςΕνημέρωση mssqlrbs_resources.rbs_internal_counters
ορισμός
count = count + 1,
τιμή = τιμή + @value,
squared_value = squared_value + square(@value),
min_value = υπόθεση
Όταν min_value είναι null, τότε @value
Όταν (@value min_value < ) τότε @value
αλλιώς min_value
τέλος,
max_value = υπόθεση
Όταν max_value είναι null, τότε @value
Όταν (@value > max_value) τότε @value
αλλιώς max_value
τέλος,
last_value = , @value
δευτερόλεπτα = δευτερόλεπτα + @seconds,
squared_seconds = squared_seconds + square(@seconds),
min_seconds = υπόθεση
Όταν min_seconds είναι null, τότε @seconds
Όταν (@seconds min_seconds < ) τότε @seconds
αλλιώς min_seconds
τέλος,
max_seconds = υπόθεση
Όταν max_seconds είναι null, τότε @seconds
Όταν (@seconds > max_seconds) τότε @seconds
αλλιώς max_seconds
τέλος,
last_seconds = @seconds,
last_update_time = getutcdate(),
last_message = @message
όπου
λειτουργία = @operation και
αντικείμενο = @object και
Περιγραφή = @descriptionτέλος
μετάβαση
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα που αφορά τα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".