Come posso diff due schemi Oracle 10g?


14

Ho la sensazione che ci sia qualche differenza tra due grandi schemi Oracle complicati che dovrebbero essere identici, quindi ho deciso di scaricarli e diffonderli per indagare. Ho trovato un articolo ( http://www.dba-oracle.com/art_builder_get_schema_syntax.htm ) che fornisce i seguenti comandi per scaricare la tabella e indicizzare le definizioni.

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;

Tuttavia, quando ho scaricato e diffuso lo spool dell'output degli schemi, c'erano quasi banali differenze su quasi ogni riga che rendeva la differenza inutile. Ad esempio, il nome dello schema è incluso in ogni definizione di tabella.

C'è un modo migliore per farlo che fornirà i dati dello schema più importanti in un formato che può essere facilmente confrontato usando uno strumento diff. Sono interessato a tabelle, indici e trigger.

Sto utilizzando Oracle Database 10g Enterprise Edition versione 10.2.0.3.0

Risposte:


14

Lo strumento gratuito e open source SchemaCrawler che ho scritto farà ciò di cui hai bisogno. SchemaCrawler fornisce i dettagli del tuo schema (tabelle, viste, procedure e altro) in un formato di testo semplice diffondibile (testo, CSV o XHTML). SchemaCrawler può anche generare dati (inclusi CLOB e BLOB) negli stessi formati di testo normale. È possibile utilizzare un programma diff standard per diff l'output corrente con una versione di riferimento dell'output.

https://www.SchemaCrawler.com

Dovrai fornire un driver JDBC per il tuo database.


2
Mi sono reso conto molto più tardi che le FAQ dicono che devi rivelare la tua affiliazione con il progetto open source, e ho iniziato a farlo ora. Tuttavia, resto fedele alla mia risposta e penso che sia una soluzione che vale la pena esplorare. Ho usato SchemaCrawler in due delle mie aziende passate ed entrambi i team di sviluppo hanno concordato che si trattava di uno strumento utile per questo scopo. (No, non ero il capo.)
Sualeh Fatehi,

6

non hai bisogno di nessuna di queste cose.

otn.oracle.com

Oracle ha uno strumento gratuito chiamato SQL Developer. ha uno schema diff.


4

È possibile utilizzare TOAD è un ottimo strumento generico per lo sviluppo di Oracle. Esiste una versione di prova per i test. Dall'elenco delle funzionalità:

  • Procedura guidata Confronto e sincronizzazione dati
  • Sincronizza i dati su piattaforme di database

Un altro prodotto che potresti provare è OraPowerTools :

OraPowerTools è una raccolta di programmi di utilità per database Oracle originali. Questa raccolta include OraEdit PRO, un ambiente di sviluppo Oracle completo, DBDiff per Oracle, confronta e aggiorna qualsiasi database Oracle 2 e DBScripter per Oracle, crea script sql dagli oggetti e / o dai dati del tuo database Oracle.

Come alternativa gratuita puoi leggere questo articolo di CodeProject: Schema Compare Tool for Oracle

Questa piccola applicazione VB.NET consente di confrontare gli schemi del database Oracle l'uno con l'altro. Questo è molto utile per assicurarsi che l'istanza di sviluppo sia uguale all'istanza di produzione; soprattutto quando si implementano modifiche front-end.

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


2

Usiamo DKGAS 'DBDiff per Oracle' , può confrontare un intero schema o parte di esso (tabelle, sequenze, indici, vincoli, privilegi, pacchetti, oggetti e dati), come report di confronto o come script di aggiornamento.

Usiamo quest'ultimo come base per gli script di aggiornamento del database.


1

Se sei in grado di eseguire Perl, puoi guardare SQLFairy , che dovrebbe essere in grado di produrre un dump del tuo schema come SQL. È quindi possibile utilizzare strumenti di diffing del testo standard. C'è anche uno strumento che prenderà due schemi e produrrà i comandi ALTER per renderli identici.


1

Se hai del denaro da spendere, considera di utilizzare PowerDIFF per Oracle: http://www.orbit-db.com . Questo strumento confronta tabelle, indici e trigger in modo eccellente e viene fornito con una serie di opzioni di confronto per personalizzare l'operazione "diff". Uno script di differenza totale (comandi DDL e DML) viene generato facoltativamente. È necessario un driver ODBC per connettersi al database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.