数据库日志急速增大,超过8个GB

h235h3h 2005-11-15 11:38:25
公司的SQLSERVER 2K服务器(已打SP4)中的一个数据库数据文件大概3个多G,日志文件每天早上从100多M一直到下午增长到8个多G,晚上又会慢慢收缩,第2天又是如此。
听说将“恢复模型”设置为“简单”,并且设置“自动收缩”,就可以解决,可我发现问题依然存在。
不过,每次看着日志文件太大了,我执行一次CHECKPOINT,在收缩一下数据库,日志就全清除了。
我也尝试过将日志文件限定到1G,结果当日志到达900多M后,过段时间,程序就会提示日志已满。
请问,怎么能限制住不让日志无限增长,并且程序可以正常运行。(最好是通过调度来收缩数据库之外的方法),thank you
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
h235h3h 2005-11-18
  • 打赏
  • 举报
回复
对了,是有可能的,现在的备份频率比以前低了一半,这应该是因素之一。
yitangliang 2005-11-18
  • 打赏
  • 举报
回复
呵呵,你数据库不做备份的吗?做备份的话我可以安排日志备份的!

backup log dbname to disk='d:\backup\dbname_log.trn' with noinit

每做一次日志备份,日志就会被清除,空间就会被释放(只是释放给SQL Server,不是释放给Windows)所以,只要安排日志备份计划的话,日志文件是长不起来的。
看情况安排日志备份的间隔,我目前是1小时一次。
yitangliang 2005-11-17
  • 打赏
  • 举报
回复
backup log dbname with no_log
dbcc shrinkfile(dbname_log,300)
这样就将日志文件压缩至300MB,dbname_log是日志文件的逻辑名
h235h3h 2005-11-17
  • 打赏
  • 举报
回复
这个是只要运行一次就可以了吗?
请教一下中间那段循环的思路
h235h3h 2005-11-17
  • 打赏
  • 举报
回复
yitangliang(yitang)
我这样做过很多次了,现在是希望能控制它的大小,不让它增长到那么大
HappyWin 2005-11-15
  • 打赏
  • 举报
回复
将数据库的恢复模式设制为simple,full模式是默认的。会造成你说的问题,欢迎交流:
pest9998@hotmail.com
churchatp1 2005-11-15
  • 打赏
  • 举报
回复
把代码COPY到查询
分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大
小),运行即可(我已经用过多次了)
-----
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT


USE Marias -- 要操作的数据库名
SELECT @LogicalFileName = 'Marias_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 100 -- 你想设定的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)


DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not
expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =
@LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF


churchatp1 2005-11-15
  • 打赏
  • 举报
回复
可以试试看把备份频率变小一点
h235h3h 2005-11-15
  • 打赏
  • 举报
回复
我试过的:
听说将“恢复模型”设置为“简单”,并且设置“自动收缩”,就可以解决,可我发现问题依然存在。

我估计那个开关已经失效了,恐怕得重装了。
现在数据库日志9106M了

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧