繁体   English   中英

如何收缩MS SQL 2000数据库上的事务日志?

[英]How do I shrink the transaction log on MS SQL 2000 databases?

我有几个数据库,其中事务日志(.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>)

一句警告

您只能在不需要适当备份策略的测试/开发数据库中使用它,因为转储日志会导致丢失事务历史记录。 在实时系统中,您应该使用Cade Roux提取的解决方案

备份事务日志并收缩它。

如果正在定期备份数据库并在检查点上截断数据库,则它不会失控,但是,如果您在这些时间间隔之间执行大量(大小)事务,则它将增长到下一个检查点。

在Enterprise Manager>所有任务>收缩数据库中右键单击数据库。

这里没有人这么说,所以我会:永远不会缩小交易日志。 从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

检查日志文件的文件ID(大多数时间是2)。 执行checkpoint命令的2或3次,将每个页面写入硬盘驱动器。

Checkpoint
GO
Checkpoint
GO

执行以下transactional命令将日志文件中继为1 MB

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM