trešdiena, 2011. gada 26. janvāris

DDL Trigeris notikumu reģistrēšanai

Rakstā DDL (Data Definition Language) trigera piemērs. Ideja- datu bāzē tiek izveidota tabula, kurā tiek reģistrēti DDL notikumi- laiks, lietotājs un XML dati ar notikuma aprakstu. Iespēja pieejama sākot ar SQL Server 2005. Kopsavilkuma raksts: Trigeri SQL Server

Tabulas un trigera izveide:
Create Table dbo.LogTable
(
    Datums datetime,
    Lietotajs nvarchar(100),
    Notikums XML
);
Go
Create Trigger tr_DDLNotikums
    On DataBase
For DDL_DATABASE_LEVEL_EVENTS
AS
    Insert Into dbo.LogTable (Datums, Lietotajs, Notikums)
       Values (GETDATE(), Suser_Sname(), EventData());
Trigeris tiek definēts datu bāzes ietvaros, līdz ar to attiecīgajā tabulā tik glabāti tikai konkrētās datu bāzes DDL notikumi- piemēram, tabulas izveide, skata izmaiņas, trigera izveide, datu bāzes lietotāja dzēšana utt utt utt.

Pārbaudei var veikt kādu DDL darbību, piemēram izveidot un izdzēst tabulu (var, protams, pamēģināt arī citas darbības):
Create Table dbo.TestTable (TestTableID int)
Drop Table dbo.TestTable
Tagad iepriekš izveidotajā tabulā būs reģistrēti notikumi. Tos var apskatīt:
Select * From dbo.LogTable;
Bet ņemot vērā, ka izveidots trigeris tika uz XML kolonnas, var izveidot arī vaicājumu, kurš apskata konkrētas XML daļas (veiktā darbība un objekts):
Select Datums, Lietotajs, Notikums.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)') Darbiba,
    Notikums.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(100)') Nosaukums, Notikums
From dbo.LogTable
Order By Datums
Trigera un Log tabulas dzēšana (lai atstātu visu kā bija):
Drop Trigger tr_DDLNotikums
    On DataBase
Drop Table dbo.LogTable;

Nav komentāru:

Komentāra publicēšana