/* Jede strukturelle Aenderungen an einer oder allen Datenbanken soll (voellig automatisch) nachvollziehbar sein. Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE STATISTICS statement (DDL Trigger) Um alle technische Aenderungen nachvollziehen zu koennen. Also werden alle Veraenderungen an Struktruen von allen Datenbanken dokumentiert. Dies gilt auch fuer Trigger und neue Datenbanken u.ae. Es werden somit saemtliche "DDL" Befehle dokumentiert, aber keine DML Befehle und deren Wirkungen! DDL = Data Definition Language DML = Data Manipulation Language Moeglicherweise sollte die getriggerte ƒnderungen an die Ziel-Datenbank (bsp. master.dbo.FOD_ddl_log) eines zweitem SQL-Server gesendet werden. Hinweis: sa-Rechte (oder vergleichbare) sind notwendig. Hinweis: Dieser Trigger ist auf dem SQL-Server unter ServerObjects/Triggers zu finden Change: 20160126 FOD: Diese Beschreibung und JEGLICHER "DELETE-Code" wurde auskommentiert + with execute as 'sa' */ USE master; GO --Logging-Tabelle anlegen: CREATE TABLE FOD_ddl_log ( id bigint identity(1,1), xmlEVENTDATA xml ); GO --Logging-View anlegen (nur wg. dem Auslesen von XML): Create View dbo.vFOD_ddl_log as Select id, xmlEVENTDATA.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime') as PostTime, xmlEVENTDATA.value('(/EVENT_INSTANCE/ServerName)[1]', 'varchar(256)') as ServerName, xmlEVENTDATA.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)') as DatabaseName, xmlEVENTDATA.value('(/EVENT_INSTANCE/UserName)[1]', 'varchar(256)') as UserName, xmlEVENTDATA.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)') as EventType, xmlEVENTDATA.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') as TSQLCommand, xmlEVENTDATA from FOD_ddl_log --TRIGGER anlegen: CREATE TRIGGER FOD_ddl_log /*ON DATABASE*/ ON ALL SERVER WITH EXECUTE AS 'sa' FOR DDL_DATABASE_LEVEL_EVENTS AS DECLARE @data XML; SET @data = EVENTDATA(); INSERT FOD_ddl_log ( [xmlEVENTDATA] ) VALUES ( @data ) ; GO --- DER CODE SOLL ERST NUR BIS HIER GESTARTET WERDEN!!! /* --Test the trigger: -------------------- Begin Transaction CREATE TABLE TestTable (a int) Rollback CREATE TABLE TestTable (a int) GO DROP TABLE TestTable ; GO SELECT * FROM master.dbo.vFOD_ddl_log order by PostTime desc; GO */ /* --ALLES WIEDER ENTFERNEN, WENN ES NICHTGEWUENSCHT IST: ----------------------------------------------------- --Drop the trigger. DROP TRIGGER master.dbo.FOD_ddl_log --ON DATABASE ON ALL SERVER GO --Drop View vFOD_ddl_log: use master go DROP VIEW dbo.vFOD_ddl_log; GO --Drop table FOD_ddl_log: use master go DROP TABLE dbo.FOD_ddl_log; GO */ /* --Aufwaendiges Logging: http://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/ --Einfaches Logging: http://msdn.microsoft.com/en-us/library/ms173781.aspx --Bedeutung von ÑEvent_Instanceì http://www.sqlteam.com/article/using-ddl-triggers-in-sql-server-2005-to-capture-schema-changes --Die Beschreibung der Events nach Microsoft Technet: http://technet.microsoft.com/en-us/library/ms186438(SQL.90).aspx */
Aufwändiges Logging:
http://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/
Einfaches Logging:
http://msdn.microsoft.com/en-us/library/ms173781.aspx
Bedeutung von „Event_Instance“
http://www.sqlteam.com/article/using-ddl-triggers-in-sql-server-2005-to-capture-schema-changes
Die Beschreibung der Events nach Microsoft Technet:
http://technet.microsoft.com/en-us/library/ms186438(SQL.90).aspx