Συμπτώματα
Ας υποθέσουμε ότι έχετε έναν πίνακα που περιέχει μια στήλη μεγάλο αντικείμενο (LOB) στον Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 ή SQL Server 2014. Όταν ενημερώνετε τη στήλη LOB με μικρότερο μέγεθος δεδομένων LOB και προσπαθείτε να ανακτήσετε το χώρο που δεν χρησιμοποιείται, χρησιμοποιώντας τις ακόλουθες μεθόδους:
-
DBCC SHRINKDATABASE/DBCC SHRINKFILE
-
ΑΛΛΑΓΉ ΑΝΑΔΙΟΡΓΆΝΩΣΗς ΕΥΡΕΤΗΡΊΟΥ ΜΕ (LOB_COMPACTION = ON)
Σε αυτήν την περίπτωση, δεν είναι δυνατή η ανάκτηση του χώρου που δεν χρησιμοποιείται.
Επίλυση
Το πρόβλημα διορθώθηκε για πρώτη φορά με την ακόλουθη αθροιστική ενημέρωση του SQL Server.
Αθροιστική ενημερωμένη έκδοση 2 για τον SQL Server 2012 SP2 /en-us/help/2983175
Αθροιστική ενημερωμένη έκδοση 11 για τον SQL Server 2012 SP1 /en-us/help/2975396
Αθροιστική ενημερωμένη έκδοση 13 για SQL Server 2008 R2 SP2 /en-us/help/2967540
Αθροιστική ενημερωμένη έκδοση 2 για τον SQL Server 2014 /en-us/help/2967546
Αθροιστική ενημέρωση 17 για τον SQL Server 2008 SP3 /en-us/help/2958696
Κάθε νέα αθροιστική ενημέρωση για τον SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη αθροιστική ενημέρωση. Ανάληψη ελέγχου των πιο πρόσφατων αθροιστικών ενημερώσεων για τον SQL Server:
Λύση
Για να επιλύσετε αυτό το ζήτημα, χρησιμοποιήστε τις παρακάτω λύσεις:
-
Εξαγάγετε όλες τις γραμμές σε έναν νέο πίνακα και μετακινήστε τις γραμμές προς τα πίσω. Αυτή η ενέργεια αναδιοργανώνει τα δεδομένα LOB και απελευθερώνει το χώρο που δεν χρησιμοποιείται.
-
Χρησιμοποιήστε την επιλογή DBCC SHRINKFILE με EMPTYFILE για να μετακινήσετε όλα τα δεδομένα σε ένα αρχείο δεδομένων που μόλις προσθέσατε και, στη συνέχεια, καταργήστε το παλιό αρχείο δεδομένων. Αυτή η ενέργεια αναδιοργανώνει τα δεδομένα LOB εκεί, απελευθερώνοντας το χώρο που δεν χρησιμοποιείται.
Περισσότερες πληροφορίες
Το παρακάτω παράδειγμα εμφανίζει το χώρο που δεν χρησιμοποιείται, χρησιμοποιώντας την εντολή TSQL sp_spaceused ' TABLE_NAME ' πριν και μετά την ενημέρωση της στήλης LOB με μικρότερο ΜΈΓΕΘΟς δεδομένων LOB: πριν από την ενημέρωση:
Όνομα |
γραμμές |
επιφύλαξη |
δεδομένων |
index_size |
αχρησιμοποίητα |
table_name |
1000 |
261072 KB |
261056 KB |
16 KB |
0 KB |
Μετά την ενημέρωση:
Όνομα |
γραμμές |
επιφύλαξη |
δεδομένων |
index_size |
αχρησιμοποίητα |
table_name |
1000 |
261072 KB |
199672 KB |
16 KB |
61384 KB |
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "ισχύει για".