BaşlayınÜcretsiz başlayın

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

Kursa Göz Atın

Egzersiz talimatları

  • DDL_TABLE_VIEW_EVENTS için tetiklenen, veritabanı üzerinde bir DatabaseAudit tetikleyicisi 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;
Kodu Düzenle ve Çalıştır