Veritabanı denetimi
Sıradaki görevin, veritabanı nesnesi değişikliklerini denetlemek için yeni bir tetikleyici geliştirmek.
Tetikleyiciyi veritabanı düzeyinde oluşturman gerekiyor. Tetikleyiciyi tetiklemek için DDL_TABLE_VIEW_EVENTS grup olayını kullanabilirsin. Bu grup olayı; tablolar, görünümler (views), indeksler veya istatistikleri içeren herhangi bir veritabanı işlemini kapsar. Grup olayını kullanarak tüm olayları tek tek belirtmene gerek kalmaz.
Tetikleyici, tetiklenmeye neden olan ifadeyle (olay, kullanıcı, sorgu vb.) ilgili ayrıntıları DatabaseAudit tablosuna ekleyecek.
Bu egzersiz
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme
kursunun bir parçasıdırEgzersiz talimatları
DDL_TABLE_VIEW_EVENTSiçin tetiklenen, veritabanı üzerinde birDatabaseAudittetikleyicisi oluştur.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
-- Create a new trigger
CREATE TRIGGER ___
-- Attach the trigger at the database level
ON ___
-- Fire the trigger for all tables/ views events
FOR ___
AS
INSERT INTO DatabaseAudit (EventType, DatabaseName, SchemaName, Object, ObjectType, UserAccount, Query, EventTime)
SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(50)') AS EventType
,EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'NVARCHAR(50)') AS DatabaseName
,EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(50)') AS SchemaName
,EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)') AS Object
,EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]', 'NVARCHAR(50)') AS ObjectType
,EVENTDATA().value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(100)') AS UserAccount
,EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'NVARCHAR(MAX)') AS Query
,EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]', 'DATETIME') AS EventTime;