Skip to main content
評価してください: 

Vol.8「SQL Server の管理パックを分析してみよう」

スクリプトの定期実行

公開日: 2004 年 11 月 29 日

河端 善博

続いて、VBScript を使ったスクリプトを対象サーバー上で定期的に実行する方法を見ていきましょう。スクリプト実行の結果、エラーがあれば、アラートにします。

スクリプトを定期的に実行する [イベント ルール]

図 25: イベント ルール [SQL Server Service Pack Compliance] は、VBScript を利用して SQL Server のサービスパックのバージョンが適切かどうか調べます。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[Microsoft SQL Server] - [SQL Server 2000] - [SQL Server 2000 Health and Availability] のイベント ルール [SQL Server Service Pack Compliance] は、VBScript で作成したスクリプトを定期的に実行して、対象サーバー上の SQL Server 2000 のバージョンを調べ、指定されたサービスパック以上になっていることを確認します。

では、プロパティを見ていきましょう。

イベント ルールのプロパティの [全般] タブ

図 26: イベント ルールの [全般] タブは、ルール名を指定します。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[全般] タブは、これまでにみてきたイベント ルールと同じです。

続いて、[データ プロバイダ] タブを見てみましょう。

イベント ルールのプロパティの [データ プロバイダ] タブ

図 27: [データ プロバイダ] タブでは、時間指定イベントを使っています。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[データ プロバイダ] タブでは、[プロバイダの種類] に [時間指定イベント] を選択しています。このプロバイダの部分で、スクリプトを実行するタイミング、時間間隔を指定します。 [変更] ボタンをクリックしてみましょう。

時間指定イベント プロバイダのプロパティ

図 28: [時間指定イベント] プロバイダでは、イベントの間隔と同期時刻を指定できます。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[時間指定プロバイダ] では、イベントを生成する間隔と、同期時刻を指定することができます。ここでは、1440 分 = 1 日間隔を指定していますので、毎日 4:30 にスクリプトを実行することになります。

[条件]、[スケジュール]、[アラート] のタブは、特に指定しません。 [スケジュール] は [常にデータを処理する] ことになります。 [アラートの抑制] タブも他のルールと同様に指定しておきます。

では、[応答] タブを見てみましょう。

イベント ルールのプロパティの [応答] タブ

図 29: [応答] タブでは、実行するスクリプトを選択しています。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[応答] タブで、実行するスクリプトを指定します。ここでは、[SQL Server 2000 Service Pack Compliance] スクリプトを指定しています。

MOM サーバーで管理しているスクリプトは、次のフォルダからも一覧で見ることができます。

管理パックの [スクリプト]

図 30: [管理パック] - [スクリプト] フォルダでは、MOM が管理するスクリプトの一覧を確認することができます。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[スクリプト] フォルダには、さまざまなルールで利用されるスクリプトの一覧を見ることができます。スクリプトは複数のルールで共有することができます。

なお、このスクリプトフォルダでは、各スクリプトを参照しているルールを検索することができません。

次のクエリにより、スクリプト名から、ルール名とルール グループ名を得ることができます。

クエリ: スクリプト名から、ルール名とルール グループ名を得る

SELECT         
     pr1.Name [スクリプト名],
     s.Name [ルール名],
     pr2.Name [ルール グループ名]
FROM ProcessRule pr1
LEFT JOIN ProcessRuleMembership prm1 ON 
     pr1.IdProcessRule = prm1.idProcessRuleMember
LEFT JOIN ProcessRule pr2 ON 
     prm1.idProcessRuleGroup = pr2.idProcessRule
LEFT JOIN ProcessRuleToScript prts ON 
     pr1.idProcessRule = prts.idProcessRule
LEFT JOIN Script s ON
     prts.idScript = s.idScript
WHERE
     (s.Name LIKE 'SQL%')

このクエリでは、スクリプト名が 'SQL' で始まるスクリプトの一覧と、それぞれを参照するルールとルール グループを表示しています。

なお、このクエリで利用しているテーブルは、MOM SDK にて開発者用として公開されているテーブルやビューではありませんので、将来変更になる可能性があります。

では、図 29 の [応答] タブに戻って、[編集] ボタンをクリックしてみましょう。

[スクリプトの起動] 画面

図 31: [スクリプトの起動] ダイアログは、スクリプト名、実行場所、パラメータなどを指定しています。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[スクリプトの起動] ダイアログでは、実行するスクリプト名をまず指定しています。さらに、[実行場所] は、エージェント コンピュータを指定しています。これでスクリプトが対象サーバー上で実行される方になります。対象サーバーで実行させる代わりに、MOM 管理サーバーで実行させることもできます。

なお、実行するスクリプトは、エージェントが自動的に MOM サーバーから対象サーバーにコピーします。

[応答タイムアウト] には、スクリプトを実行する時間を分単位に指定します。

[スクリプトのパラメータ] には、スクリプトの入力値として利用する値を指定します。ルールによってパラメータを変更して定義することができるので、とても便利ですね。

さらに、[編集] ボタンをクリックしてみましょう。

スクリプトのプロパティの [全般] タブ

図 32: [スクリプトのプロパティ] ダイアログでは、スクリプトのソースコードなどを編集できます。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[スクリプトのプロパティ] ダイアログが表示されます。

スクリプトのプロパティの [スクリプト] タブ

図 33: [スクリプト] タブでは、スクリプトの内容を編集することができます。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[スクリプト] タブでは、VBScript などスクリプトの内容を編集することができます。

スクリプトのプロパティの [パラメータ] タブ

図 34: [パラメータ] タブでは、パラメータの定義と、既定値を指定します。
※画面を原寸で確認する場合は、こちらをクリックしてください。

[パラメータ] タブでは、スクリプトのパラメータを定義します。既定値を指定することもできます。定義したパラメータは、次のように参照することができます。

スクリプト: パラメータを変数に取り込む VBScript

Set oParams = ScriptContext.Parameters
bInformationEvent = CBool(oParams.Get("InformationEvent"))
sDesiredVersion = oParams.Get("VersionString")
bAlertOnAll = CBool(oParams.Get("AlertOnAll"))

定義したパラメータを内部変数に取り込む VBScript です。

また、このスクリプトは、バージョンが適切でない SQL Server インスタンスを見つけた場合、エラーを報告します。

スクリプト: イベント ログにイベントを書き込む VBScript

Set oNewEvent = ScriptContext.CreateEvent()
' Set event properties
oNewEvent.Message = sMessage
oNewEvent.EventNumber = iEventID
oNewEvent.EventType = iEventType
oNewEvent.EventSource = sSource
' Submit the event
ScriptContext.Submit oNewEvent

これで、スクリプトを定期的に実行するイベント ルール [SQL Server Service Pack Compliance] ができました。

しかし、このままでは、エラーが発生しても、アラートになりません。

そこで、次のイベント ルールがあります。

イベント ルールのプロパティで [ルール名] を指定

図 35: [SQL Server Service Pack Compliance] で発生したエラーは、[SQL Server Service Pack Compliance - Version does not comply] によってアラートとして報告されます。
※画面を原寸で確認する場合は、こちらをクリックしてください。

イベント ルール [SQL Server Service Pack Compliance - Version does not comply] は、[SQL Server Service Pack Compliance] でエラーがイベント ログに書き込まれた場合に、自動的にアラートにするためのルールです。

イベント ルールのプロパティの [条件] タブ

図 36: イベント ルール [SQL Server Service Pack Compliance] が発生するイベント 29106 を発見すると、アラートにします。
※画面を原寸で確認する場合は、こちらをクリックしてください。

イベント ルール [SQL Server Service Pack Compliance] は、SQL Server 2000 のサービスパックが適用されていなかった場合、イベント ID 29106 を書き込みます。

そこで、イベント ルール [SQL Server Service Pack Compliance - Version does not comply] は、これを条件として、アラートを発生させます。

このように、エージェント上でスクリプトの定期実行させる方法と、エラー発生時に、アラートを発生させる方法を定義しています。

ページのトップへ


目次

著者

河端 善博河端 善博

有限会社 COZAX 代表取締役社長
PASSJ 理事
セキュリティ分科会ボードリーダ
INETA Japan リード
MVP for SQL Server