2008-10-02 77 views

回答

6

这应该做的工作

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

警告

你的字只会在测试/开发dat上真正使用它如果您不需要适当的备份策略,因为倾销日志将导致交易历史记录丢失。在活动的系统,你应该使用的解决方案由Cade Roux

+0

这工作得很好! – 2008-10-02 16:40:22

2

DBCC SHRINKFILE。

Here for 2005. Here for 2000.

+0

两个链接都指向2005版本。这是2000年的一个:http://support.microsoft.com/kb/272318 – lepe 2013-12-19 03:19:39

3

右击在企业管理器数据库>所有任务>收缩数据库。

+0

注意:这种方法,这是最简单的,可能在大多数情况下工作,如果没有任何反应,请按照接受的方法。 – lepe 2013-12-19 06:34:19

4

备份事务日志并缩小它。

如果数据库定期备份并在检查点被截断,它不应该失去控制,但是,如果您在这些时间间隔之间进行大量(大小)的事务处理,它将增长到下一个检查点。

0

你可以尝试的另一件事是恢复模式设置为简单(如果它们还没有)的数据库,该数据库将保持日志文件的增长迅速。最近我们遇到了这个问题,我们的交易记录已经填满,我们不再允许交易。

在多个答案和简单恢复模式下的收缩文件的组合确保我们的日志文件保持合理的大小。

0

使用查询分析器:

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大部分时间)。 执行2或3次检查点命令将每一页写入硬盘。

Checkpoint 
GO 
Checkpoint 
GO 

执行以下事务命令日志文件树干1 MB

DUMP TRAN yourdabatase WITH no_log 
DBCC SHRINKFILE(2,1) /*(FileID , the new size = 1 Mb)*/ 
0

这里sugested就是我一直在使用

BACKUP LOG <CatalogName> with TRUNCATE_ONLY 
DBCC SHRINKDATABASE (<CatalogName>, 1) 
use <CatalogName> 
go 
DBCC SHRINKFILE(<CatalogName_logName>,1) 
1

这里没有人说过,所以我:永远不要收缩事务日志。从SQL Server的角度来看,这是一个坏主意。

通过执行每日数据库备份和每小时(或更少)事务日志备份来保持事务日志的小型化。事务日志备份时间间隔取决于数据库的繁忙程度。