- Q:单行数据最多多少字段,拼在一起多少长度
A:无限制字段、长度,只要数据能存进数据库 - Q:单表数据最多支持多少行(数量级)
A:可能是最大表空间,也可能是Oracle的最大数量级 - Q:是否包括LOB类型的数据对比
A:是
-
安装Python3.5.4
su - root tar -zxvf Python-3.5.4.tgz cd Python-3.5.4 export LANG=zh_CN.UTF-8 export LANGUAGE=zh_CN.UTF-8 ./configure make make install
-
安装cx_Oracle
su - root tar -zxvf cx_Oracle-6.0.2.tar.gz cd cx_Oracle-6.0.2 python3 setup.py build python3 setup.py install
-
部署程序
su - oracle mkdir test 路径可以自定义 cd test 上传generate.py, compare.py, config.ini至当前目录下 修改config.ini文件中的database(比如本地数据库为orabiz,据库为tnsnames.ora中的配置) 修改数据库的username和password
-
运行
su - oracle cd /home/oracle/test python3 generate.py xxx.json 在另一个数据库中执行完全相同的操作 得到2个result.json文件后,与compare.py放在同一路径下 执行python3 compare.py xxx1.json xxx2.json 最后得到输出DifferentTable.csv
-
注意
generate.py的运行目录在第一个数据库比如是/home/oracle/test 那么在第二个数据库运行时也一定要保证运行目录相同,否则会导致特征值计算错误 生成的error.log为exp运行错误时的出错信息,如果不为空证明在执行exp时发生了错误,请按log排查
- generate.py设计思路:针对表的数据对比,以表为单位,使用Oracle数据库的exp导出命令,使用多进程执行exp命令后生成dmp文件,任意一个dmp文件生成后立即进行sha1值的计算,计算完毕立即删除文件,其中dmp的文件头包含时间等,需要动态跳过这些字符。对于包含类LOB类型的表进行特殊处理,读取表中所有数据并写入到文件中,生成完毕立即计算sha1值,计算完毕立即删除。最后,将得到的特征值字典序列化为json文件。
- compare.py设计思路:将得到的json文件反序列化为dict,然后转化为set,最终结果=2个集合的并集-2个集合的交集,所以最终csv文件中出现的是2个数据库不同的表和对方没有的表*
- PS:理论上不仅仅对比数据,还会对比表的结构;程序使用exp对session消耗很小