SQL Server“可用空间”警报?

时间:2012-04-13 17:48:54

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

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

让我先说一下这个问题,说我故意不在问题中加入“档案”这个词。虽然我已经研究过这个问题,但似乎大多数人都将自己的数据库设置为自动增长,然后很难在文件系统级别管理他们的数据库。有大量的例子涉及如何发送磁盘空间警报。这不是我的问题!我的数据库全部设置为固定大小的文件。这意味着文件在创建时或者需要扩展数据库时都会从文件系统中预先分配。作为一个策略问题,我不允许任何数据库增长,不受控制,以至于将整个服务器放在一个性能不佳的应用程序的手中。每个数据库都在其预先分配的空间内进行管理,并根据需要手动增长,以满足不断增长的需求。

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

我希望SQL Server可以使用简单的警报机制来完成开箱即用的这么简单明了的事情,但看起来警报大多数都是为了捕获错误信息,这在我的书中有点晚了 - 我希望能更加积极主动。

因此,再次,当数据库“剩余空间”降至不同阈值以下时,希望发送警报。有没有人这样做过或看过它?

谢谢!

1 个答案:

答案 0 :(得分:3)

确实是的。我做到了。

可以使用针对系统表的查询来设置计数器。一种可能性包括确定日志或数据文件中的可用空间百分比。然后,可以创建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代理警报电子邮件(代理的属性),然后重新启动代理