【发布时间】:2019-03-25 09:07:30
【问题描述】:
我有一个数据库(恢复模式 = 已满),它的事务日志已满。我知道我可以通过缩小事务日志来解决问题。
但是,我想知道它变满的原因是什么?
因为我读过其他人,他们说大量的插入和删除会增加事务日志的大小。但我无法复制该问题以重现完整事务日志的错误(它以某种方式能够重新分配空间)
问题是: 如何模拟“事务日志已满”的问题? 如何查看物理事务日志?
该查询用于跟踪当前占用的日志空间,但它不是实际的事务日志,因为查询的占用空间在批量插入和删除过程中是在颤抖而不是静态增加
假设只要不执行备份,日志空间就会增加
DECLARE @TMPTBL AS TABLE (
DatabaseName nvarchar(500),
LogSize decimal(18,2),
LogSpaceUsed decimal (18,2),
[Status] int
)
INSERT INTO @TMPTBL
EXEC ('DBCC SQLPERF(LOGSPACE)')
SELECT * FROM @TMPTBL WHERE DATABASENAME LIKE '%MYDBNAME%'
GO
【问题讨论】:
-
您可以使用这篇文章来查找可能会增加日志文件的长时间运行的查询-stackoverflow.com/questions/941763/…
-
你现在可以通过完全备份你的数据库来解决这个问题。注意 - 缩小数据库不是解决此问题的正确方法。
-
我需要查找长时间运行的查询的原因是什么?它们是导致事务日志已满的原因吗?因为我尝试了相当长的删除和插入(4 个表,每个表都包含产生 1 个插入的触发器),需要 4 分钟才能完成,但之后事务日志很好
-
我知道修复事务日志完整问题的解决方案(手动),我只是好奇为什么它最终会变满:),如果你能提供脚本让我复制问题(制作事务日志已满)
-
我只是好奇它是否必须与事务或死锁问题有关
标签: sql-server