トリガー実行の履歴を追跡する
トリガーを監視するうえで重要なのは、実行履歴を残しておくことです。これにより、トリガーが走ったタイミングと、データベースで発生した不具合の時刻をひも付けられます。
時刻が一致していれば、その問題はトリガーが原因で起きた可能性があります。
SQL Server には、現在メモリ上にあるトリガーの実行情報を提供する sys.dm_exec_trigger_stats ビューがあります。しかし、トリガーがメモリから外れると、その情報もビューから消えるため、実行履歴が失われてしまいます。
この制約を回避するために、応答しないことが多いと報告されている Orders テーブルに対する行の更新試行について、情報を TriggerAudit テーブルに保存することにしました。
この演習はコースの一部です
SQL Server のトリガー構築と最適化
演習の手順
PreventOrdersUpdateトリガーを変更します。Ordersテーブルの行が更新されたときに発火するように設定します。- トリガーの実行に関する追加情報を
TriggerAuditテーブルに書き込みます。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Modify the trigger to add new functionality
___ TRIGGER PreventOrdersUpdate
ON ___
-- Prevent any row changes
INSTEAD OF ___
AS
-- Keep history of trigger executions
INSERT INTO ___ (TriggerName, ExecutionDate)
SELECT 'PreventOrdersUpdate',
GETDATE();
RAISERROR ('Updates on "Orders" table are not permitted.
Place a new order to add new products.', 16, 1);