Что такое команда для усечения файла журнала SQL Server?


Ответы:


130

если я хорошо помню ... в анализаторе запросов или эквивалент:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
Это определенно лучше, чем установка модели восстановления базы данных на SIMPLE (как в ответе Blorgbeard), потому что, если ваша модель восстановления FULL, вы должны установить ее таким образом по причине.
Скотт Уитлок

53
truncate_only устарела в SQL Server 2008, поэтому вам нужно переключить БД на простое восстановление msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Джастин Мур

10
Для SQL Server 2012 это работает, но без WITH TRUNCATE_ONLY.
net_prog

4
В дополнение к тому, что сказал net_prog, для SQL Server 2012 я заменил первую строку на BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Аарон Ньютон

'TRUNCATE_ONLY' не является опознанной опцией BACKUP. (SQL Server 2019 RC1)
Томаш Гандор

305

В студии управления:

  • Не делайте этого в реальной среде, но для того, чтобы вы максимально сократили вашу базу данных:
    • Щелкните правой кнопкой мыши базу данных, выберите Properties, затем Options.
    • Убедитесь, что для параметра «Модель восстановления» установлено значение «Простой», а не «Полный»
    • Нажмите ОК
  • Снова щелкните правой кнопкой мыши базу данных, выберите Tasks-> Shrink->Files
  • Изменить тип файла на «Журнал»
  • Нажмите ОК.

В качестве альтернативы SQL для этого:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Ссылка: http://msdn.microsoft.com/en-us/library/ms189493.aspx


1
Ваш ответ только что спас мой день! Я не знал об опции «щелкнуть правой кнопкой мыши - Задачи -> Уменьшить». Спасибо!
Рене

7
Что вы делаете в живой среде? Сделайте резервную копию журналов в первую очередь?
Джон Бубриски

1
Я не администратор баз данных, но да, я верю, что резервное копирование журнала обрезает его: technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard отсутствует

2
@JohnBubriski Если вы используете модель восстановления, отличную от простой, журналы являются основой для восстановления данных или отката транзакций. Таким образом, в процессе работы вам необходимо сначала сделать резервную копию этих журналов, прежде чем вы сможете сжать файлы журналов. В противном случае не было бы реальной возможности восстановления. К сожалению, если вы находитесь в ситуации восстановления, вам придется заново загрузить все резервные копии журнала транзакций, чтобы полностью восстановить БД. Веселые времена, чтобы быть уверенным! :)
определяет

1
в SQL Server 2012 мне пришлось use mydatabaseперед выполнениемdbcc shrinkfile
knb

62

Для SQL Server 2008 команда выглядит так:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

Это уменьшило мой файл журнала 14 ГБ до 1 МБ.


5
Поскольку вопрос неоднозначен в отношении того, какая версия и принятый ответ не применимы к SQL Server 2008, этот ответ остается в силе независимо от возраста.
Джеймс Лоу

Спасибо, это помогло мне уменьшить большой файл журнала, который не реагировал с DBCC SHRINKFILE
Кристиан Навелот

6
Не забудьте поменять модель восстановления обратно на FULL, когда закончите!
Дэн Бешард

Вы должны сделать резервную копию, прежде чем делать это (или любой другой вариант усечения). Если вы выполните полное резервное копирование и отметите «Резервное копирование только» в SSMS, то журнал вам больше не нужен. (Это просто резервный момент времени).
Simon_Weaver

37

Для SQL 2008 вы можете сделать резервную копию журнала на nulустройство:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

А затем используйте DBCC SHRINKFILEдля усечения файла журнала.


2
Это единственный, который работал в моей ситуации ... Я получил ошибку при попытке использовать резервное копирование с TRUNCATE_ONLY
TomXP411

Примечание: это может занять довольно много времени, даже на SSD (он должен прочитать журнал, чтобы иметь возможность его удалить). Для файла журнала объемом 30 ГБ на умеренно работающей виртуальной машине Azure потребовалось 10 минут, чтобы сделать 40%. Обязательно переключитесь на «Сообщения» в SSMS, чтобы увидеть процент обработки.
Simon_Weaver

3

лог журнала резервного копирования с truncate_only, за которым следует команда dbcc shrinkfile


0

Так как ответ для меня был похоронен в комментариях. Для SQL Server 2012 и более поздних версий вы можете использовать следующее:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

Еще один вариант - отключить базу данных через Management Studio. Затем просто удалите файл журнала или переименуйте его и удалите позже.

Вернувшись в Management Studio, снова присоедините базу данных. В окне прикрепления удалите файл журнала из списка файлов.

БД присоединяется и создает новый пустой файл журнала. После проверки все в порядке, вы можете удалить переименованный файл журнала.

Вы, вероятно, не должны использовать это для производственных баз данных.


4
Никогда не делай этого! В журнале могут быть данные, еще не переданные в файл данных. Вы бы потеряли такие данные.
Пол

Если в своем ответе вы предупреждаете не пробовать его в производстве, его не стоит публиковать вообще.
Стэн Шоу,

9
Я не согласен с downvoters - это вариант. Администраторы просто должны понять их сценарий. Например, «незафиксированных» данных не будет, если нет открытых транзакций.
Джерард ONeill

3
Это единственное решение, которое сработало для меня. Мой диск был заполнен, и я не мог сделать резервную копию или сжать, и больше ничего, казалось, не работало. Спасибо!
Брайан

3
Я согласен; Это не лучшая практика, но это ценный инструмент, если у вас нет других вариантов, таких как сценарий Брайана.
ScottFoster1000
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.