Мой файл журнала слишком велик

мой файл журнала в SQL Server использовал все пространство на моем диске. Я запускаю полные резервные копии каждую ночь, но файл журнала продолжает расти. Что я могу сделать?

9 ответов


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


в некоторых случаях вы можете обнаружить, что файл журнала не будет правильно усекать, даже если выполняется резервное копирование журнала. Вы можете сделать резервную копию с TRUNCATE_ONLY, чтобы проверить ее. При запуске этого он должен усечь журнал транзакций:

BACKUP LOG dbname WITH TRUNCATE_ONLY

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

DBCC SQLPERF (LOGSPACE)

информацию о длительных транзакциях можно найти с помощью:

DBCC OPENTRAN 

или:

select * from sys.dm_tran_database_transactions 

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

резервное копирование журнала транзакций пространства relcaimed. После того, как вы определили свой обычный график резервного копирования журнала транзакций, вы, вероятно, будете в зелье, чтобы рассмотреть возможность сокращения журнала транзакций до более подходящего размера. Как он больше не будет расти срок.

стратегии резервного копирования для полного восстановления состоит из:

* Database backups.

* Differential backups (optional).

* Transaction log backups.

Я предлагаю вам обратиться к следующей ссылке Microsoft.

http://msdn.microsoft.com/en-us/library/aa173551 (SQL.80).aspx


вы можете использовать какое-то вращение журнала и хранить только журнал фиксированного количества времени, скажем, за последние 7 дней. Этого должно быть более чем достаточно. Или вы можете сбрасывать журнал каждую ночь, потому что он должен быть в вашей резервной копии.


вы должны создать резервную копию журналов, а также основной базы данных


лучше добавить резервные копии журналов транзакций в расписание.

BACKUP LOG database TO DISK = 'D:/database_log.bak'

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

если нет необходимости в восстановлении точки во времени и базе данных изменения происходят нечасто лучше использовать простую модель восстановления (без журналов транзакций). В этом случае журнал транзакций автоматически усекается для удаления неактивных файлов виртуального журнала. В простой модели восстановления усечение журнала транзакций происходит после каждой контрольной точки.


Это должно уменьшить его:

dbcc shrinkfile('databasename_log', 0)

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

dump transaction <dbname> with no_log

а затем сжать файл журнала, установив параметр autoshrink в настройках sql server или by.

Я думаю, вы можете использовать dbcc, чтобы сжать его тоже, но я не помню синтаксис.


удалить файл журнала?

Edit: по-видимому, удаление файла журнала плохо, это просто просто журнал в SQL server. Я оставляю это, чтобы повторить, чего не делать.