之前在安装OGG总是遇到字符集问题,尤其是多源端对一个目标端时,源端字符集不同,导致出现字符集问题
无法同步数据,查阅了大量的园子资料,都说要设置复制或抽取进程中SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK),设置为和源端或者目标端一致即可,经过大量测出一对一的复制没有问题,但是多对一的复制仍存在问题,后经大量阅读资料,完成链路的设计。
最近刚好项目需要,刚好整理出来。
字符集转换分为两种
(ps:图片有误,方案二是,在oracle服务器新建操作系统用户安装OGG)
方案一是将字符集的转换交给目标端复制进程解析队列写入数据库时进行转换。即目标端复制进程解析的队列文件中的数据字符集还是源端的字符集。
方案二是将字符集的转换交给源端抽取进程抽取时进行转换。即源端传递到目标端的队列文件中数据的字符集已经是目标端字符集。
具体过程如下:整个过程完全遵照oracle数据库服务端-客户端的字符集转换过程。
方案一:红色箭头为字符集转换过程
方案二:红色箭头为字符集转换过程
我做的一个实际例子如下:当时因为源端无法设置环境变量NLS_LANG的字符集,因此两个源端库的数据都选择在目标端进行字符集转换。