我如何区分两个Oracle 10g模式?

我感觉两个大型复杂的Oracle模式应该是完全相同的,所以决定抛弃和区别它们来调查。 我find了一个文章( http://www.dba-oracle.com/art_builder_get_schema_syntax.htm ),它提供了以下命令来转储表和索引定义。

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; 

然而,当我倾倒和分析输出模式的线轴时,几乎每条线上都有微不足道的差异,导致差异毫无价值。 例如,模式名称包含在每个表格定义中。

有没有更好的方法来做到这一点,将以一种可以使用diff工具轻松比较的格式给出最重要的模式数据。 我对表,索引和触发器感兴趣。

我正在使用Oracle数据库10g企业版版本10.2.0.3.0

免费和开源的SchemaCrawler工具将做你所需要的。 SchemaCrawler以可区分的纯文本格式(文本,CSV或XHTML)输出模式(表,视图,过程等)的详细信息。 SchemaCrawler也可以以相同的纯文本格式输出数据(包括CLOB和BLOB)。 您可以使用标准差异程序来将输出与参考版本的输出进行比较。

https://github.com/sualeh/SchemaCrawler

您将需要为您的数据库提供一个JDBC驱动程序。

你不需要这些东西。

otn.oracle.com

Oracle有一个名为SQL Developer的免费工具。 它有一个模式差异。

您可以使用TOAD是Oracle开发的一个很好的通用工具。 有一个testing版本。 从function列表中:

  • 数据比较和同步向导
  • 跨数据库平台同步数据

你可以testing的另一个产品是OraPowerTools

OraPowerTools是本地oracle数据库实用程序的集合。 该集合包括完整的Oracle开发环境OraEdit PRO,DBDiff for Oracle,比较和升级任何2个Oracle数据库和DBScripter for Oracle,从Oracle数据库的对象和/或数据中创buildsql脚本。

作为免费的替代品,你可以看看这个CodeProject的文章: 架构比较工具为Oracle

这个小的VB.NET应用程序允许您比较Oracle数据库模式和另一个模式。 确保开发实例与生产实例相同时,这非常有用; 特别是在实施前端更改时。

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

我们使用DKGAS的'DBDiff for Oracle' ,它可以比较整个模式或其中的一部分(表,序列,索引,约束,特权,包,对象和数据),作为比较报告或升级脚本。

我们使用后者作为数据库升级脚本的基础。

如果你能运行Perl,你可以看看SQLFairy ,它应该能够把你的模式转储为SQL。 YOu然后可以使用标准的文字差异工具。 还有一个工具将采取两个模式,并产生ALTER命令,使他们相同。

如果您有一些资金需要花费,请考虑使用PowerDIFF for Oracle: http : //www.orbit-db.com 。 这个工具很好地比较了表,索引和触发器,并带有一些比较选项来自定义“差异”操作。 总差分脚本(DDL和DML命令)可选地生成。 您需要一个ODBC驱动程序来连接到数据库。