1. 定义
tablediff是以row为单位对比通过CDC等工具同步的SUNDB的两张表的工具。与其他工具不同,它以java为基础而不是二进制,执行时也需要java。
用于两个服务器通过cyclone执行一主一备时查看table间的同步是否正常,对没有进行同步的row进行同步操作。
不使用选项进行启动,需要另外创建配置文件。通过读取配置文件可获取source, target间的关系或位置等,并输出报告未同步row的log文件和报告执行同步结果的log。
配置文件: 配置文件的路径为$SUNDB_DATA/conf/tablediff.conf,可设置source和target的连接信息,同步策略等。
此工具有2个执行命令语,各为TableDiff与TableSync。
2. 用法
SOURCE, TARGET表设置选项
以下为定义源表(source)与目标表(target)的选项,因此必须设置。源表与目标表分别指要对比的对象表。
● SOURCE_URL:源表所在的SUNDB的JDBC connection URL。
● SOURCE_USER:源表所在的SUNDB的账号。
● SOURCE_PASSWORD:源表所在的SUNDB账号的密码。
● SOURCE_SCHEMA:源表的schema。
● SOURCE_TABLE:源表名。
● TARGET_URL:目标表所在的SUNDB的JDBC connection URL。
● TARGET_USER:目标表所在的SUNDB的账号。
● TARGET_PASSWORD:目标表所在的SUNDB账号的密码。
● TARGET_SCHEMA:目标表的schema。
● TARGET_TABLE:目标表名。
3. 同步策略设置
同步策略有如下4个属性。都可以为ON或OFF。
● TARGET_INSERT:源表中的key不存在于目标表时,将其key插入到目标表。
● TARGET_UPDATE:非key的column内容不同时,更新目标表的row。
● TARGET_DELETE:源表中没有的key在目标表时,删除目标表的row。
● SOURCE_INSERT:源表中没有的key在目标表时,在源表插入其row。
4. 例子
注册jar文件到CLASSPATH
export CLASSPATH=$CLASSPATH:$SUNDB_HOME/bin/tablediff.jar:$SUNDB_HOME/lib/Sundb6.jar
设置tablediff.conf
SOURCE_URL = jdbc:Sundb://127.0.0.1:22581/test
SOURCE_USER = TEST
SOURCE_PASSWORD = test
SOURCE_SCHEMA = PUBLIC
SOURCE_TABLE = TAB1
TARGET_URL = jdbc:Sundb://127.0.0.1:22581/test
TARGET_USER = TEST
TARGET_PASSWORD = test
TARGET_SCHEMA = PUBLIC
TARGET_TABLE = TAB2
OPERATION = SYNC
TARGET_INSERT = ON
TARGET_UPDATE = ON
TARGET_DELETE = ON
SOURCE_INSERT = OFF
创建实习表后tablediff的执行结果
gSQL> create table tab1 ( c1 integer primary key, c2 char(10) );
gSQL> create table tab2 ( c1 integer primary key, c2 char(10) );
gSQL> insert into tab1 values ( 1, ‘HELLO’);
gSQL> insert into tab2 values ( 1, ‘HELLO’);
gSQL> insert into tab1 values ( 2, ‘WORLD’);
gSQL> insert into tab2 values ( 2, ‘world’);
gSQL> insert into tab1 values ( 3, ‘good’);
gSQL> insert into tab2 values ( 4, ‘good’);
gSQL> commit;
shell> java sunje.Sundb.tool.diff.TableDiff tablediff.conf
Total 4 rows processed
> row diff : 1, update target(success/failure): 1/0
> key diff source only: 1, insert into target(success/failure): 1/0
> key diff target only: 1, delete from target(success/failure): 1/0
TableDiff completed
elapsed time = 0.229 sec




