当前位置:  开发笔记 > 数据库 > 正文

如何以编程方式获取SQL 2005中的事务日志的大小?

如何解决《如何以编程方式获取SQL2005中的事务日志的大小?》经验,为你挑选了4个好方法。

我们在数据库上使用固定的事务日志大小,我想组建一个应用程序来监视日志大小,以便我们可以看到事情变得太紧张,我们需要增加固定的trn日志.

是否有我可以运行的TSQL命令,它会告诉我当前事务日志的大小以及事务日志的固定限制?



1> 小智..:

我使用了你的代码但是,转换为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           



2> Eric Z Beard..:

快速谷歌搜索显示:

DBCC SQLPERF ( LOGSPACE )

为什么不在事务日志中使用自动增长?看起来这将是一个更可靠的解决方案.


DBCC SQLPERF需要服务器上的额外权限,这就是我使用sys.database文件答案的原因.DBCC SQLPerf确实具有同时为您提供所有数据库的优势......

3> Martin Brown..:

使用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'



4> Tom H..:

这是我的头脑,所以你可能想要仔细检查数学......

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!

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有