【问题标题】:SQL Server "Space Available" Alert?SQL Server“可用空间”警报?
【发布时间】:2012-04-13 17:48:54
【问题描述】:

我正在寻找一种在数据库或日志剩余空间达到 10% 时发送警报的方法。

让我先说我故意没有在问题中包含“文件”一词。虽然我研究过这个问题,但似乎大多数人都将他们的数据库设置为自动增长,然后努力在文件系统级别管理他们的数据库。有大量示例处理如何发送磁盘空间警报。这不是我的问题!我的数据库都设置为固定大小的文件。这意味着文件在创建时或需要扩展数据库时都从文件系统中预先分配。作为一项政策,我不允许任何数据库不受控制地增长,以致于在一个行为不端的应用程序手中使整个服务器瘫痪。每个数据库都在其预先分配的空间内进行管理,并根据需要手动扩展以满足不断增长的需求。

也就是说,例如,当数据库“扩孔空间”降至 10% 以下时,我正在寻找发送警报的最佳方式 - 从技术上讲,我可能会设置警告和警报阈值。到目前为止,我还没有找到关于这个主题的任何内容,因为大多数人似乎都专注于磁盘空间,这使得这有点像大海捞针。

我有点希望 SQL Server 有简单的警报机制来做这么简单、明显、开箱即用的事情,但看起来警报主要是为了捕获错误消息,这在我的书中有点晚了- 我希望更积极一点。

因此,再次希望在数据库“剩余空间”低于各种阈值时发送警报。有没有人做过或看到过?

谢谢!

【问题讨论】:

    标签: sql-server-2008-r2 database-management


    【解决方案1】:

    确实如此。我已经这样做了。

    可以通过查询系统表来设置计数器。一种可能性包括确定日志或数据文件中的可用空间百分比。然后,可以创建 SQL 警报以通过电子邮件将消息发送给操作员,说明计数器已达到特定阈值,例如数据库文件中仅剩余 5% 的空间。该解决方案需要几个步骤,但可以使用现有功能。

    要确定文件名和空间信息,可以使用以下查询。

    SELECT  name AS 'File Name' , 
     physical_name AS 'Physical Name', 
     size/128 AS 'Total Size in MB',
     size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS 'Available Space In MB',
     round((CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)/size)* 100 ,2) AS  'Percentage Used',
     *
    FROM sys.database_files;
    

    以下是针对给定文件的可用空间百分比设置警报的步骤。

    1. 创建用值设置计数器的过程。此示例设置计数器编号为 10。

      DECLARE @FreePercent int
      
      SELECT @FreePercent = 100 - round((CAST(FILEPROPERTY(name, 'SpaceUsed') AS float)/size)* 100 ,2)
       FROM sys.database_files
       WHERE sys.database_files.name = 'NameOfYourLogOrDataFileHere';
      
      EXEC sp_user_counter10 @FreePercent
      
    2. 创建计划作业以运行上述过程

    3. 使用计数器创建 SQL 代理警报,以便在空闲百分比低于某个阈值(即 5%)时执行它

    4. 配置数据库邮件,测试它,并创建至少一个操作员

    5. 启用 SQL Server 代理警报电子邮件(代理属性),然后重新启动代理

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多