Реорганізовувати та зменшувати ніколи не рекомендується.
Якщо ви можете взяти програми, які базується в режимі офлайн, ви можете прискорити процес і зменшити фрагментацію індексу, видаливши всі індекси та обмеження первинного / зовнішнього ключа перед зменшенням (це означатиме, що менше даних потрібно переміщувати, як лише сторінки даних будуть перетасовані не зараз неіснуючими індексними сторінками, прискорюючи процес), а потім відтворити всі індекси та ключі.
Відтворення індексів після зменшення означає, що вони не повинні бути значно фрагментовані, а перехід їх під час скорочення означає відновлення їх не залишить багато невеликих «дірок» у розподілі сторінки у файлах, які можуть запросити фрагментацію пізніше.
Ще один варіант, якщо ви можете відключити програми в автономному режимі, - це перенести всі дані до нової бази даних тієї ж структури. Якщо процес збирання є надійним, ви повинні мати можливість швидко скласти цю порожню БД, якщо не створити її з поточної БД (відновіть резервну копію поточної, урізайте / видаліть весь вміст у таблицях та виконайте повну скорочення).
Ви все ще можете скинути всі індекси в пункт призначення та відтворити їх згодом, оскільки це може бути набагато ефективнішим при зміні великої кількості індексованих даних (100% - у цьому випадку). Щоб пришвидшити процес копіювання, надайте файл (и) даних бази даних призначення на різних фізичних накопичувачах до джерела (якщо ви не використовуєте SSD, в цьому випадку вам не потрібно піклуватися про зменшення рухів голови), ви можете перемістити їх до місця розташування джерела, коли ви закінчите.
Крім того, якщо створити пункт призначення як новий (замість того, щоб залишити копію джерела), створіть його з початковим розміром, який буде містити всі поточні дані плюс кількамісячне зростання, - це зробить копіювання даних знову трохи швидшим, оскільки вона не буде виділяти новий простір раз і знову протягом усього процесу.
Це може бути краще, ніж використання скорочення, оскільки переміщення даних у свіжу базу даних повторює заплановану дію операції скорочення, але, можливо, із значно меншою фрагментацією (що є ненавмисним наслідком реорганізації та скорочення). Стискання просто займає блоки з кінця файлу і ставить їх у перший простір ближче до початку, не докладаючи зусиль для збереження пов'язаних даних разом.
Я підозрюю, що результат також буде більш ефективним для простору, оскільки згодом, можливо, буде менше використаних сторінок. Скорочення просто перемістить використані частини, що використовуються, швидше за все переміщення даних призведе до повних сторінок, особливо якщо ви вставляєте цільове місце в порядку кластеризованого ключа / індексу таблиці (де в таблиці є один) та створюєте інші індекси після переміщення даних.
Звичайно, якщо ви взагалі не можете приймати програми в автономному режимі, єдиний варіант - просто виконати скорочення - тому, якщо вам справді потрібно повернути місце, перейдіть до цього. Залежно від ваших даних, шаблонів доступу, загального розміру робочого набору, скільки оперативної пам’яті має сервер тощо, додаткова внутрішня фрагментація може виявитися не такою істотною.
Для операцій з копіюванням добре працюватиме або SSIS, або базовий T-SQL (опція SSIS може бути менш ефективною, але потенційно простішою для обслуговування). Якщо ви створите відносини FK в кінці разом з індексами, ви можете зробити просте "для кожної таблиці, скопіювати" в будь-якому випадку. Звичайно для одноразової, скорочення + реорганізація, мабуть, теж добре, але я просто люблю лякати людей, коли вони не розглядають регулярні скорочення! (Я знаю, що люди планують їх щодня).