首页 > 挨踢(IT), 数据库 > D瓜哥的开源项目:CompareDatamodel

D瓜哥的开源项目:CompareDatamodel

2012年12月16日 发表评论 阅读评论 336 人阅读    

  今天在Github上发布了一个开源的数据库模型对比工具:CompareDatamodel。写篇文章做个说明。希望对需要使用的朋友有所帮助。

  其实这个项目,早在今年三月份就开发完了。当时,创建这个项目也是缘于”工作所迫”。鉴于我们在进行项目实施时,经常需要对比新旧模型的差异。而且,这些工作繁琐,极易出错。需要特别小心。所以,开发了这个工具,帮我们完成这个工作。

  另外,说明一下,这个工具刚刚开发完成。D瓜哥也只是做了小范围的测试。所以,难免有不完善的地方。如有问题,请及时反馈。以便于D瓜哥进行更正。

处理过程

  1. 首先从数据库中查找新旧模型各自所拥有的表。
  2. 然后,依次对比各个表名。把表分为三类:
    1. 新模型独有的;
    2. 旧模型独有的;
    3. 新旧模型共有的

    将这三种表同时存储的到三个不同的文件中。

  3. 再然后,对比新旧模型共有的表,再对列名,数据类型,长度以及精度(如果没有精度,比如varchar2等,则按0进行处理)比较。分为两类:
    1. 完全一样的,这个存储的一个文件中;
    2. 新旧模型有差异的,这类也存储到一个文件中,同时记录新旧模型的差异。

使用说明

  将下载到某个目录(为了防止不必要的错误出现,请注意这个目录的完整路径不包含中文以及空格。)下,然后打开config/config.txt,对其连接数据库的信息进行配置。需要配置的配置项如下:

#对比结果文件的输出目录。
result_output_directory|D://TclWS

#存放结构(列名、类型、长度以及精度)完全一样的表名的文件
fields_same_table_file|fields_same_table.txt

#存放结构(列名、类型、长度以及精度)有差异的表名的文件
fields_diff_table_file|fields_diff_table.txt

#########数据库连接信息###########
#旧数据库的链接信息(注意:sid必须是在Oracle Client配置的服务名)
old_db_sid|LOCAL_ORCL
old_db_user|scott
old_db_password|tiger

#新数据库的链接信息(注意:sid必须是在Oracle Client配置的服务名)
new_db_sid|LOCAL_ORCL
new_db_user|hr
new_db_password|hr

  注意:中间的竖线不要删除!否则会报错。

  配置完成中,打开命令提示符(或者UNIX/Linux的终端),跳转到src目录中。然后,输入如下指令,开始运行:


tclsh compare-oracle.tcl

当看到:


OK! Please see the result in the output files.
The files is at *

则表示模型对比完成。请到指定目录下,查看对比结果的输出文件。

结果查看

  一共分为五个文件。其中四个文件在第一行就会自我说明一下,存储的是哪个结果。这个就不再赘述。只有存储表差异的那个文件,结果有点复杂,不容易看懂。这里做个简要说明。格式如下:


*********** Table Name :  TEST_TAB1  *******
	  --Old--             		--New--             
----------Diff Fields------------
  *Name*  ID                  		ID                  
  *Lgth*  10                  		15                  

----------Old Filds---------------
  *Name*  BIRTHDAY            		                    
  *Type*  DATE                		                    
  *Lgth*  0                   		                    
  *Scal*  0                   		                    

----------New Filds---------------
  *Name*                      		AGE                 
  *Type*                      		NUMBER              
  *Lgth*                      		3                   
  *Scal*                      		0

  说明:
   Name,指的是字段名称;
   Type,指的是数据类型;
   Lgth,指的是数据长度,如果没有长度,如date,则显示为0;
   Scal,指的是数据精度,如果没有,比如varchar2,则显示为0.

  “Diff Fields”部分,是两个表中,有相同的列名,但是列的数据类型、长度以及精度可能存在差异。“Old”列,指的是旧模型下的字段信息,“New”列,指的是新模型下的字段信息。

  “Old Filds”部分,是只有旧模型才有的字段以及字段信息。

  “New Filds”部分,是 只有新模型才有的字段以及字段信息。

  另外,还需要注意:新旧模型各个字段的信息,会以列对齐的方式展示。请注意查看。

  很多朋友可能没有接触过TCL,参考资料中有关于搭建TCL开发环境以及运行环境的一个简要说明,希望对大家有所帮助。

参考资料:

  1. 百度百科中对TCL的介绍
  2. 基于Eclipse的TCL开发环境搭建(需要翻墙)
  3. TCL中连接Oracle数据库的库


作 者: D瓜哥,https://www.diguage.com/
原文链接:https://wordpress.diguage.com/archives/78.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分类: 挨踢(IT), 数据库 标签: , ,