Как уменьшить размер файла журнала SQL Server
Я не могу понять, как уменьшить размер файла базы данных.
DBA говорит, что я должен использовать backup log dbname with truncate_only
И хотя это выглядит так, как будто оно выполняется правильно в SQL Query Analyzer, размер файла ldf по-прежнему превышает 2 ГБ.
** Разъяснение, основанное на некоторых комментариях и некоторых ответах ниже. *** Конкретная рассматриваемая база данных - это база данных на моем ноутбуке, и я использую ее только для процессов разработки. Файл журнала увеличивался до такой степени, что считалось, что он создает полный диск. Там нет никакого производственного риска. Я понимаю, что метод в вопросе, который я задал, и ответ, который я принял, рискованны в производственной среде. *
3 ответа
О, ужас! Пожалуйста, перестаньте говорить людям, что они должны сжать свои файлы журнала!
Если вы попали в эту ситуацию, то очень вероятен один из следующих случаев:
- Ваша база данных находится в режиме полного восстановления, и она действительно должна быть в простом режиме
- Ваша база данных находится в режиме полного восстановления, и вы должны регулярно делать резервные копии журналов.
- Ваша база данных находится в режиме полного восстановления, а резервные копии журналов по какой-то причине терпят неудачу
- Вы выполняете огромные транзакции, которые увеличивают размер файла журнала
Ответ на каждый из них следующий:
Если (1), то переключите базу данных в простой режим
Если (2), то запланируйте регулярное резервное копирование журнала
Если (3), то исправьте запланированные резервные копии журнала
Если (4), то просто не делайте этого:) Вместо этого, работайте небольшими партиями.
Обратите внимание, что ни один из них не требует использования (не рекомендуется) "резервное имя журнала базы данных с truncate_only"
Вместо этого, как только вы очистите файл журнала, используя один из вышеперечисленных методов, затем сожмите (теперь пустой) журнал с помощью:
DBCC SHRINKFILE ('log logical name', 2000)
Всегда указывайте разумный конечный размер, иначе он уменьшится почти до 0, и в следующий раз, когда он понадобится, потребуется время, чтобы вырасти.
После выполнения "резервного копирования с truncate_only" вы должны выполнить следующую команду, чтобы уменьшить
dbcc SHRINKFILE (logfilename,shrink_tosize)
например
dbcc SHRINKFILE (mydatabase_Log,512)
Сценарий, который вы написали выше, помечает содержимое журнала для повторного использования. Следуйте этому сценарию с:
USE <database>;
DBCC SHRINKFILE (<log logical file name>)
Это сократит это для вас.