我是靠谱客的博主 碧蓝人生,最近开发中收集的这篇文章主要介绍如何比较两个 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 不熟悉的朋友.


AnySQL 有一个 OCIDiff 工具.我没有使用过,看他的说明是只比较表结构的,不知道现在是否已经包括了对其它数据对象的改进.
上面大致说了几种方法,我比较喜欢的是 SQL 脚本:永远是跨平台的. Perl 脚本作为备用,需要详细检查的时候, Schemadiff 就派上了用场. 我用的时候发现这个脚本似乎没有单独针对分区表的检查.回头修改一下看看.
BTW: MySQL 的方法应该也是类似的

Google+

最后

以上就是碧蓝人生为你收集整理的如何比较两个 Schema 的异同的全部内容,希望文章能够帮你解决如何比较两个 Schema 的异同所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部