Деякі початкові застереження:
- Як правило, найгірша практика коли-небудь скорочувати виробничу базу даних або файл даних (файли журналів - це ще одна проблема, про яку йдеться у цьому питанні ). Я раджу людям не зменшувати свої бази даних у публікаціях блогу, як це, де я говорю про "правильний розмір" та гарне планування. Я не один там ( Пол Рандал , Брент Озар , лише щоб надати ще пару посилань). Зменшення індексів файлу даних або фрагментів бази даних є повільним та трудомістким на ваших ресурсах, може спричинити злиття вашої системи і, як правило, погано робити.
- У цьому випадку ми всі знаємо, що існує ризик, ми готові з цим боротися, але ми звільнили багато місця, яке ми знаємо, що більше ніколи не будемо потребувати. Отже, у цьому конкретному випадку - зменшення має багато сенсу як один із наших варіантів.
Якщо ви читали про занепокоєння та ризики, і вам все-таки потрібно зробити це зменшення, оскільки ви звільнили значну кількість місця, сподіваємось, решта цієї відповіді допоможе вам допомогти. Але врахуйте ризики.
Тут розглядаються два основні підходи:
1.) Термозбіжний Так, зробіть фактичну усадку - Розгляньте можливість використання DBCC SHRINKFILE
замість DBCC SHRINKDATABASE
, ви маєте більше контролю над тим, що отримує усадку і як. Це точно призведе до деякої погіршення продуктивності - це велика операція, яка робить багато IO. Ви можете потенційно піти від повторних скорочень до цільового розміру, який стає прогресивно меншим.
Це приклад "А.)" у наведеному вище DBCC SHRINKFILE
посиланні. У цьому прикладі файл даних скорочується до цільового розміру 7 Мб. Цей формат - хороший спосіб скорочуватися неодноразово, оскільки дозволяє вікно простою. Я б зробив це при тестуванні на розробку, щоб побачити, як виглядає продуктивність і наскільки низький / високий ви можете збільшити приріст і визначити очікувані терміни виробництва. Це операція в Інтернеті - ви можете запустити її з користувачами в системі, що отримує доступ до скороченої бази даних, але деградація роботи буде майже гарантована. Тому стежте і спостерігайте за тим, що ви робите з сервером, вибирайте вікно простою або період легшої активності, в ідеалі.
USE YourDatabase;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Завжди пам’ятайте: - кожен раз, коли ви стискаєте, ви фрагментуєте ваші індекси, і вам слід робити перебудову індексу, якщо ви збираєтеся скорочувати шматки протягом тривалого періоду часу. Тепер ви несете цю ціну щоразу, якщо не зможете зробити це все в одному вікні.
2.) Нова база даних - Ви можете створити нову базу даних та перемістити дані до неї. Вам доведеться скриптувати порожню базу даних і всі її ключі, індекси, об'єкти, програми, функції тощо, а потім перемістити дані до неї. Ви можете написати сценарії для цього або скористатися таким інструментом, як SQL Data Порівняння від Red Gate або інших постачальників з подібними інструментами. Це більше налаштування на вашій стороні, більше розробки та тестування, і залежно від вашого оточення також може підірвати ваше вікно простою, але також можливість розглянути.
Коли я змушений скорочувати базу даних,
якби це моє середовище, я б хотів залишити у файлі даних неабиякий / здоровенний пробіл, тому що мені подобається бути дисковим свиням і люблю бути готовим до майбутнього / несподіваного зростання. Так що я б добре давання простір назад , якщо ми просто видалили більшу частину простору, але я б ніколи не довіряти тим , кажучи «але він ніколи не буде знову рости» і залишити деякий порожній простір. Маршрут, напевно, я б пішов ( зітхаючи) - це зменшення підходу, якщо б у мене були менші вільні простої та не хотілося виникати складності створення порожнього БД та міграції даних до нього. Тож я б зменшував її поступово (залежно від того, скільки разів я вважав, що потрібно на основі мого тестування на розробці та потрібного розміру. Поступово вибираючи менший розмір файлу), а потім відновлюйте індекси .. І тоді я ' я ніколи не скажу нікому, що я скоротив свою базу даних ;-)