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


14

我感觉到,两个大型的复杂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

Answers:


14

我编写的免费开源SchemaCrawler工具将满足您的需求。SchemaCrawler以可扩散的纯文本格式(文本,CSV或XHTML)输出模式的详细信息(表,视图,过程等)。SchemaCrawler还可以以相同的纯文本格式输出数据(包括CLOB和BLOB)。您可以使用标准的diff程序将当前输出与输出的参考版本进行对比。

https://www.SchemaCrawler.com

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


2
后来我才意识到FAQ要求您公开与开源项目的隶属关系,而我现在已经开始这样做了。但是,我确实支持我的回答,并认为这是一个值得探讨的解决方案。我在过去的两家公司中都使用过SchemaCrawler,并且两个开发团队都同意这是用于此目的的有用工具。(不,我不是老板。)
Sualeh Fatehi 2011年

6

您不需要任何这些东西。

otn.oracle.com

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


4

您可以使用TOAD 是用于Oracle开发的出色通用工具。有一个用于测试的试用版。从功能列表中:

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

您可以测试的另一种产品是OraPowerTools

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

作为免费的替代方法,您可以查看此CodeProject文章:适用于Oracle的模式比较工具

这个小型的VB.NET应用程序使您可以相互比较Oracle数据库模式。当确保您的开发实例与生产实例相同时,这非常有用。特别是在实施前端更改时。

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


2

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

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


1

如果您能够运行Perl,则可以查看SQLFairy,它应该能够将您的模式转储为SQL。然后,您可以使用标准的文本区分工具。还有一个工具将采用两个模式并产生ALTER命令以使它们相同。


1

如果您有花钱,可以考虑使用PowerDIFF for Oracle:http : //www.orbit-db.com。该工具可以对表,索引和触发器进行出色的比较,并带有许多比较选项以自定义“ diff”操作。总差异脚本(DDL和DML命令)是可选生成的。您需要ODBC驱动程序才能连接到数据库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.