الأعراض
افترض ان لديك جدول يحتوي علي عمود كبير الحجم (LOB) في Microsoft SQL Server 2008 أو SQL Server 2008 R2 أو SQL Server 2012 أو SQL Server 2014. عند تحديث عمود LOB بحجم أصغر لبيانات LOB ومحاولة استرداد المساحة غير المستخدمة باستخدام الطرق التالية:
-
DBCC شرينكداتاباسي/DBCC شرينكفيلي
-
تعديل أعاده تنظيم الفهرس باستخدام (LOB_COMPACTION = تشغيل)
في هذه الحالة ، لا يمكن استرداد المساحة غير المستخدمة.
الحل
تم تصحيح المشكلة أولا في التحديث التراكمي التالي ل SQL Server.
تحديث تراكمي 2 ل SQL Server 2012 SP2 /en-us/help/2983175
تحديث تراكمي 11 ل SQL Server 2012 SP1 /en-us/help/2975396
تحديث تراكمي 13 for SQL Server 2008 R2 SP2 /en-us/help/2967540
تحديث تراكمي 2 ل SQL Server 2014 /en-us/help/2967546
تحديث تراكمي 17 for SQL Server 2008 SP3 /en-us/help/2958696
يحتوي كل تحديث تراكمي جديد ل SQL Server علي كل الإصلاحات العاجلة وكل تصحيحات الأمان التي تم تضمينها في التحديث التراكمي السابق. اطلع علي آخر التحديثات التراكمية ل SQL Server:
الحل البديل
لحل هذه المشكلة ، استخدم الحلول البديلة التالية:
-
تصدير كل الصفوف إلى جدول جديد ونقل الصفوف إلى الخلف. هذا ريورجانيزيس بيانات LOB ويطرح المساحة غير المستخدمة.
-
استخدام شرينكفيلي DBCC مع خيار امبتيفيلي لنقل كل البيانات إلى ملف البيانات الذي تمت اضافته حديثا ثم أزاله ملف البيانات القديم. هذا ريورجانيزيس بيانات LOB هناك عن طريق تحرير المساحة غير المستخدمة.
مزيد من المعلومات
يوضح المثال التالي المساحة غير المستخدمة باستخدام الأمر تسقل sp_spaceused ' table_name ' قبل وبعد تحديث عمود lob بحجم أصغر لبيانات LOB: قبل التحديث:
اسم |
أعمده |
احتفاظ |
بيانات |
index_size |
موضعي |
table_name |
1000 |
261072 كيلوبايت |
261056 كيلوبايت |
16 كيلوبايت |
0 كيلوبايت |
بعد التحديث:
اسم |
أعمده |
احتفاظ |
بيانات |
index_size |
موضعي |
table_name |
1000 |
261072 كيلوبايت |
199672 كيلوبايت |
16 كيلوبايت |
61384 ] |
الحالة
أقرت Microsoft أن هذه المشكلة تحدث في منتجات Microsoft المسردة في المقطع "تنطبق على".