В SQL Server (в данном случае 2008), как я могу быстро сжать все файлы, как журнал, так и данные, для всех баз данных в экземпляре? Я мог бы пройти через SSMS и щелкнуть правой кнопкой мыши по каждой из них и выбрать Задачи -> Сократить, но я ищу что-то быстрее.
Я написал несколько сценариев «Создать базу данных» и забыл, что для значений по умолчанию они имеют раздуваемые размеры, и мне не нужно много места для этих файлов в этом проекте.
источник
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Но полагая , что из дал мне новую проблему. Off, чтобы опубликовать еще один вопрос.Как насчет одной строки оператора SQL?
Пожалуйста, прочитайте это очень интересное сообщение в блоге перед выполнением следующего SQL-заявления.
источник
DBCC SHRINKDB (и его двоюродный брат SHRINKFILE) работают крайне медленно, потому что в этом коде выполняется много однопоточных операций.
Более быстрый способ сжать файл базы данных:
sp_spaceused
чтобы определить, насколько большой)Поскольку перестройки индекса в основном параллельны, этот метод часто приводит к гораздо более быстрому сокращению базы данных. Конечно, это требует, чтобы у вас было немного дополнительного пространства для новой файловой группы, пока идет процесс. Однако вам нужно только достаточно места в новой файловой группе для хранения самой большой файловой группы в экземпляре (так как вы будете освобождать пространство по мере продвижения).
Этот метод также имеет дополнительное преимущество дефрагментации ваших индексов в процессе.
источник
Я немного настроил запрос, чтобы сжать только журнал, как он запрашивается:
источник
Приведенный ниже код, получить список несистемных баз данных, установить базу данных только для чтения и затем сжать файл. Я сохранил этот код в нескольких полях SQL Server, используя задание агента SQL, где пространство всегда является проблемой. Каждую неделю в субботу / субботу он запускается и сокращает все базы данных в течение нескольких часов (в зависимости от размера баз данных).
источник
Сократите все файлы журнала, кроме master, model, msdb:
источник
Этот расширяет ответ выше, используя курсор для перебора операторов SQL один за другим. Он не такой короткий, как ответ Эмры, но допускает дополнительную логику в цикле while внутри курсора.
источник
Мы можем повторить
SHRINKDB
иSHRINKFILE
для всех баз данных динамически:Вы можете найти подробности в этой статье .
источник