Comment puis-je différencier deux schémas Oracle 10g?

14

J'ai le sentiment qu'il y a une différence entre deux grands schémas Oracle compliqués qui devraient être identiques, j'ai donc décidé de les vider et de les différencier pour enquêter. J'ai trouvé un article ( http://www.dba-oracle.com/art_builder_get_schema_syntax.htm ) qui donne les commandes suivantes pour vider les définitions de table et d'index.

SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;

Cependant, lorsque j'ai vidé et différé la bobine de sortie des schémas, il y avait des différences triviales sur presque chaque ligne, ce qui rend la différence sans valeur. Par exemple, le nom du schéma est inclus dans chaque définition de table.

Existe-t-il une meilleure façon de le faire qui fournira les données de schéma les plus importantes dans un format qui peut être facilement comparé à l'aide d'un outil de comparaison. Je m'intéresse aux tables, aux index et aux déclencheurs.

J'utilise Oracle Database 10g Enterprise Edition version 10.2.0.3.0

Stuart Woodward
la source

Réponses:

14

L' outil SchemaCrawler gratuit et open-source que j'ai écrit fera ce dont vous avez besoin. SchemaCrawler génère les détails de votre schéma (tables, vues, procédures, etc.) dans un format de texte brut différent (texte, CSV ou XHTML). SchemaCrawler peut également produire des données (y compris des CLOB et des BLOB) dans les mêmes formats de texte brut. Vous pouvez utiliser un programme diff standard pour différencier la sortie actuelle avec une version de référence de la sortie.

https://www.SchemaCrawler.com

Vous devrez fournir un pilote JDBC pour votre base de données.

Sualeh Fatehi
la source
2
J'ai réalisé bien plus tard que la FAQ disait que vous devez divulguer votre affiliation avec le projet open source, et j'ai commencé à le faire maintenant. Cependant, je maintiens ma réponse et je pense que c'est une solution qui mérite d'être explorée. J'ai utilisé SchemaCrawler dans deux de mes anciennes sociétés, et les deux équipes de développement ont convenu que c'était un outil utile à cette fin. (Non, je n'étais pas le patron.)
Sualeh Fatehi
6

vous n'avez besoin de rien de tout cela.

otn.oracle.com

Oracle dispose d'un outil gratuit appelé SQL Developer. il a un schéma différent.

Bob
la source
4

Vous pourriez utiliser TOAD est un excellent outil générique pour le développement Oracle. Il existe une version d'essai pour les tests. Dans la liste des fonctionnalités:

  • Assistant de comparaison et de synchronisation des données
  • Synchroniser les données entre les plateformes de bases de données

Un autre produit que vous pouvez tester est OraPowerTools :

OraPowerTools est une collection d'utilitaires de base de données Oracle natifs. Cette collection comprend OraEdit PRO, un environnement de développement Oracle complet, DBDiff pour Oracle, compare et met à niveau 2 bases de données Oracle et DBScripter pour Oracle, crée des scripts SQL à partir des objets et / ou des données de votre base de données Oracle.

Comme alternative gratuite, vous pouvez consulter cet article CodeProject: Outil de comparaison de schéma pour Oracle

Cette petite application VB.NET vous permet de comparer les schémas de base de données Oracle entre eux. Ceci est très utile pour vous assurer que votre instance de développement est la même que votre instance de production; en particulier lors de la mise en œuvre de modifications frontales.

1 : 1 : http://www.toadsoft.com/toad_oracle.htm

splattne
la source
2

Nous utilisons le DKGAS 'DBDiff for Oracle' , il peut comparer un schéma entier ou une partie de celui-ci (tables, séquences, index, contraintes, privilèges, packages, objets et données), soit comme rapport de comparaison soit comme script de mise à niveau.

Nous utilisons ce dernier comme base pour les scripts de mise à niveau de la base de données.

Andrew
la source
1

Si vous pouvez exécuter Perl, vous pouvez regarder SQLFairy , qui devrait être capable de produire un vidage de votre schéma en tant que SQL. Vous pouvez ensuite utiliser des outils de différenciation de texte standard. Il existe également un outil qui prendra deux schémas et produira les commandes ALTER pour les rendre identiques.

David Pashley
la source
1

Si vous avez de l'argent à dépenser, pensez à utiliser PowerDIFF pour Oracle: http://www.orbit-db.com . Cet outil compare parfaitement les tables, les index et les déclencheurs et est livré avec un certain nombre d'options de comparaison pour personnaliser l'opération «diff». Un script de différence totale (commandes DDL et DML) est généré en option. Vous avez besoin d'un pilote ODBC pour vous connecter à la base de données.


la source