Journal d'activité de la database MS SQL Server

J'ai une database avec plus d'une centaine de tables. J'ajoute continuellement des colonnes aux tables existantes (si nécessaire) et j'ai aussi ajouté quelques nouvelles tables.

Maintenant, je veux vérifier les changements que j'ai faits au cours des 3 derniers mois. Y a-t-il un journal d'activité dans MS SQL Server 2012 pour cette database spécifique pour suivre les modifications?

En ce moment, vos options sont limitées, vous pouvez essayer ci-dessous et aussi vérifier si elles vous aident, maintenant ..

1.Si vous avez activé Audit, vous pouvez suivre les modifications

Pour vérifier, si vous avez activé Audit, vous pouvez utiliser la requête ci-dessous.

select * from sys.dm_server_audit_status 

Si vous n'avez pas activé Audit, vous pouvez l'activer, en procédant comme suit: Introduction à SQL Server Audit. Je ne reorderais pas d'activer Audit, sauf si vous devez capturer autre chose que ce qui est mentionné dans votre question.

2.Default trace capture également les tables créées, mais cela utilise, le mécanisme de survoler les files pour replace les derniers files lorsque l'espace est plein, donc vous pouvez être hors de la chance (puisque vous requestz pour trois mois), mais essayez ceci: informations d'événement puis-je get par défaut à partir de SQL Server? pour savoir toutes les choses qui sont offertes par défaut

Je voudrais aller avec cette option et essayer de sauvegarder ces files, en fonction du moment où ils rollup (puisque vous avez seulement besoin de vérifier les changements de table)

3.Enfin, une dernière option consiste à interroger Tlog

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

l'option Tlog ci-dessus ne fonctionne que si vous avez des sauvegardes Tlog pendant plus de trois mois et que vous devez les restaurer

Peut-être que cela peut vous aider à mi-path. sys.objects a créé et modifié des dates mais malheureusement, sys.columns ne le fait pas. Cependant, les dernières colonnes ajoutées auront des column_ids plus élevés. Je ne sais pas que vous seriez en mesure de choisir facilement les colonnes supprimées. Notez que les changements autres que les changements de colonne peuvent être reflétés par la date de modification.

 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; 

Pour faciliter cet audit à l'avenir, vous pouvez créer un triggersur DDL qui savea toutes les modifications de schéma dans une table ou dans le contrôle de source si vous utilisez quelque chose comme un projet de données SSDT pour gérer vos modifications.

Pour vérifier toutes les activités dans le passé, vous pouvez travailler avec MSSQL Audit. C'est le meilleur moyen de suivre les changements à tout moment. Veuillez vérifier https://msdn.microsoft.com/en-us/library/cc280386.aspx

Vous pouvez utiliser un triggersur DDL:

 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 

Vous pouvez exécuter un rapport à partir du menu contextuel sur la database:

entrez la description de l'image ici

Il y a plusieurs rapports qui pourraient vous intéresser dans cette list déroulante. Ou vous pourriez éventuellement créer un rapport personnalisé avec juste l'information dont vous avez besoin.

Mon rapport sur le schéma ne date que du 9/3/2016, mais j'ai plus de 1000 tables avec plus de 60 colonnes avec de nombreuses mises à jour quotidiennes. Le vôtre pourrait revenir plus loin.

Si vous avez des sauvegardes datant de 3 mois, disons sur bande, vous pouvez restaurer une sauvegarde sous un nom différent ou sur un autre server, puis exécuter une comparaison de schéma via un outil tiers – Visual Studio, Devart Schema Compare, etc.

Sinon, la mise en place préventive des mécanismes avant que vous en ayez besoin comme décrit par Gameiswar et d'autres est la seule façon.

Prenez des instantanés des définitions de métadonnées via l'option "Générer des scripts …" Tâches de SQL Server Management Studio.

entrez la description de l'image ici

Stockez les files de script générés dans un dossier dont le nom fait reference à la date actuelle. Une fois cela fait plus d'une fois, WinDiff peut être utilisé pour mettre en évidence les changements de database effectués entre deux instantanés. Choisissez les options "Générer des scripts" avec soin et de manière cohérente afin que les comparaisons basées sur le time soient plus bénéfiques.