2009-06-11 3 views

Antwort

5

zunächst eine Logging-Tabelle erstellen:

CREATE TABLE modlog(
    datestamp smalldatetime, 
    username varchar(255) NOT NULL DEFAULT SYSTEM_USER 
    ); 

Dann einen UPDATE-Trigger auf der Tabelle erstellen:

CREATE TRIGGER mytable_mods ON mytable FOR UPDATE AS 
    INSERT INTO modlog(smalldatetime) VALUES (GETDATE()); 

einfach in die modlog Tabelle späht, um herauszufinden, welcher Benutzer die Tabelle aktualisiert, und wann. Sie könnten sich etwas einfallen lassen und bestimmte Felder aktualisieren, die gerade aktualisiert werden. Ein anderer Ansatz wäre, eine Ablaufverfolgung in SQL Server Profiler einzurichten, filtern Sie es aus, so dass es nur Updates für diese Tabelle zurückgibt und offen bleibt, bis etwas passiert.

Wenn Ihre Anwendungen umfassen die Application Parameter in ihre Verbindungszeichenfolgen Sie app_name verwenden können() statt SYSTEM_USER, die den Namen der Anwendung protokolliert, das Entfernen der zusätzlichen Detektivarbeit. Wenn Sie wissen, dass der Benutzer noch nützlich ist, können Sie herausfinden, was sie tun, um das Update auszulösen.

+0

Wird der Benutzername identifiziert? –

+0

@richard, wenn Sie den Benutzernamen mit einer bestimmten Anwendung korrelieren können, sollte dies funktionieren. –

+0

Ja, damit wird der Benutzername identifiziert, der der SQL Server-Sitzung zugeordnet ist, die das Update ausführt. Hoffentlich wissen, der Benutzer und die Zeit wird genug sein, um herauszufinden, welche App verantwortlich war. – richardtallent

1

Erstellen Sie einen Auslöser, um das Update rückgängig zu machen. Warten Sie, bis die App fehlschlägt. Es kann ein sehr einfacher Auslöser sein:

CREATE TRIGGER BugOffRogueProgram 
ON MyConfigTable 
FOR UPDATE 
AS 
BEGIN 
ROLLBACK TRAN 
END 

0

Die bereitgestellten Antworten sind bisher absolut vor Ort - das ist so, wie es in SQL Server 2005.

nur als kurzer Teaser zu tun : In SQL Server 2008 gibt es eine neue Funktion mit dem Namen Change Data Capture, die dieses genaue Szenario "out of the box" unterstützt, ohne dass Sie Trigger schreiben und Tabellen selbst aktualisieren müssen. Ziemlich praktisch!

Marc

Verwandte Themen