Como posso diferenciar dois esquemas do Oracle 10g?

14

Tenho a sensação de que há alguma diferença entre dois grandes esquemas complicados do Oracle, que devem ser idênticos, então decidi despejá-los e analisá-los. Eu encontrei um artigo ( link ) que fornece os seguintes comandos para despejar as definições de tabelas e índices.

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;

No entanto, quando eu despejava e diferia o spool da saída dos esquemas, havia diferenças triviais em quase todas as linhas, fazendo a diferença sem valor. Por exemplo, o nome do esquema é incluído em cada definição de tabela.

Existe uma maneira melhor de fazer isso que fornecerá os dados mais importantes do esquema em um formato que possa ser comparado facilmente usando uma ferramenta de comparação. Estou interessado em tabelas, índices e gatilhos.

Estou usando o Oracle Database 10g Enterprise Edition versão 10.2.0.3.0

    
por Stuart Woodward 16.06.2009 / 08:14

6 respostas

14

A ferramenta gratuita e de código aberto SchemaCrawler que escrevi fará o que você precisa. O SchemaCrawler gera detalhes de seu esquema (tabelas, visualizações, procedimentos e mais) em um formato de texto simples diferenciável (texto, CSV ou XHTML). O SchemaCrawler também pode gerar dados (incluindo CLOBs e BLOBs) nos mesmos formatos de texto simples. Você pode usar um programa diff padrão para diferenciar a saída atual com uma versão de referência da saída.

link

Você precisará fornecer um driver JDBC para o seu banco de dados.

    
por 16.06.2009 / 21:28
6

você não precisa de nada disso.

otn.oracle.com

O Oracle possui uma ferramenta gratuita chamada SQL Developer. tem um diff de esquema.

    
por 07.01.2010 / 21:05
4

Você pode usar o TOAD como uma ótima ferramenta genérica para o desenvolvimento do Oracle . Existe uma versão de teste para teste. Na lista de recursos:

  • Data Compare and Sync wizard
  • Synchronize data across database platforms

Outro produto que você pode testar é OraPowerTools :

OraPowerTools is a collection of native oracle database utilities. This collection includes OraEdit PRO, a complete Oracle Development environment, DBDiff for Oracle, compare and upgrade any 2 oracle databases, and DBScripter for Oracle, create sql scripts out of your oracle database's objects and/or data.

Como alternativa gratuita, você pode conferir este artigo do CodeProject: Ferramenta Comparação de Esquemas para Oracle

This small VB.NET application allows you to compare Oracle database schemas against one another. This is very helpful when making sure your development instance is the same as your production instance; especially when implementing front-end changes.

1 : 1 : link

    
por 16.06.2009 / 08:51
2

Usamos o DKGAS 'DBDiff for Oracle' , ele pode comparar um esquema inteiro ou parte dele (tabelas, seqüências, índices, restrições, privilégios, pacotes, objetos e dados), como um relatório de comparação ou como um script de atualização.

Usamos como o último como base para scripts de atualização de banco de dados.

    
por 31.07.2009 / 16:53
1

Se você conseguir executar o Perl, poderá ver o SQLFairy , que poderá gerar um despejo do seu esquema como SQL Você pode então usar ferramentas de diferenciação de texto padrão. Há também uma uma ferramenta que terá dois esquemas e produzirá o ALTER comandos para torná-los idênticos.

    
por 16.06.2009 / 10:27
1

Se você tiver algum dinheiro para gastar, considere o uso do PowerDIFF for Oracle: link . Esta ferramenta compara tabelas, índices e triggers de forma excelente e inclui várias opções de comparação para personalizar a operação 'diff'. Um script de diferença total (comandos DDL e DML) é gerado opcionalmente. Você precisa de um driver ODBC para se conectar ao banco de dados.

    
por 24.06.2009 / 21:18