Как очистить журнал транзакций SQL Server? - PullRequest
536 голосов
/ 11 сентября 2008

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

Ответы [ 21 ]

5 голосов
/ 12 июня 2009

Сначала проверьте модель восстановления базы данных. По умолчанию SQL Server Express Edition создает базу данных для простого восстановления модель (если я не ошибаюсь).

Журнал резервного копирования DatabaseName With Truncate_Only:

DBCC ShrinkFile(yourLogical_LogFileName, 50)

SP_helpfile даст вам имя файла логического журнала.

См .:

Восстановление из полного журнала транзакций в базе данных SQL Server

Если ваша база данных находится в модели полного восстановления и если вы не делаете резервную копию TL, измените ее на ПРОСТОЙ.

4 голосов
/ 17 июня 2011
  1. Сделайте резервную копию файла MDB.
  2. Остановить службы SQL
  3. Переименование файла журнала
  4. Запустить услугу

(Система создаст новый файл журнала.)

Удалить или переместить переименованный файл журнала.

4 голосов
/ 14 сентября 2008

Чтобы обрезать файл журнала:

  • Резервное копирование базы данных
  • Отключите базу данных, используя Enterprise Manager или выполнив: Sp_DetachDB [DBName]
  • Удалить файл журнала транзакций. (или переименуйте файл, на всякий случай)
  • Снова подключите базу данных, используя: Sp_AttachDB [DBName]
  • Когда база данных присоединена, создается новый файл журнала транзакций.

Чтобы сжать файл журнала:

  • Резервное копирование журнала [DBName] с No_Log
  • Сократить базу данных либо:

    Использование Enterprise manager: - Щелкните правой кнопкой мыши базу данных, Все задачи, Сжать базу данных, Файлы, Выбрать файл журнала, OK.

    Использование T-SQL: - Dbcc Shrinkfile ([Log_Logical_Name])

Логическое имя файла журнала можно найти, запустив sp_helpdb или просмотрев свойства базы данных в Enterprise Manager.

4 голосов
/ 23 сентября 2008

По моему опыту, на большинстве SQL-серверов нет резервной копии журнала транзакций. Полное или дифференциальное резервное копирование является обычной практикой, но резервное копирование журнала транзакций действительно редко. Таким образом, файл журнала транзакций растет вечно (пока диск не заполнится). В этом случае модель восстановления должна быть установлена ​​на " simple ". Не забудьте также изменить системные базы данных "model" и "tempdb".

Резервное копирование базы данных "tempdb" не имеет смысла, поэтому модель восстановления этой базы данных всегда должна быть "простой".

2 голосов
/ 03 января 2011

Попробуйте это:

USE DatabaseName

GO

DBCC SHRINKFILE( TransactionLogName, 1)

BACKUP LOG DatabaseName WITH TRUNCATE_ONLY

DBCC SHRINKFILE( TransactionLogName, 1)

GO 
2 голосов
/ 10 декабря 2014

База данных → щелчок правой кнопкой мыши Свойства → файл → добавить другой файл журнала с другим именем и задать путь, такой же, как у старого файла журнала с другим именем файла.

База данных автоматически выбирает только что созданный файл журнала.

1 голос
/ 01 декабря 2010
  1. Резервная БД
  2. Отсоединение БД
  3. Переименовать файл журнала
  4. Присоединить БД (при подключении удалить переименованный .ldf (файл журнала). Выберите его и удалите, нажав кнопку Удалить)
  5. Новый файл журнала будет воссоздан
  6. Удалить переименованный файл журнала.

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

0 голосов
/ 17 октября 2018

Некоторые другие ответы не сработали: у меня не было возможности создать контрольную точку, пока БД была в сети, потому что журнал транзакций был полон (как ни странно) Однако после перевода базы данных в аварийный режим мне удалось сжать файл журнала:

alter database <database_name> set emergency;
use <database_name>;
checkpoint;
checkpoint;
alter database <database_name> set online;
dbcc shrinkfile(<database_name>_log, 200);
0 голосов
/ 02 февраля 2018

Это случилось со мной, когда размер файла журнала базы данных составлял 28 ГБ.

Что вы можете сделать, чтобы уменьшить это? На самом деле, файлы журнала - это те данные файла, которые SQL-сервер хранит при совершении транзакции. Для обработки транзакции SQL-сервер выделяет страницы для одного и того же. Но после завершения транзакции они не освобождаются внезапно в надежде на то, что транзакция будет похожа на ту же. Это держит пространство.

Шаг 1: Сначала выполните эту команду в исследуемом запросе к базе данных. контрольно-пропускной пункт

Шаг 2: Щелкните правой кнопкой мыши на базе данных Задача> Резервное копирование Выберите тип резервной копии в качестве журнала транзакций Добавьте адрес назначения и имя файла для хранения данных резервной копии (.bak)

Повторите этот шаг еще раз и в это время дайте другое имя файла

enter image description here

Шаг 3: Теперь перейдите в базу данных Щелкните правой кнопкой мыши на базе данных

Задачи> Сжатия> Файлы Выберите тип файла как журнал Сжатие как освобождение неиспользуемого пространства

enter image description here

Шаг 4:

Проверьте ваш лог-файл обычно в SQL 2014 это можно найти на

C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQL2014EXPRESS \ MSSQL \ DATA

В моем случае его уменьшено с 28 ГБ до 1 МБ

0 голосов
/ 01 марта 2010

Пример:

DBCC SQLPERF(LOGSPACE)

BACKUP LOG Comapny WITH TRUNCATE_ONLY

DBCC SHRINKFILE (Company_log, 500)

DBCC SQLPERF(LOGSPACE)
...