我们在数据库上使用固定的事务日志大小,我想组建一个应用程序来监视日志大小,以便我们可以看到事情变得太紧张,我们需要增加固定的trn日志.
是否有我可以运行的TSQL命令,它会告诉我当前事务日志的大小以及事务日志的固定限制?
我使用了你的代码但是,转换为int时出错了."消息8115,级别16,状态2,行1算术溢出错误将表达式转换为数据类型int." 因此,无论哪里有"*8",我都将其更改为*8.0并且代码完美无缺.
SELECT (size * 8.0)/1024.0 AS size_in_mb , CASE WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want ELSE (max_size * 8.0)/1024.0 END AS max_size_in_mb FROM YOURDBNAMEHERE.sys.database_files WHERE data_space_id = 0
快速谷歌搜索显示:
DBCC SQLPERF ( LOGSPACE )
为什么不在事务日志中使用自动增长?看起来这将是一个更可靠的解决方案.
使用sys.database_files只能提供日志文件的大小,而不是日志文件的大小.如果你的文件是固定大小,这没用多少.DBCC SQLPERF(LOGSPACE)有点旧,但如果您需要支持旧版本的SQL Server,则效果很好.
相反,你可以像这样使用dm_os_performance_counters表:
SELECT RTRIM(instance_name) [database], cntr_value log_size_kb FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:Databases' AND counter_name = 'Log File(s) Used Size (KB)' AND instance_name <> '_Total'
这是我的头脑,所以你可能想要仔细检查数学......
SELECT (size * 8)/1024.0 AS size_in_mb, CASE WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want ELSE (max_size * 8)/1024.0 END AS max_size_in_mb FROM MyDB.sys.database_files WHERE data_space_id = 0 -- Log file
您可以从该系统视图中获取更多信息,例如增长增量,日志是否设置为自动增长,以及是否将其设置为按特定数量或百分比增长.
HTH!