webentwicklung-frage-antwort-db.com.de

Aktivitätsprotokoll der Datenbank MS SQL Server

Ich habe eine Datenbank mit mehr als hundert Tabellen. Ich füge fortlaufend Spalten zu vorhandenen Tabellen hinzu (falls erforderlich) und ich habe auch einige neue Tabellen hinzugefügt. 

Jetzt möchte ich überprüfen, welche Änderungen ich in den letzten 3 Monaten vorgenommen habe. Gibt es in MS SQL Server 2012 ein Aktivitätsprotokoll für diese bestimmte Datenbank, um Änderungen zu verfolgen.

12
trighati

Im Moment sind Ihre Optionen begrenzt. In der Zukunft können Sie es weiter unten ausprobieren und prüfen, ob sie Ihnen jetzt helfen.

1.Wenn Sie die Überwachung aktiviert haben, können Sie die Änderungen verfolgen 

Um zu überprüfen, ob Sie die Überwachung aktiviert haben, können Sie die folgende Abfrage verwenden.

select * from sys.dm_server_audit_status

Wenn Sie die Überwachung nicht aktiviert haben, können Sie sie wie folgt aktivieren: Eine Einführung in SQL Server Audit .. Ich würde die Aktivierung der Überwachung nicht empfehlen, es sei denn, Sie müssen andere als die in Ihrer Frage genannten Informationen erfassen

2.Default-Ablaufverfolgung erfasst auch erstellte Tabellen. Hierbei wird jedoch der Dateimechanismus verwendet, um die letzten Dateien zu überschreiben, wenn der Speicherplatz voll ist. Daher kann es sein, dass Sie kein Glück haben (da Sie einen Zeitraum von drei Monaten benötigen). Versuchen Sie Folgendes: Welche Ereignisinformationen kann ich standardmäßig von SQL Server erhalten? um herauszufinden, welche Dinge standardmäßig mit trace angeboten werden

Ich würde mich für diese Option entscheiden und versuchen, diese Dateien zu sichern, je nachdem, wann sie aufgerollt werden (da Sie nur Tabellenänderungen überprüfen müssen).

3. Endlich Eine letzte Option ist die Abfrage von Tlog

select * from fn_dblog(null,null) where [transaction name]='CREATE TABLE'

die obige Tlog-Option funktioniert nur, wenn Sie über drei Monate lang über Tlog-Sicherungen verfügen und diese auch wiederherstellen müssen

7
TheGameiswar

Vielleicht kann dies Sie auf halber Strecke bringen. sys.objects hat Datumsangaben erstellt und geändert, sys.columns jedoch nicht. Die zuletzt hinzugefügten Spalten haben jedoch höhere column_ids. Ich weiß nicht, dass Sie gelöschte Spalten so leicht herausgreifen können. Beachten Sie, dass andere Änderungen als Spaltenänderungen am Änderungsdatum angezeigt werden können.

select  s.name [schema], o.name [table], o.modify_date [table_modify_date], c.column_id, c.name
from    sys.schemas s
join    sys.objects o on o.schema_id = s.schema_id
left    join sys.columns c on c.object_id = o.object_id
where   o.type = 'U'    --user tables only
and     o.modify_date >= dateadd(M,-3, getdate())
order   by s.name, o.name, column_id;

Um diese Prüfung in Zukunft einfacher zu machen, können Sie einen DDL-Trigger erstellen, der alle Schemaänderungen in einer Tabelle oder in der Quellcodeverwaltung protokolliert, wenn Sie zum Verwalten Ihrer Änderungen ein SSDT-Datenprojekt verwenden.

7
SMM

Um alle Aktivitäten der vergangenen Zeit zu überprüfen, können Sie mit MSSQL Audit arbeiten. Dies ist der beste Weg, um Änderungen jederzeit nachverfolgen zu können. Bitte überprüfen Sie https://msdn.Microsoft.com/en-us/library/cc280386.aspx

3
Ranjana Ghimire

Wenn Sie Backups haben, die 3 Monate zurückliegen (z. B. auf Band), können Sie ein Backup unter einem anderen Namen oder auf einem anderen Server wiederherstellen und dann einen Schemavergleich mithilfe eines Drittanbieter-Tools ausführen - Visual Studio, Devart Schema Compare usw. 

Andernfalls ist die präventive Einrichtung der Mechanismen, bevor Sie sie brauchen, wie von Gameiswar und anderen beschrieben, der einzige Weg.

1

Sie könnten einen DDL-Trigger verwenden:

CREATE TRIGGER ColumnChanges  
ON DATABASE   
FOR ALTER_TABLE  
AS  
DECLARE @data XML  
SET @data = EVENTDATA()  
INSERT alter_table_log   
   (PostTime, DB_User, Event, TSQL)   
   VALUES   
   (GETDATE(),   
   CONVERT(nvarchar(100), CURRENT_USER),   
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),   
   @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;  
GO  
1
Steve Ford

Sie können einen Bericht über das Kontextmenü der DB ausführen:

 enter image description here

Es gibt mehrere Berichte, die Sie für diese Dropdownliste interessieren könnten. Oder Sie erstellen möglicherweise einen benutzerdefinierten Bericht mit den Informationen, die Sie benötigen. 

Mein Schemabericht geht nur auf den 9/3/2016 zurück, aber ich habe mehr als 1000 Tabellen mit mehr als 60 Spalten und täglich viele Aktualisierungen. Deine könnte weiter zurückgehen.

1
Mike

Diese Abfrage gibt das letzte Erstellungsdatum und das Änderungsdatum der gespeicherten Prozeduren an:

select name,create_date,modify_date
from sys.procedures
order by modify_date desc
0
Malik Usman

Machen Sie Schnappschüsse der Metadatendefinitionen über die Taskoption "Generate Scripts" aus dem SQL Server Management Studio.

 enter image description here

Speichern Sie die generierten Skriptdateien in einem Ordner, dessen Name auf das aktuelle Datum verweist. Wenn dies mehr als einmal durchgeführt wurde, kann WinDiff verwendet werden, um die zwischen zwei Schnappschüssen vorgenommenen Datenbankänderungen hervorzuheben. Wählen Sie die Optionen "Skripts generieren" sorgfältig und konsistent aus, sodass zeitbasierte Vergleiche vorteilhafter sind.

0
JohnH