it-swarm-eu.dev

Wann wurden Daten zuletzt in eine Tabelle eingefügt / aktualisiert / gelöscht?

Ich habe this Lösung gefunden, aber diese Informationen gehen jedes Mal verloren, wenn der SQL Server-Dienst neu gestartet wird, oder mit anderen Worten, sie sind nicht dauerhaft.

Gibt es eine andere Möglichkeit, herauszufinden, wann eine Tabelle zuletzt aktualisiert wurde, auch wenn der Server nachträglich heruntergefahren wurde?

7
ivanmp

Wenn die Daten in der anderen Lösung für Sie akzeptabel sind, können Sie einfach Ihre eigene Datenerfassung rollen, damit sie bestehen bleibt. Erstellen Sie beispielsweise eine Tabelle zum Speichern von object_id und zum letzten Suchen/Scannen/Aktualisieren. Machen Sie alle n Minuten einen Schnappschuss der DMV. Überprüfen Sie dann das Maximum im Snapshot. Wenn es größer als das Maximum im Rollup ist, aktualisieren Sie das Rollup. Sie können die Schnappschüsse als Verlauf behalten oder sie im Laufe der Zeit bereinigen, sobald Sie sich zusammengeschlossen haben.

6
Aaron Bertrand

Wenn Sie Zugriff auf die SQL Server Enterprise Edition haben, lesen Sie Change Tracking . Das ist jedoch eine ziemlich komplexe Lösung. Letztendlich ist es möglicherweise einfacher, eine LastUpdated-Spalte hinzuzufügen, wie bereits vorgeschlagen.

3
Dean Goodman

Ich möchte auch darauf hinweisen, dass Sie eine bessere Laufleistung erzielen, indem Sie entweder eine Protokolltabelle erstellen (die Einfügungen/Löschungen/Aktualisierungen verfolgt) oder Flags mit Datumsangaben zu Ihren Datensätzen hinzufügen (was zusätzlichen Speicherplatz pro Datensatz kosten würde).

In beiden Fällen verfolgt SQL Server dies standardmäßig nicht, da dies für DBs mit hohen Transaktionen teuer werden würde

3
Jakub

Dies kann für Sie hilfreich sein:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, 
    last_user_update, *
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Database Name');
0
Aslam Khan