我觉得两个大型复杂的 Oracle 模式之间应该是相同的,因此决定转储和比较它们以进行调查。我找到了一篇文章 ( 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;
但是,当我转储和比较模式的输出假脱机时,几乎每一行都存在微不足道的差异,这使得差异毫无价值。例如,模式名称包含在每个表定义中。
有没有更好的方法来做到这一点,它将以一种可以使用差异工具轻松比较的格式提供最重要的模式数据。我对表、索引和触发器感兴趣。
我正在使用 Oracle 数据库 10g 企业版 10.2.0.3.0 版
我编写的免费开源SchemaCrawler工具可以满足您的需求。SchemaCrawler 以可区分的纯文本格式(文本、CSV 或 XHTML)输出模式的详细信息(表、视图、过程等)。SchemaCrawler 还可以以相同的纯文本格式输出数据(包括 CLOB 和 BLOB)。您可以使用标准 diff 程序将当前输出与输出的参考版本进行比较。
https://www.SchemaCrawler.com
您需要为您的数据库提供 JDBC 驱动程序。
你不需要这些东西。
otn.oracle.com
Oracle 有一个名为 SQL Developer 的免费工具。它有一个模式差异。
您可以使用TOAD 是用于 Oracle 开发的出色通用工具。有用于测试的试用版。从功能列表中:
您可以测试的另一个产品是OraPowerTools:
作为免费替代方案,您可以查看这篇 CodeProject 文章:Oracle 架构比较工具
1:1:http ://www.toadsoft.com/toad_oracle.htm
我们使用DKGAS 'DBDiff for Oracle',它可以比较整个模式或其中的一部分(表、序列、索引、约束、权限、包、对象和数据),作为比较报告或升级脚本。
我们使用后者作为数据库升级脚本的基础。
如果您能够运行 Perl,您可以查看SQLFairy,它应该能够将您的模式转储为 SQL。然后,您可以使用标准文本差异工具。还有一个工具将采用两个模式并生成 ALTER 命令以使它们相同。
如果您有一些钱可以花,请考虑使用 PowerDIFF for Oracle:http ://www.orbit-db.com 。该工具可以出色地比较表、索引和触发器,并带有许多比较选项来自定义“差异”操作。可选地生成总差异脚本(DDL 和 DML 命令)。您需要一个 ODBC 驱动程序来连接到数据库。