Как сжать журнал транзакций в базах данных MS SQL 2000? - PullRequest
5 голосов
/ 02 октября 2008

У меня есть несколько баз данных, в которых журнал транзакций (.LDF) во много раз больше файла базы данных (.MDF).

Что я могу сделать, чтобы автоматически уменьшить их или не дать им стать такими большими?

Ответы [ 9 ]

6 голосов
/ 02 октября 2008

Это должно сделать работу

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>)

Слово предупреждения

Вы бы действительно использовали его только в базе данных тестирования / разработки, где вам не нужна надлежащая стратегия резервного копирования, поскольку сброс журнала приведет к потере истории транзакций. В живых системах вы должны использовать решение, предлагаемое Cade Roux

4 голосов
/ 02 октября 2008

Резервное копирование журнала транзакций и сокращение его.

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

3 голосов
/ 02 октября 2008

Щелкните правой кнопкой мыши базу данных в Enterprise Manager> Все задачи> Сжать базу данных.

2 голосов
/ 02 октября 2008
1 голос
/ 03 октября 2008

Никто здесь не сказал это, поэтому я: НИКОГДА не уменьшай журнал транзакций. Это плохая идея с точки зрения SQL Server.

Сохраняйте журнал транзакций небольшим, делая ежедневные резервные копии БД и ежечасные (или менее) резервные копии журнала транзакций. Интервал резервного копирования журнала транзакций зависит от того, насколько занята ваша база данных.

0 голосов
/ 02 октября 2008

Вот что я использовал

BACKUP LOG <CatalogName> with TRUNCATE_ONLY
DBCC SHRINKDATABASE (<CatalogName>, 1)
use <CatalogName>
go
DBCC SHRINKFILE(<CatalogName_logName>,1)
0 голосов
/ 02 октября 2008

Использование Query Analyzer:

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)*/
0 голосов
/ 02 октября 2008

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

Сочетание сжатого файла с несколькими ответами и простым режимом восстановления обеспечило разумный размер нашего файла журнала.

0 голосов
/ 02 октября 2008

попробуйте sp_force_shrink_log, который вы можете найти здесь http://www.rectanglered.com/sqlserver.php

...