记录触发器的执行情况
在监控触发器时,一个重要因素是保留其执行历史。这能让您把触发器运行的时间点与数据库中出现的问题对应起来。
如果时间吻合,就有可能是该触发器导致了问题。
SQL Server 通过 sys.dm_exec_trigger_stats 视图提供当前驻留在内存中的触发器的执行信息。但一旦触发器从内存中移除,与之相关的任何信息也会从该视图中删除,因此您会失去该触发器的执行历史。
为弥补这一限制,您决定利用 TriggerAudit 表来存储对 Orders 表进行修改行的任何尝试的信息,因为有人反映该表经常无响应。
本练习是课程的一部分
在 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);