2010-11-30 2 views
3

est-il un moyen d'obtenir la somme de contrôle de base de données à l'aide des fonctions système SQL Server?Vérifier les modifications apportées à une base de données SQL Server?

Ou d'une autre façon de déterminer rapidement s'il y a des changements dans la base de données? Je ne veux utiliser aucun logiciel d'analyse de base de données spécifique pour cela.

Je cherche les changements dans la base de données (changements de schéma/d'objet, changements de données).

J'utilise SQL Server 2008.

+1

Voulez-vous parler schéma/changements d'objet ou des changements de données, ou les deux? – AdaTheDev

+1

Quelle version de Microsoft SQL Server? – mrdenny

+0

Pourquoi ne pas utiliser un logiciel d'analyse de base de données spécifique? – codeulike

Répondre

3

Vous pourriez trouver les informations contenues dans le journal des transactions ...

Utilisez

DBCC LOG(<database name>[,{0|1|2|3|4}]) 

0 - Informations de base Log (par défaut)

1 - Informations détaillées

2 - Informations sur la longueur

3 - détaillée

4 - Full

Exemple:

DBCC log (MY_DB, 4) 

Le résultat est un peu cryptique et est mieux utilisé avec un outil tiers pensée ...

Crédits: http://www.mssqlcity.com/Articles/KnowHow/ViewLog.htm

EDIT:

Vous pouvez essayer

Select * from ::fn_dblog(null, null) 

Cette page contient des informations utiles sur les résultats retournés par les fonctions ... http://www.novicksoftware.com/udfofweek/Vol1/T-SQL-UDF-Volume-1-Number-27-fn_dblog.htm

Gardez à l'esprit que ces procédures ne sont pas pour le public et donc pas facile à comprendre. L'autre possibilité consiste à ajouter des triggers sur toutes les tables. Mais c'est en revanche beaucoup de travail.

+0

Et comment puis-je analyser ce résultat? Il n'est pas possible de calculer les lignes à partir du journal DBCC –

+0

Eh bien, le problème ici est que vous ne voulez pas utiliser d'outils tiers et que vous demandiez des fonctions système. C'est tout. –

+0

Oui, vous avez raison. C'est ce que je veux vraiment. Ce serait génial si quelque chose comme ça pour la base de données existait CHECKSUM_AGG http://stackoverflow.com/questions/36/check-for-changes-to-a-sql-table –

1

Une approche pour enregistrer/enregistrer les modifications du schéma est d'utiliser DDL triggers comme de SQL Server 2005.

Vous pouvez les mettre en place sur une base de données pour tirer sur des types spécifiques de changements de schéma (par exemple CREATE_PROCEDURE, ALTER_PROCEDURE), puis maintenir n'importe quel journal que vous voulez.

0

Les changements dans la forme des mises à jour des tables sous la forme de mises à jour/insertions/suppressions peuvent être suivis à l'aide d'un déclencheur qui mettrait à jour l'horodatage dans une table principale. Nous devons maintenir une table contenant le nom des tables et la dernière mise à jour. Toute modification dans la table individuelle mettrait à jour cette table dans la ligne correspondante!

Les modifications de schéma peuvent également être gérées au moyen de déclencheurs qui mettraient à jour la table des tables. Peut être dans votre cas, nous pouvons avoir des colonnes supplémentaires avec le type de données BOOL qui indiquerait si la modification était dans le schéma ou les données.

0

J'ai trouvé que l'édition Enterprise de SQL Server a une fonction appelée Change Data Capture

Cette captera toute insertion, les mises à jour, supprime la base de données. Malheureusement, je n'ai pas d'édition Enterprise pour tester cela. J'ajouterai des liens ici pour que ce soit utile à quelqu'un dans le futur.

Enable/Disable Change Data Capture

Good writeup on how to use this feature

EDIT: Pour l'édition standard, il est Change Tracking.

Questions connexes: Auditing SQL Server data changes

Questions connexes