SQL Server verfolgt diese Informationen nicht (ich habe halb erwartet, dass sie in der Standardablaufverfolgung angezeigt werden, aber sie sind auch nicht vorhanden). Durch Aktivieren / Deaktivieren wird "modify_date" aktualisiert, Sie können dies jedoch nicht von einer Umbenennung oder Codeänderung unterscheiden. Außerdem wird nur angezeigt, wann die letzte Änderung stattgefunden hat. Wenn Sie ein anderes Tracking wünschen (z. B. wer es getan hat), müssen Sie Auditing oder Trace implementieren. Ich dachte, vielleicht könnte auch ein DDL-Trigger verwendet werden, aber dies scheint eine absichtliche Funktionslücke zu sein:
http://connect.microsoft.com/SQLServer/feedback/details/509242/fire-a-ddl-trigger-when-the-new-syntax-disable-trigger-is-executed
https://connect.microsoft.com/SQLServer/feedback/details/434951/ddl-trigger-still-not-working-disable-trigger-is-this-not-an-event
So können Sie diese Informationen in Zukunft mithilfe eines Audits erfassen:
USE master;
GO
CREATE SERVER AUDIT MyAudit
TO FILE (FILEPATH = 'C:\temp\', MAXSIZE = 1 GB)
WITH (ON_FAILURE = CONTINUE);
GO
ALTER SERVER AUDIT MyAudit WITH (STATE = ON);
GO
USE [your_database];
GO
CREATE DATABASE AUDIT SPECIFICATION schema_db_change
FOR SERVER AUDIT MyAudit
ADD (SCHEMA_OBJECT_CHANGE_GROUP),
ADD (DATABASE_OBJECT_CHANGE_GROUP);
ALTER DATABASE AUDIT SPECIFICATION schema_db_change WITH (STATE = ON);
GO
Deaktivieren Sie nun Ihren Auslöser und führen Sie Folgendes aus:
SELECT event_time, succeeded, server_principal_name, [object_name], [statement]
FROM sys.fn_get_audit_file ('C:\Temp\MyAudit*', NULL, NULL);
Wenn Sie Audit aufgrund von Editionen oder anderen Problemen nicht verwenden können, können Sie dies relativ kostengünstig mithilfe einer serverseitigen Ablaufverfolgung durchführen. Einfach erfassen SQL:BatchCompleted
und optional filtern TextData LIKE '%disable%trigger%'
(Sie müssen testen, ob es in Ihrem Szenario besser ist, die Kosten für den Filter zu bezahlen, um zu vermeiden, dass zu viel gesammelt wird, oder einfach mehr sammeln und später reduzieren. Filter können recht teuer sein, hängen jedoch davon ab auf dem System.)
Ich bin sicher, dass es auch eine Möglichkeit gibt, dies mit erweiterten Veranstaltungen zu tun. Für XEvents und Audit ist jedoch 2008+ erforderlich, und Sie haben keine Version angegeben ...
Besser noch, entfernen Sie die Möglichkeit, Trigger für Benutzer zu ändern, die das Änderungsmanagement umgehen. Idealerweise verfügen Sie sollten der Lage sein , zu bestimmen , wer ohne jemals Blick auf die Datenbank einen Trigger aktiviert oder deaktiviert, weil niemand , dass es ohne zu dokumentieren tun sollte.