Συμπτώματα
Ας υποθέσουμε ότι έχετε έναν πίνακα που περιέχει μια στήλη μεγάλου αντικειμένου (LOB) στο Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 ή SQL Server 2014. Όταν ενημερώνετε τη στήλη LOB με μικρότερο μέγεθος δεδομένων LOB και προσπαθείτε να ανακτήσετε το χώρο που δεν χρησιμοποιείται χρησιμοποιώντας τις ακόλουθες μεθόδους:
- DBCC SHRINKDATABASE / DBCC SHRINKFILE
- ALTER INDEX REORGANIZE WITH (LOB_COMPACTION = ON)
Σε αυτήν την περίπτωση, ο αχρησιμοποίητος χώρος δεν μπορεί να ανακτηθεί.
Επίλυση
Το πρόβλημα διορθώθηκε για πρώτη φορά στην ακόλουθη αθροιστική ενημερωμένη έκδοση του SQL Server.
Αθροιστική ενημερωμένη έκδοση 2 για SQL Server 2012 SP2 /el-gr/help/2983175
Αθροιστική ενημερωμένη έκδοση 11 για SQL Server 2012 SP1 /el-gr/help/2975396
Αθροιστική ενημερωμένη έκδοση 13 για SQL Server 2008 R2 SP2 /el-gr/help/2967540
Αθροιστική ενημέρωση 2 για το SQL Server 2014 /el-gr/help/2967546
Αθροιστική ενημερωμένη έκδοση 17 για SQL Server 2008 SP3 /el-gr/help/2958696
Πληροφορίες σχετικά με τις αθροιστικές ενημερώσεις για SQL Server
Κάθε νέα αθροιστική ενημερωμένη έκδοση για SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με την προηγούμενη αθροιστική ενημερωμένη έκδοση. Δείτε τις πιο πρόσφατες αθροιστικές ενημερώσεις για SQL Server:
- Τελευταία αθροιστική ενημερωμένη έκδοση για το SQL Server 2012 SP2
- Τελευταία αθροιστική ενημερωμένη έκδοση για το SQL Server 2012 SP1
- Τελευταία αθροιστική ενημέρωση για το SQL Server 2008 R2 SP2
- Τελευταία αθροιστική ενημερωμένη έκδοση για το SQL Server 2014
- Τελευταία αθροιστική ενημερωμένη έκδοση για το SQL Server 2008 SP3
Λύση
Για να επιλύσετε αυτό το πρόβλημα, χρησιμοποιήστε τις ακόλουθες λύσεις:
- Εξαγωγή όλων των γραμμών σε νέο πίνακα και μετακίνηση των γραμμών προς τα πίσω. Αυτό αναδιοργανώνει τα δεδομένα 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 που παρατίθενται στην ενότητα "Ισχύει για".