У меня есть несколько баз данных, в которых журнал транзакций (.LDF) во много раз больше, чем файл базы данных (.MDF).
Что я могу сделать, чтобы автоматически уменьшить их или предотвратить их увеличение?
У меня есть несколько баз данных, в которых журнал транзакций (.LDF) во много раз больше, чем файл базы данных (.MDF).
Что я могу сделать, чтобы автоматически уменьшить их или предотвратить их увеличение?
Это должно сделать работу
use master
go
dump transaction <YourDBName> with no_log
go
use <YourDBName>
go
DBCC SHRINKFILE (<YourDBNameLogFileName>, 100) -- where 100 is the size you may want to shrink it to in MB, change it to your needs
go
-- then you can call to check that all went fine
dbcc checkdb(<YourDBName>)
Предупреждение
Вы бы действительно использовали его только в базе данных тестирования / разработки, где вам не нужна надлежащая стратегия резервного копирования, поскольку сброс журнала приведет к потере истории транзакций. В работающих системах вы должны использовать решение, предложенное Кад Ру
Сделайте резервную копию журнала транзакций и уменьшите его.
Если БД регулярно резервируется и усекается на контрольной точке, она не должна выходить из-под контроля, однако, если вы выполняете большое количество (размер) транзакций между этими интервалами, она будет расти до следующей контрольной точки.
Щелкните правой кнопкой мыши базу данных в Enterprise Manager > All Tasks > Shrink Database.
СЖАТЫЙ ФАЙЛ DBCC.
Здесь для 2005 г. Здесь для 2000.
Здесь никто этого не говорил, поэтому я скажу: НИКОГДА не уменьшайте журнал транзакций. Это плохая идея с точки зрения SQL Server.
Держите журнал транзакций небольшим, выполняя ежедневное резервное копирование базы данных и ежечасное (или меньше) резервное копирование журнала транзакций. Интервал резервного копирования журнала транзакций зависит от того, насколько загружена ваша БД.
Еще одна вещь, которую вы можете попробовать, — установить простой режим восстановления (если он еще не установлен) для базы данных, что предотвратит столь быстрый рост файлов журнала. Недавно у нас была эта проблема, когда наш журнал транзакций заполнился, и нам больше не разрешались транзакции.
Сочетание сжатого файла с несколькими ответами и простого режима восстановления обеспечило разумный размер нашего файла журнала.
Использование анализатора запросов:
USE yourdabatase
SELECT * FROM sysfiles
Вы должны найти что-то похожее на:
FileID …
1 1 24264 -1 1280 1048578 0 yourdabatase_Data D:\MSSQL_Services\Data\yourdabatase_Data.MDF
2 0 128 -1 1280 66 0 yourdabatase_Log D:\MSSQL_Services\Data\yourdabatase_Log.LDF
Проверьте идентификатор файла журнала (в большинстве случаев это 2). Выполните 2 или 3 раза команду контрольной точки, чтобы записать каждую страницу на жесткий диск.
Checkpoint
GO
Checkpoint
GO
Выполните следующую транзакционную команду, чтобы увеличить размер файла журнала до 1 МБ.
DUMP TRAN yourdabatase WITH no_log
DBCC SHRINKFILE(2,1) /*(FileID , the new size = 1 Mb)*/
Вот что я использовал
BACKUP LOG <CatalogName> with TRUNCATE_ONLY
DBCC SHRINKDATABASE (<CatalogName>, 1)
use <CatalogName>
go
DBCC SHRINKFILE(<CatalogName_logName>,1)
попробуйте sp_force_shrink_log, который вы можете найти здесь http://www.rectanglered.com/sqlserver.php