¿Cómo puedo diferenciar dos esquemas de Oracle 10g?

14

Tengo la sensación de que hay alguna diferencia entre dos grandes esquemas complicados de Oracle que deberían ser idénticos, así que decidí volcarlos y diferenciarlos para investigar. Encontré un artículo ( http://www.dba-oracle.com/art_builder_get_schema_syntax.htm ) que proporciona los siguientes comandos para volcar las definiciones de tabla 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;

Sin embargo, cuando volqué y difundí el carrete de la salida de los esquemas, hubo diferencias triviales en casi todas las líneas, lo que hizo que la diferencia no tuviera valor. Por ejemplo, el nombre del esquema se incluye en cada definición de tabla.

¿Hay alguna manera mejor de hacer esto que proporcione los datos de esquema más importantes en un formato que se pueda comparar fácilmente con una herramienta diff. Estoy interesado en tablas, índices y disparadores.

Estoy usando Oracle Database 10g Enterprise Edition Release 10.2.0.3.0

Stuart Woodward
fuente

Respuestas:

14

La herramienta gratuita y de código abierto SchemaCrawler que escribí hará lo que necesita. SchemaCrawler genera detalles de su esquema (tablas, vistas, procedimientos y más) en un formato de texto sin formato (texto, CSV o XHTML). SchemaCrawler también puede generar datos (incluidos CLOB y BLOB) en los mismos formatos de texto sin formato. Puede usar un programa diff estándar para diferenciar la salida actual con una versión de referencia de la salida.

https://www.SchemaCrawler.com

Deberá proporcionar un controlador JDBC para su base de datos.

Sualeh Fatehi
fuente
2
Más tarde me di cuenta de que las preguntas frecuentes dicen que debe divulgar su afiliación al proyecto de código abierto, y he comenzado a hacerlo ahora. Sin embargo, mantengo mi respuesta y creo que es una solución que vale la pena explorar. He usado SchemaCrawler en dos de mis compañías anteriores, y ambos equipos de desarrollo acordaron que era una herramienta útil para este propósito. (No, yo no era el jefe)
Sualeh Fatehi
6

No necesitas nada de esto.

otn.oracle.com

Oracle tiene una herramienta gratuita llamada SQL Developer. tiene un esquema diff.

Beto
fuente
4

Podría usar TOAD es una gran herramienta genérica para el desarrollo de Oracle. Hay una versión de prueba para probar. De la lista de características:

  • Asistente de comparación y sincronización de datos
  • Sincronice datos entre plataformas de bases de datos

Otro producto que podría probar es OraPowerTools :

OraPowerTools es una colección de utilidades de base de datos Oracle nativas. Esta colección incluye OraEdit PRO, un entorno completo de desarrollo de Oracle, DBDiff para Oracle, compara y actualiza 2 bases de datos oracle y DBScripter para Oracle, crea scripts sql a partir de los objetos y / o datos de la base de datos Oracle.

Como alternativa gratuita, puede consultar este artículo de CodeProject: Schema Compare Tool for Oracle

Esta pequeña aplicación VB.NET le permite comparar esquemas de bases de datos Oracle entre sí. Esto es muy útil cuando se asegura de que su instancia de desarrollo sea la misma que su instancia de producción; especialmente al implementar cambios frontales.

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

splattne
fuente
2

Utilizamos el 'DBDiff para Oracle' de DKGAS , puede comparar un esquema completo o parte del mismo (tablas, secuencias, índices, restricciones, privilegios, paquetes, objetos y datos), ya sea como un informe de comparación o como un script de actualización.

Usamos este último como base para los scripts de actualización de la base de datos.

Andrés
fuente
1

Si puede ejecutar Perl, puede mirar SQLFairy , que debería poder generar un volcado de su esquema como SQL. A continuación, puede utilizar herramientas de texto estándar diferentes. También hay una herramienta que tomará dos esquemas y producirá los comandos ALTER para hacerlos idénticos.

David Pashley
fuente
1

Si tiene algo de dinero para gastar, considere usar PowerDIFF para Oracle: http://www.orbit-db.com . Esta herramienta compara tablas, índices y disparadores excelentemente y viene con una serie de opciones de comparación para personalizar la operación 'diff'. Opcionalmente, se genera un script de diferencia total (comandos DDL y DML). Necesita un controlador ODBC para conectarse a la base de datos.


fuente