web-dev-qa-db-fra.com

Journal d'activité de la base de données MS SQL Server

J'ai une base de données avec plus d'une centaine de tables. J'ajoute en permanence des colonnes aux tables existantes (si nécessaire) et j'ai également ajouté quelques nouvelles tables. 

Maintenant, je veux vérifier les modifications que j'ai apportées au cours des 3 derniers mois. Existe-t-il un journal d'activité dans MS SQL Server 2012 pour cette base de données spécifique afin de suivre les modifications.

12
trighati

Pour le moment, vos options sont limitées, vous pouvez essayer ci-dessous et 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 de la manière suivante: Une introduction à Audit de SQL Server .. Je ne recommanderais pas d'activer Audit, sauf si vous devez capturer autre chose que ce qui est mentionné dans votre question.

2.La trace par défaut capture également les tables créées, mais cela utilise, le mécanisme de survol des fichiers pour remplacer les derniers fichiers lorsque l'espace est plein. Vous risquez donc d'être malchanceux (puisque vous demandez une plage de trois mois), mais essayez ceci: Quelles informations sur les événements puis-je obtenir par défaut de SQL Server? pour savoir tout ce qui est offert par trace par défaut

J'irais avec cette option et essayer de sauvegarder ces fichiers, en fonction du moment où ils se cumulent (puisqu'il vous suffit 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 depuis plus de trois mois et que vous devez également les restaurer.

7
TheGameiswar

Peut-être que cela peut vous amener en cours de route. sys.objects a créé et modifié des dates mais malheureusement pas sys.columns. Cependant, les dernières colonnes ajoutées auront des column_ids plus élevés. Je ne sais pas si vous seriez en mesure de choisir des colonnes supprimées aussi facilement. Notez que les modifications autres que les modifications de colonne peuvent être reflétées 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 ultérieurement, vous pouvez créer un déclencheur DDL qui enregistrera toutes les modifications de schéma dans une table ou dans le contrôle de source si vous utilisez un projet de données SSDT pour gérer vos modifications.

7
SMM

Pour vérifier toutes les activités dans le temps passé, vous pouvez utiliser 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

3
Ranjana Ghimire

Si vous avez des sauvegardes remontant à 3 mois, par exemple sur bande, vous pouvez restaurer une sauvegarde sous un nom différent ou sur un autre serveur, puis exécuter une comparaison de schéma via un outil tiers - Visual Studio, Devart Schema Compare, etc. 

Sinon, configurer les mécanismes avant d’en avoir besoin, comme décrit par Gameiswar et d’autres, est le seul moyen.

1
Steve Mangiameli

Vous pouvez utiliser un déclencheur 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  
1
Steve Ford

Vous pouvez générer un rapport à partir du menu contextuel de la base de données:

 enter image description here

Plusieurs rapports pourraient vous intéresser dans cette liste déroulante. Vous pouvez également créer un rapport personnalisé contenant uniquement les informations dont vous avez besoin. 

Mon rapport de schéma ne date que du 31/03/2016, mais j'ai plus de 1000 tables avec plus de 60 colonnes avec de nombreuses mises à jour quotidiennement. Le vôtre pourrait remonter plus loin.

1
Mike

Prenez des instantanés des définitions de métadonnées à l'aide de l'option "Générer des scripts ..." de SQL Server Management Studio.

 enter image description here

Stockez les fichiers de script générés dans un dossier dont le nom fait référence à la date du jour. Une fois cette opération effectuée plusieurs fois, WinDiff peut être utilisé pour mettre en évidence les modifications apportées à la base de données entre deux instantanés. Choisissez les options "Générer les scripts" avec soin et cohérence pour que les comparaisons temporelles soient plus bénéfiques.

0
JohnH