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

Мне нужно очистить файл LDF перед отправкой коллеге. Как заставить SQL Server усекать журнал?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
201
0
506 416
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

В студии менеджмента:

  • Не делайте этого в реальной среде, но чтобы убедиться, что вы максимально сократите свой dev db:
    • Щелкните базу данных правой кнопкой мыши, выберите 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

Ваш ответ только что спас мне день! Я не знал о параметре «Щелкните правой кнопкой мыши - Задачи -> Сжать». Спасибо!

René 20.04.2011 17:51

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

John Bubriski 26.08.2013 20:19

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

Blorgbeard 27.08.2013 02:53

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

defines 22.08.2014 20:07

в SQL Server 2012 мне пришлось use mydatabase перед запуском dbcc shrinkfile

knb 26.09.2016 11:52

Примечание. Файл журнала обычно называется DatabaseName_log, но может отличаться. Вы можете найти имя файла для текущей базы данных с помощью SELECT name FROM sys.master_files WHERE database_id = db_id() AND type = 1

Simon_Weaver 21.11.2018 05:12

Также 1 в команде сжатия относится к предполагаемому размеру журнала после сжатия. По умолчанию используется исходный размер файла журнала, поэтому некоторые ответы на этот вопрос имеют значение, а некоторые - нет. docs.microsoft.com/en-us/sql/t-sql/database-console-commands‌ /…

Simon_Weaver 21.11.2018 05:17

Я видел, что скрипт работает быстрее, чем параметр «Задачи -> Сжать -> Файлы». Размер БД в основном составляет 200+ ГБ. Если я использую графический интерфейс, каждый раз это занимает более 15 минут. Но скрипту на это требуется не более 10 секунд. Есть идеи, почему графический интерфейс требует времени?

Rohith 25.11.2019 19:00

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

Ответ принят как подходящий

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

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

Это определенно лучше, чем установка модели восстановления базы данных на ПРОСТОЙ (как в ответе Blorgbeard), потому что, если ваша модель восстановления ПОЛНАЯ, у вас есть такая установка по какой-то причине.

Scott Whitlock 19.10.2010 21:13

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

Justin Moore 16.12.2010 01:14

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

net_prog 26.04.2013 12:32

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

Aaron Newton 30.11.2016 08:39

TRUNCATE_ONLY не является опцией BACKUP. (SQL Server 2019 RC1)

Tomasz Gandor 18.11.2019 01:03

Для SQL Server 2008 команда:

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

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

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

James Law 19.11.2011 18:46

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

Christian Navelot 05.10.2015 14:13

Не забудьте изменить модель восстановления обратно на ПОЛНУЮ, когда закончите!

Dan Bechard 14.07.2016 23:10

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

Simon_Weaver 21.11.2018 05:23

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

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

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

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

TomXP411 23.09.2014 21:39

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

Simon_Weaver 21.11.2018 05:03

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

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

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

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

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

Paul 08.04.2014 12:33

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

Stan Shaw 06.10.2015 15:00

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

Gerard ONeill 13.11.2015 00:42

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

Brian 24.07.2017 19:36

Я согласен; это не лучшая практика, но это ценный инструмент, если у вас нет других вариантов, таких как сценарий Брайана.

ScottFoster1000 13.02.2018 07:43

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

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)
stackoverflow.com/a/7361576/225906
techie007 10.12.2020 20:08

Другие вопросы по теме