Tag Archives: 数据库管理

如何比较两个 Schema 的异同

有的时候, DBA 需要迅速找出来同一个 Oracle 数据库上或者不同数据库的两个 Schema 的差异.这种情况应该比较常见,比如测试数据库发布到产品数据库的时候,需要 DBA 做频繁的检查。
应对的办法之一是通过 Toad 这样的 GUI 工具来查找.具体操作应该是很简单的。Oracle 自带的 OEM 工具也有这样的功能( Oracle 变化管理工具包,不过不是免费的)。对于不喜欢图形工具的 DBA 来说, 用手工的方式更容易接受一些。如果已经建立了 Database Link ,可以通过类似如下的 SQL 简单的发现一些差异:

select * from user_tables@a
minus
select * from user_tables@b;

可以考虑先从 用户的 objects 入手,然后表->字段->索引 等等.
在 AskTom 上有一个关于 Schema 比较的讨论,以及一些参予讨论的人提交的 SQL 脚本。
今天测试了一个 Perl 脚本 Schemadiff, 这个工具分两个部分组成,一个执行 Perl 脚本加上一个配置文件。配置文件比较简单。看看就可以清楚。比较结果能够输出为 ASCII 文本与 HTML 两种格式。文本的结果比较类似 Unix 命令 diff 的输出.相对来说,比较直观的了.需要说明的是,使用这个脚本需要安装 DDL::Oracle 包。间接拒绝了对 Perl 不熟悉的朋友.

继续阅读