เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การตรวจสอบฐานข้อมูล

งานต่อไปคือการสร้าง trigger ใหม่เพื่อตรวจสอบการเปลี่ยนแปลงออบเจกต์ในฐานข้อมูล

ต้องสร้าง trigger ที่ระดับ database โดยใช้ group event DDL_TABLE_VIEW_EVENTS เพื่อให้ trigger ทำงาน group event นี้ครอบคลุมการดำเนินการกับ table, view, index และ statistics ทั้งหมด จึงไม่จำเป็นต้องระบุแต่ละ event แยกกัน

trigger นี้จะบันทึกรายละเอียดของคำสั่งที่ทำให้เกิดการทำงาน (event, user, query และอื่น ๆ) ลงในตาราง DatabaseAudit

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การสร้างและปรับแต่ง Trigger ใน SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • สร้าง trigger ชื่อ DatabaseAudit บน database ให้ทำงานเมื่อเกิด DDL_TABLE_VIEW_EVENTS

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

-- 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;
แก้ไขและรันโค้ด