Datenerfassung ändern - Woher wissen Sie, wer die Änderung vorgenommen hat?

10

Verfolgung, wer die von CDC identifizierte Änderung vorgenommen hat.

In Anlehnung an meinen datetime-Hack habe ich den gleichen Ansatz versucht, indem ich suser_sname als neues Feld mit dem Standardwert in der cdc change track-Tabelle hinzugefügt habe. Dies scheint jedoch den Eigentümer des cdc-Prozesses und nicht den Benutzer zurückzugeben, der die Änderung für die Basistabelle initiiert hat. Ich habe auch original_login ausprobiert, aber das gibt die Anmeldung für das SQL-Dienstkonto zurück. Wiederum wahrscheinlich mit dem cdc-Prozess verbunden und nicht mit dem Benutzer, der die Änderung initiiert hat.

Ich fand eine ähnliche Frage zum Stapelüberlauf, aber keine andere Antwort als das Verfolgen von Änderungen vom Frontend oder über einen Trigger, was den Zweck der Verwendung von cdc zu vereiteln scheint. Ich würde nicht erneut posten, aber da das Original auf Stackoverflow war, dachte ich, ich würde es hier versuchen, besonders wenn R2 oder 2012 einen besseren Weg eingeführt haben.

Kurz gesagt: Woher weiß ich, wer die Änderung bei der Erfassung von Änderungsdaten vorgenommen hat?

RThomas
quelle

Antworten:

7

Ich habe einen Fehler gemeldet, der jedoch als "beabsichtigt" geschlossen wurde.

http://connect.microsoft.com/SQLServer/feedback/details/283707/cdc-options-to-capture-more-data-username-date-time-etc

Leider müssen Sie eine andere Technik verwenden (z. B. SQL Audit oder einen Trigger), um diese Informationen abzurufen (und einen benutzerdefinierten Code, um zu versuchen, sie so weit wie möglich mit den CDC-Daten zu korrelieren). Ich habe über diesen Mangel auch in meinem Kapitel "SQL Server-Prüfung, Änderungsverfolgung und Änderungsdatenerfassung" im Buch SQL Server MVP Deep Dives (Band 1) geschrieben.

Es tut mir leid, dass ich keine bessere Problemumgehung für Sie habe, aber die integrierten Funktionen von CDC werden Ihre Anforderungen einfach nicht erfüllen. :-(

Aaron Bertrand
quelle
@RThomas Sie können immer noch für Elemente stimmen, auch wenn diese geschlossen sind - sie werden gelegentlich erneut besucht. Noch nützlicher als die Abstimmung ist es, einen Kommentar hinzuzufügen, in dem die Details des Geschäftsbedarfs aufgeführt sind, der diese Informationen nützlich machen würde, einschließlich möglicherweise der Kosten für die Umgestaltung der Dinge, um die fehlende Funktionalität zu umgehen. Ich schrieb ein wenig darüber, wie die qualitativen Daten die quantitativen Daten überwiegen können ...
Aaron Bertrand
Gut zu wissen, dachte ich, geschlossen bedeutet auch geschlossen für die Abstimmung. In meinem Kommentar habe ich darauf hingewiesen, dass Oracle dies in seiner CDC-Implementierung anbietet. Es scheint irgendwie logisch. docs.oracle.com/cd/A91202_01/901_doc/server.901/a90237/…
RThomas
6

Sie könnten die Spalte hinzufügen und einen Auslöser in der Tabelle haben, um den Benutzer beim Einfügen / Aktualisieren / Löschen zu füllen, und cdc würde dies dann speichern. Sie können den Benutzernamen entweder über die Benutzeroberfläche abrufen, indem Sie den Benutzernamen mithilfe von Kontextinformationen oder aus der eigentlichen Sitzung übergeben

SET @CapturedBy = CAST(REPLACE(CAST(CONTEXT_INFO() AS VARCHAR(10)),CHAR(0),'''''''') AS INT)

IF(@CapturedBy) IS NULL
    BEGIN
       SELECT @CapturedBy = P.[Code]
       FROM sys.dm_exec_sessions AS S
         INNER JOIN [dbo].[Person] AS P
          ON S.[login_name] = P.[User_Name]
       WHERE S.[session_id] = @@spid
    END
user2031675
quelle
0

Könnten Sie ein UpdatedBy-Feld zur Haupttabelle hinzufügen, es auf den Standardwert SUSER_NAME () oder ORIGINAL_LOGIN () setzen und diese Daten vom CDC ausfüllen lassen? Ich glaube, das gibt Ihnen die gleichen Informationen, die Sie suchen.

Koch
quelle
Das bringt dir nur den SVC-Account / Besitzer von cdc. Vielleicht hast du bemerkt, dass ich diese Dinge ausprobiert und die Ergebnisse in meiner ursprünglichen Frage bereits im Februar
dokumentiert habe
In Ihrem Kommentar wurde angegeben, dass Sie ihn der ChangeData-Tabelle hinzugefügt haben. Ich spreche von der ursprünglichen Tabelle, auf der die ChangeData-Tabelle basiert. Nachdem ich gepostet hatte, wurde mir jedoch klar, dass dies nur für Beilagen funktionieren würde
Chef
Ahhhh, habe das nicht verstanden. Ich verstehe, was du jetzt sagst.
RThomas