常见问题

Linux上的UTS客户端,连windows上的UTS服务端(MSSQL)如果nvarchar类型中文乱码或者没办法入库

答:在服务端勾选映射成UTF8编码,如下图所示:

启动服务

数据传输过程中出现service stop错误

答:出现这种情况一般是uts的授权服务到期,需要重新续费生成新的授权代码,请联系我公司商务人员商讨续费事宜。

UTS客户端禁止修改表结构选项有什么用?

勾选了这个选项,如果服务端增加了字段,UTS也会在客户端增加字段

勾选与不勾选的区别:

1.勾选了该字段,如果目标表字段比源表多,UTS不会去删除多余的字段

2.勾选了该选项,UTS客户端不会在目标表执行增加索引之类的操作

3.勾选了该选项,如果指定的时间戳字段不存在,UTS不会自动在目标表创建该字段,如果不勾选,UTS会尝试先创建该字段


UTS时间戳机制同步原理

时间戳(timestamp)是SqlServer特有的一个字段类型,当表的行数据新增或修改后,该字段会自动更新为最新的数值。

SqlServer的timestamp存储的其实是一个int64,并不是时间或者日期类型(比如mysql的timestamp)。

凡是数据新增和修改操作能引起数值变大的字段,我们都可以用于充当时间戳字段,包括bigint、number、datetime、binary(8)等。

工作原理

我们通过比对源和目标表中,所有时间戳字段的差异,就可以判断出源头发生了何种数据操作(DML)。 从而通过UTS时间戳机制自动进行数据库同步完善工作。

例如:我们现在有一个源表:

主键 name(varchar(20)) 时间戳(bigint)
Hello 1001
World 1003
  1. 源表数据库同步之后,得到目标表一:

    主键 name(varchar(20)) 时间戳(bigint)
    Hello 1001

    对比目标表一和源表,发现缺少时间戳1003的记录,说明源表发生了insert新增操作(也有可能是目标误删除了记录);

  2. 源表数据库同步之后,得到目标表二:

    主键 name(varchar(20)) 时间戳(bigint)
    Hello 1001
    World 1002

    对比目标表一和源表,目标表二多了一条时间戳1002的数据,但少了一条1003的数据,两者主键一致,说明源表发生了update更新操作;

  3. 源表数据库同步之后,得到目标表三:

    主键 name(varchar(20)) 时间戳(bigint)
    Hello 1001
    World 1003
    Test 1004

    对比目标表一和源表,目标表三比源表多了一条时间戳为1004的数据,说明源头发生了delete删除操作。


以上种种情形,我们通过时间戳服务,对比源表和目标表时间戳序列的差异,随时发现数据DML操作,不需要额外的日志系统辅助,自动智能解决一切传输问题,传给目标表精确的数据库。

时间戳字段应当满足如下特性

1、时间戳字段的值必须是正数,且像时间一样正向增长的,不能回退;

2、同一张表中时间戳字段的值尽可能的是唯一的;

3、数据发生插入或更新时,该条记录的时间戳字段的值尽可能成为全表最大。


MSSQL数据的timestamp类型就具有这种特性,能够很好的支持UTS的数据传输同步。而对于数据源不是MSSQL数据库的,尽可能使用某种机制确保作为时间戳字段的值满足上述特性。(如触发器的实现方式)


mysql8.0 报错:连接报错1251 client does no support authentic

[分析]:

因为mysql8.X系列账户的默认的认证加密方式是caching_sha2_password, 而5.7系列默认是mysql_native_password,所以在使用老版本的客户端驱动连接Mysql时会报不支持的认证协议。

[解决]

  • 方案一、更改一下默认的认证方式为mysql_native_password

1、查看账户的认证加密方式:

[root@k8s-node4 ~]# mysql -uroot -p
mysql> select host,user,plugin from user;
+-----------+---------------+-----------------------+
| host      | user          | plugin                |
+-----------+---------------+-----------------------+
| localhost | root          | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys     | caching_sha2_password |
| %         | root          | caching_sha2_password |
| %         | xdba          | caching_sha2_password |
+-----------+---------------+-----------------------+

2、更改默认的认证方式为mysql_native_password

ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;

  • 方案二、升级更新客户端连接的mysql驱动