Sql server 2008 r2 SQL Server“;“可用空间”;警觉的?

Sql server 2008 r2 SQL Server“;“可用空间”;警觉的?,sql-server-2008-r2,database-management,Sql Server 2008 R2,Database Management,我正在寻找一种方法,当数据库或日志达到剩余空间的10%时发送警报 在这个问题之前,我要说,我故意不在问题中包括“文件”一词。虽然我研究了这个问题,但似乎大多数人都将数据库设置为自动增长,然后在文件系统级别努力管理数据库。关于如何发送磁盘空间警报,有很多例子。这不是我的问题!我的数据库都设置为固定大小的文件。这意味着在创建文件或需要扩展数据库时,所有文件都是从文件系统预先分配的。作为一项政策,我不允许任何数据库不受控制地增长,以至于在一个行为糟糕的应用程序手中关闭整个服务器。每个数据库都在其预先分

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

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

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

我有点希望SQL Server会有一个简单的警报机制来完成这样一个简单、显而易见的开箱即用的事情,但看起来警报主要是为了捕捉错误消息而设计的,这在我的书中有点晚了——我希望更主动一点

所以,我们再次希望在数据库“剩余空间”降至各种阈值以下时发送警报。有人做过或看到过吗


谢谢

是的。我已经这样做了

可以通过查询系统表来设置计数器。一种可能性包括确定日志或数据文件中的可用空间百分比。然后,可以创建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;
下面是设置给定文件上可用空间百分比警报的步骤

  • 创建使用值设置计数器的过程。此示例设置计数器编号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
    
  • 创建计划作业以运行上述过程

  • 使用计数器创建SQL代理警报,以便在可用百分比降至某个阈值(即5%)以下时执行

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

  • 启用SQL server代理警报电子邮件(代理的属性),然后重新启动代理