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, kursun bir parçasıdır
SQL Server'da Tetikleyiciler Oluşturma ve Optimize Etme
Egzersiz talimatları
DDL_TABLE_VIEW_EVENTSiçin tetiklenen, veritabanı üzerinde birDatabaseAudittetikleyicisi oluştur.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
-- 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;