数据对比工具(dbcomparator)¶
神通数据对比工具可以比对两端数据库表结构和数据的一致性,用来在迁移数据或者同步数据后,进行数据验证工作。
主要功能¶
- 支持指定全库级别、模式级别和表级别的比对
- 支持比对表结构和表数据
- 表数据比对支持对比总行数和对比到差异行
- 并行比对提高对比性能
- 支持比对不同编码数据库
- 支持oracle,mysql,sqlserver,dm,pg异构库和神通数据库的比对
- 支持神通闪回查询
控制台使用方式¶
- 运行环境要求JRE1.8及以上版本
- 可执行程序入口在bin中dbcompare.exe或者dbcompare
- 启动程序需要指定一个properties参数文件。使用举例:dbcompare /path/compare.properties
properties文件中参数说明¶
以下left和right表示对比的两端数据源。
- left.url和right.url
描述: 表示左端和右端的jdbc url,必填项。
- left.user和right.user
描述: 表示左端和右端的数据库用户,必填项。
- left.password和right.password
描述: 表示左端和右端的数据库密码,必填项。
- left.filter和right.filter
描述: 指定要比对的对象,支持全库、指定模式、指定表,暂不支持正则匹配。
- 全库级别:用[*]表示,全库比对会忽略掉系统模式。举例:left.filter=*。
- 模式级别:用前缀[schema:]表示,前缀本身大小写不敏感,指定的模式名大小写敏感,模式名中有特殊字符用双引号引起来,模式名之间用英文逗号分隔。举例:left.filter=schema:SYSDBA,CNDB,test,"schema#com"。
- 表级别:用前缀[table:]表示,前缀本身大小写不敏感,指定的表名大小写敏感,表名中有特殊字符用双引号引起来,表名之间用英文逗号分隔;如果表名没有模式名,默认为登录用户默认的模式。举例:left.filter=table:SYSDBA.TEST,CNDB.TEST,abc,"table#abc"。
注解
如果指定schema:和table:,left.filter和right.filter要比对的对象按位置顺序匹配,不按名称匹配,所以可以比对不同名的模式和表。如果想要同名对象比对,需要left.filter和right.filter配置对象顺序一致,或者right方不配置。
注解
如果left.fiter和right.fiter配置对象的个数不同,按照个数较少的一方,忽略掉较多的一方的末尾对象。
- left.scn和right.scn
描述: 指定左右双方的scn号,用于闪回查询比对。
- left.flashbackUseArcLog和right.flashbackUseArcLog
描述: 是指闪回查询时是否使用归档日志进行闪回查询,默认是false,表示不使用,默认闪回查询基于undo日志进行;设置为true,表示使用归档日志进行闪回查询。
- compare.printdetail=false
描述: 表示打印更细节的信息,比如左右双方执行的sql,默认是false。
- compare.report.out=d:/report
描述: 输出对比报告的位置,如果不填,输出到../report目录下。
- compare.report.format=txt|html
描述: 指定对比报告输出的格式,支持txt和html,默认是txt。
- compare.report.max.row=100
描述: 表示html格式对比输出展示多少行的阈值,默认100,如果是负数,输出全部。
- compare.mode=1,2
描述: 表示对比表结构、表数据还是都比较?1-表结构,2-表数据,都比较的话1和2之间用英文逗号分隔。默认值是1,2
- compare.fetchsize=1000
描述: 指定每次获取数据的行数,设置太大,可能会造成内存溢出,默认1000。
- compare.stoponerror=false
描述: 指定异常策略,false表示遇到错误后不停止别的线程对比,true表示停止对比退出,默认为false。
- compare.tc=5
描述: 并行对比的线程数目,默认值是5。
- compare.sharding.size=200000
描述: 指定多少行分片,0表示不分片,默认值是200000。
- compare.endZero.enable=true
描述: 表示是否对比末尾的0,针对数值类型,比如1.0类似数据,默认值是true。
- compare.skip.types=
描述: 表示不对比的数据类型,各数据类型间使用逗号分开,不配置或者配置值为空该参数不生效,默认值是空。
举例: compare.skip.types=clob,blob
- compare.ifNullOrValue=
描述: 如果是数据库值是null值,转换成指定的字符,如果不配置,默认是工具指定字符。
- compare.maxConcatArgsSize=15
描述: 指定concat连接函数最大的参数个数。
compare.properties示例:¶
left.url=jdbc:oscar://192.168.0.111:2003/osrdb
left.user=sysdba
left.password=111111
left.filter=table:SYSDBA.TEST
right.url=jdbc:oscar://192.168.0.112:2003/osrdb
right.user=sysdba
right.password=111111
right.filter=*
compare.mode=1,2
compare.tc=
compare.sharding.size=
compare.stoponerror=
compare.printdetail=true
compare.report.out=d:/report
compare.report.format=html