Como posso diferenciar dois esquemas 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 diferenciá-los para investigar. Encontrei um artigo ( http://www.dba-oracle.com/art_builder_get_schema_syntax.htm ) que fornece os seguintes comandos para despejar as definições de tabela e índice.

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 despejei e diferenciei o spool da saída dos esquemas, havia diferenças triviais em quase todas as linhas, tornando a diferença inútil. Por exemplo, o nome do esquema está 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 diff. Estou interessado em tabelas, índices e gatilhos.

Estou usando o Oracle Database 10g Enterprise Edition Release 10.2.0.3.0

Stuart Woodward
fonte

Respostas:

14

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

https://www.SchemaCrawler.com

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

Sualeh Fatehi
fonte
2
Percebi muito mais tarde que as perguntas frequentes dizem que você precisa divulgar sua afiliação ao projeto de código aberto, e eu comecei a fazer isso agora. No entanto, eu mantenho minha resposta e acho que é uma solução que vale a pena explorar. Eu usei o SchemaCrawler em duas de minhas empresas anteriores e as duas equipes de desenvolvimento concordaram que era uma ferramenta útil para esse fim. (Não, eu não era o chefe.)
Sualeh Fatehi 5/03/11
6

você não precisa de nada disso.

otn.oracle.com

A Oracle possui uma ferramenta gratuita chamada SQL Developer. possui uma diferença de esquema.

Prumo
fonte
4

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

  • Assistente de comparação e sincronização de dados
  • Sincronizar dados entre plataformas de banco de dados

Outro produto que você pode testar é o OraPowerTools :

O OraPowerTools é uma coleção de utilitários nativos de banco de dados Oracle. Essa coleção inclui o OraEdit PRO, um ambiente completo de desenvolvimento Oracle, o DBDiff for Oracle, compara e atualiza quaisquer 2 bancos de dados Oracle, e o DBScripter for Oracle cria scripts sql a partir dos objetos e / ou dados do banco de dados Oracle.

Como alternativa gratuita, você pode conferir este artigo do CodeProject: Schema Compare Tool for Oracle

Esse pequeno aplicativo VB.NET permite comparar esquemas de banco de dados Oracle entre si. Isso é muito útil para garantir que sua instância de desenvolvimento seja igual à sua instância de produção; especialmente ao implementar alterações de front-end.

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

splattne
fonte
2

Utilizamos o DKGAS 'DBDiff for Oracle' , que pode comparar um esquema inteiro ou parte dele (tabelas, sequê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 esse último como base para scripts de atualização de banco de dados.

Andrew
fonte
1

Se você puder executar o Perl, poderá ver o SQLFairy , que deve produzir um dump do seu esquema como SQL. Você pode usar ferramentas de difusão de texto padrão. Há também uma ferramenta que pega dois esquemas e produz os comandos ALTER para torná-los idênticos.

David Pashley
fonte
1

Se você tiver algum dinheiro para gastar, considere usar o PowerDIFF for Oracle: http://www.orbit-db.com . Esta ferramenta compara tabelas, índices e gatilhos de forma excelente e vem com 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.


fonte