3

データベースまたはログの残りが10%に達したときに、アラートを送信する方法を探しています。

この質問の前に、意図的に「ファイル」という単語を質問に含めなかったと言います。私がこの質問を調査している間、ほとんどの人はデータベースを自動拡張用に設定していて、ファイルシステムレベルでデータベースを管理するのに苦労しているようです。ディスクスペースアラートを送信する方法を扱った例はたくさんあります。これは私の質問ではありません!私のデータベースはすべて固定サイズのファイルに設定されています。つまり、ファイルは、作成時またはデータベースの拡張が必要な​​ときに、ファイルシステムからすべて事前に割り当てられます。ポリシーの問題として、私はどのデータベースも、1つの不正な動作のアプリケーションの手に渡ってサーバー全体を停止させるまで、制御されずに拡張することを許可しません。各データベースは、事前に割り当てられたスペース内で管理され、増大する需要を満たすために必要に応じて手動で増大します。

つまり、たとえばデータベースの「リーマスペース」が10%を下回ったときにアラートを送信するための最良の方法を探しています。技術的には、警告とアラートのしきい値を設定する可能性があります。これまでのところ、ほとんどの人がディスクスペースに固執しているように見えるため、このテーマについては何も見つかりませんでした。これは、干し草の山で針を探すようなものです。

SQL Serverに、このような単純で明白なことをすぐに実行できる単純なアラートメカニズムがあることを期待していましたが、アラートはほとんどの場合、私の本の少し遅いエラーメッセージをキャッチするように設計されているようです。 mもう少し積極的になりたいと思っています。

したがって、ここでも、データベースの「残りのスペース」がさまざまなしきい値を下回ったときにアラートを送信しようとしています。誰かがこれをしたか、それが行われたのを見たことがありますか?

ありがとう!

4

1 に答える 1

3

はい、確かに。私はこれをしました。

システムテーブルに対するクエリでカウンタを設定することができます。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. 空き率が特定のしきい値(つまり5%)を下回ったときに実行されるように、カウンターを使用してSQLエージェントアラートを作成します

  4. データベースメールを構成してテストし、少なくとも1人のオペレーターを作成します

  5. SQL Serverエージェントアラート電子メール(エージェントのプロパティ)を有効にして、エージェントを再起動します

于 2013-01-03T18:41:58.453 に答える