Назад | Перейти на главную страницу

Как уменьшить размер файла журнала SQL Server

Я не могу понять, как уменьшить размер файла ldf базы данных.

Администратор базы данных говорит, что я должен использовать backup log dbname with truncate_only

И хотя похоже, что в SQL Query Analyzer он выполняется правильно, размер файла ldf по-прежнему превышает 2 ГБ.

** Пояснения на основе некоторых комментариев и некоторых ответов ниже. *** Конкретная рассматриваемая база данных - это база данных, которая находится на моем ноутбуке, и я использую ее только для процессов разработки. Файл журнала увеличивался до точки, в которой предполагалось заполнить диск. Производственный риск отсутствует. Я понимаю, что метод в заданном мною вопросе и принятый мною ответ являются рискованными в производственной среде *.

О ужас! Пожалуйста, перестаньте говорить людям, что им следует сжимать файлы журналов!

Если вы сами попали в такую ​​ситуацию, то весьма вероятен один из следующих случаев:

  1. Ваша база данных находится в режиме полного восстановления, и она действительно должна быть в простом режиме
  2. Ваша база данных находится в режиме полного восстановления, и вы должны регулярно делать резервные копии журналов.
  3. Ваша база данных находится в режиме полного восстановления, а резервные копии журналов по какой-то причине не работают.
  4. Вы выполняете огромные транзакции, которые увеличивают размер файла журнала до огромных размеров.

Ответ на каждый из них следующий:

Если (1), то перевести базу данных в простой режим
Если (2), то запланировать регулярное резервное копирование журнала.
Если (3), то исправьте запланированное резервное копирование журнала.
Если (4), то просто не делайте этого :) Вместо этого работайте небольшими партиями.

Обратите внимание, что НИ ОДИН из них не требует использования (устаревшего) «резервного журнала dbname with truncate_only»

Вместо этого, как только вы это сделаете Чисто файл журнала, используя один из описанных выше методов, затем сожмите (теперь пустой) журнал с помощью:

DBCC SHRINKFILE ('log logical name', 2000)

Всегда указывайте разумный конечный размер, иначе он сократится почти до нуля, и в следующий раз, когда он понадобится, потребуется время, чтобы вырасти.

после выполнения «резервного копирования с помощью truncate_only» вы должны выполнить следующую команду для сжатия

dbcc SHRINKFILE (logfilename,shrink_tosize)

например

dbcc SHRINKFILE (mydatabase_Log,512)

Сценарий, который вы написали выше, пометит содержимое журнала для повторного использования. Следуйте этому сценарию с помощью:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Это уменьшит его для вас.