首页
>
挨踢(IT),
数据库 > D瓜哥的开源项目:CompareDatamodel
D瓜哥的开源项目:CompareDatamodel
今天在Github上发布了一个开源的数据库模型对比工具:CompareDatamodel。写篇文章做个说明。希望对需要使用的朋友有所帮助。
其实这个项目,早在今年三月份就开发完了。当时,创建这个项目也是缘于”工作所迫”。鉴于我们在进行项目实施时,经常需要对比新旧模型的差异。而且,这些工作繁琐,极易出错。需要特别小心。所以,开发了这个工具,帮我们完成这个工作。
另外,说明一下,这个工具刚刚开发完成。D瓜哥也只是做了小范围的测试。所以,难免有不完善的地方。如有问题,请及时反馈。以便于D瓜哥进行更正。
处理过程
- 首先从数据库中查找新旧模型各自所拥有的表。
- 然后,依次对比各个表名。把表分为三类:
- 新模型独有的;
- 旧模型独有的;
- 新旧模型共有的
将这三种表同时存储的到三个不同的文件中。
- 再然后,对比新旧模型共有的表,再对列名,数据类型,长度以及精度(如果没有精度,比如varchar2等,则按0进行处理)比较。分为两类:
- 完全一样的,这个存储的一个文件中;
- 新旧模型有差异的,这类也存储到一个文件中,同时记录新旧模型的差异。
使用说明
将下载到某个目录(为了防止不必要的错误出现,请注意这个目录的完整路径不包含中文以及空格。)下,然后打开config/config.txt,对其连接数据库的信息进行配置。需要配置的配置项如下:
04 | #存放结构(列名、类型、长度以及精度)完全一样的表名的文件 |
05 | fields_same_table_file|fields_same_table.txt |
07 | #存放结构(列名、类型、长度以及精度)有差异的表名的文件 |
08 | fields_diff_table_file|fields_diff_table.txt |
10 | #########数据库连接信息########### |
11 | #旧数据库的链接信息(注意:sid必须是在Oracle Client配置的服务名) |
16 | #新数据库的链接信息(注意:sid必须是在Oracle Client配置的服务名) |
注意:中间的竖线不要删除!否则会报错。
配置完成中,打开命令提示符(或者UNIX/Linux的终端),跳转到src目录中。然后,输入如下指令,开始运行:
1 | tclsh compare-oracle.tcl |
当看到:
1 | OK! Please see the result in the output files. |
则表示模型对比完成。请到指定目录下,查看对比结果的输出文件。
结果查看
一共分为五个文件。其中四个文件在第一行就会自我说明一下,存储的是哪个结果。这个就不再赘述。只有存储表差异的那个文件,结果有点复杂,不容易看懂。这里做个简要说明。格式如下:
01 | *********** Table Name : TEST_TAB1 ******* |
03 | ----------Diff Fields------------ |
07 | ----------Old Filds--------------- |
13 | ----------New Filds--------------- |
说明:
Name,指的是字段名称;
Type,指的是数据类型;
Lgth,指的是数据长度,如果没有长度,如date,则显示为0;
Scal,指的是数据精度,如果没有,比如varchar2,则显示为0.
“Diff Fields”部分,是两个表中,有相同的列名,但是列的数据类型、长度以及精度可能存在差异。“Old”列,指的是旧模型下的字段信息,“New”列,指的是新模型下的字段信息。
“Old Filds”部分,是只有旧模型才有的字段以及字段信息。
“New Filds”部分,是 只有新模型才有的字段以及字段信息。
另外,还需要注意:新旧模型各个字段的信息,会以列对齐的方式展示。请注意查看。
很多朋友可能没有接触过TCL,参考资料中有关于搭建TCL开发环境以及运行环境的一个简要说明,希望对大家有所帮助。
参考资料:
- 百度百科中对TCL的介绍
- 基于Eclipse的TCL开发环境搭建(需要翻墙)
- TCL中连接Oracle数据库的库