我的客户数据库之一中的事务日志是 16GB,而数据库本身只有 2MB。我已经开始备份事务日志,它们每半小时发生一次。
我试图运行 DBCC SHRINKFILE (Log,size) 但它说所有虚拟页面都在使用中。
这是否意味着存在未提交的交易或其他什么?文件这么大已经有一段时间了。我能以某种方式截断日志吗?
数据库是否处于完全恢复状态,但之前未进行任何备份?Paul Randall 的文章用尽事务日志空间涵盖了其他可能的情况。
下面的 DMV 查询将告诉您为什么不能截断日志。如果您不确定如何解释输出,请将回答添加到您的问题中。
SELECT
db.[name] AS [Database Name]
, db.recovery_model_desc AS [Recovery Model]
, db.log_reuse_wait_desc AS [Log Reuse Wait Description]
, ls.cntr_value AS [Log Size (KB)]
, lu.cntr_value AS [Log Used (KB)]
, CAST(CAST(lu.cntr_value AS FLOAT)
/ CAST(ls.cntr_value AS FLOAT) AS DECIMAL(18,2)) * 100 AS [Log Used %]
FROM
sys.databases AS db
INNER JOIN
sys.dm_os_performance_counters AS lu
ON db.name = lu.instance_name
INNER JOIN
sys.dm_os_performance_counters AS ls
ON db.name = ls.instance_name
WHERE
lu.counter_name LIKE N'Log File(s) Used Size (KB)%'
AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
AND ls.cntr_value > 0
OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1083 次 |
最近记录: |