Question

Je cherche un moyen de valider le schéma SQL sur une base de données de production après la mise à jour d'une version de l'application. Si l'application ne correspond pas à la version du schéma de base de données, il doit exister un moyen d'avertir l'utilisateur et de répertorier les modifications nécessaires.

Existe-t-il un outil ou un cadre (à utiliser par programme) avec des fonctionnalités intégrées pour le faire? Ou existe-t-il un algorithme simple pour exécuter cette comparaison?

  

Mise à jour: Les listes de portes rouges "à partir de 395 $". Quelque chose de gratuit? Ou plus sûr que de garder le numéro de version?

Était-ce utile?

La solution

Essayez ce SQL.
- Exécutez-le sur chaque base de données.
- Enregistrez la sortie dans des fichiers texte.
- Différez les fichiers texte.

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 

Autres conseils

J'espère pouvoir vous aider - voici l'article que je suggère de lire:

Comparer les schémas de base de données SQL Server automatiquement

Il décrit comment automatiser le processus de synchronisation et de comparaison de schéma SQL Server à l'aide de T-SQL, de SSMS ou d'un outil tiers.

Vous pouvez le faire par programmation en consultant le dictionnaire de données (sys.objects, sys.columns, etc.) des deux bases de données et en les comparant. Cependant, il existe également des outils tels que Redgate SQL Compare Pro pour: vous. Je l’ai spécifié comme faisant partie de l’outillage d’assurance qualité sur les systèmes d’entrepôt de données à quelques occasions maintenant, y compris celui sur lequel je travaille actuellement. Cela n’était pas du tout un problème pour mon poste actuel, car les DBA l’utilisaient déjà.

La méthodologie de base pour utiliser ces outils consiste à gérer un script de référence qui construit la base de données et à le conserver dans le contrôle de version. Exécutez le script dans une base de données de travail et comparez-le avec votre cible pour voir les différences. Il générera également des scripts de correctif si vous le souhaitez.

Autant que je sache, rien de gratuit ne le fait, sauf si vous avez envie d'écrire votre propre. Redgate est assez bon marché pour être aussi gratuit. Même en tant qu’outil d’assurance qualité qui prouve que la base de données de production n’est pas dans la configuration prévue, vous économiserez son prix d’achat après un incident.

Vous pouvez désormais utiliser gratuitement SQL Admin Studio pour exécuter une comparaison de schémas , une comparaison de données et synchroniser les modifications. Il n'est plus nécessaire de télécharger une clé de licence à partir d'ici http://www.simego.com/Products/ SQL-Admin-Studio

Fonctionne également contre SQL Azure.

[MISE À JOUR: Oui, je suis l'auteur du programme ci-dessus, car il est maintenant gratuit. Je voulais simplement le partager avec la communauté]

Si vous recherchez un outil capable de comparer deux bases de données et de vous montrer la différence que fait Red Gate Comparaison SQL

Vous n'avez pas mentionné le type de SGBDDR utilisé: si les vues INFORMATION SCHEMA sont disponibles dans votre SGBDR, et si vous pouvez référencer les deux schémas du même hôte, vous pouvez interroger les vues INFORMATION SCHEMA pour identifier les différences entre: -les tables -colonnes types de colonne -constraints (par exemple, clés primaires, contraintes uniques, clés étrangères, etc.)

J'ai écrit un ensemble de requêtes exactement dans ce but sur SQL Server pour un travail précédent. Cela a bien fonctionné pour identifier les différences. De nombreuses requêtes utilisaient LEFT JOINs avec IS NULL pour vérifier l'absence d'éléments attendus, d'autres comparaient des éléments tels que les types de colonnes ou les noms de contraintes.

C'est un peu fastidieux, mais c'est possible.

Créez une table et stockez votre numéro de version. Assurez-vous simplement de le mettre à jour si nécessaire.

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

Vous pouvez ensuite vérifier que le numéro de version stocké dans la base de données correspond au code de l'application lors de la configuration de votre application ou à tout autre endroit approprié.

Quel est le SGBDR et quelle est la complexité des changements potentiels?

Peut-être s'agit-il simplement de comparer le nombre de lignes et le nombre d'index de chaque table - si vous devez également vous préoccuper des versions de déclencheur et de procédure stockée, vous avez besoin de quelque chose de plus industriel

Essayez de dbForge Data Compare pour SQL Server . Il peut comparer et synchroniser toutes les bases de données, même les plus grandes. Rapide, facile, donne toujours un résultat correct. Essayez-le sur votre base de données et commentez le produit.

Nous pouvons vous recommander un outil de comparaison SQL fiable offrant une comparaison et une synchronisation plus rapides 3 fois plus rapidement des données de table dans vos bases de données SQL Server. C'est dbForge Data Compare pour SQL Server.

Principaux avantages:

  • Comparaison et synchronisation plus rapides des bases de données volumineuses
  • Prise en charge des sauvegardes natives SQL Server
  • Mappage personnalisé des tables, des colonnes et des schémas
  • Plusieurs options pour ajuster votre comparaison et votre synchronisation
  • Génération de rapports de comparaison et de synchronisation

Essai gratuit de 30 jours et achat sans risque avec garantie de remboursement de 30 jours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top