Sundb到Oracle的数据同步的操作同与Sundb到Sundb大同小异,需注意如下3点:
a)Oracle用户下安装Sundb数据库软件;
b)cyclone.slave.conf文件的HOST_PORT端口为Oracle监听端口;
c)cyclone.slave.conf文件中ORACLE_DRIVER参数指向Oracle libsqora.so.11.1 文件。
1. 环境说明
1.1 拓扑图

图2 CYCLONE拓扑(Sundb–>Oracle)
1.2 服务器信息

表5 服务器配置及软件版本
2. 准备工作
2.1 源端准备工作(Sundb)
2.1.1 创建用户及分配权限
CYCLONE在运行中会查询并并处理数据,因此需要有专门运行CYCLONE的用户,并赋予其指定权限,以下创建的用户为“CDC”,用户名称可自定义。
gSQL-Master> CREATE USER cdc IDENTIFIED BY cdc;
User created.
gSQL-Master> GRANT CREATE SESSION ON DATABASE TO cdc;
Grant succeeded.
gSQL-Master> GRANT INSERT ANY TABLE,DELETE ANY TABLE,UPDATE ANY TABLE ON DATABASE TO cdc;
Grant succeeded.
gSQL-Master> GRANT CREATE OBJECT ON TABLESPACE mem_data_tbs TO cdc;
Grant succeeded.
gSQL-Master> GRANT CREATE OBJECT ON TABLESPACE mem_temp_tbs TO cdc;
Grant succeeded.
gSQL-Master> GRANT CREATE TABLE,CREATE INDEX,CREATE SEQUENCE,CREATE VIEW,ADD CONSTRAINT ON SCHEMA cdc TO cdc;
Grant succeeded.
gSQL-Master> COMMIT;
Commit complete.
2.1.2 创建两张测试表
切换至cdc用户创建T1、T2表,暂不插入测试数据。
gSQL-Master> connect cdc cdc
gSQL-Master> CREATE TABLE T1 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
gSQL-Master> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (C1);
Table altered.
gSQL-Master> COMMIT;
Commit complete.
gSQL-Master> CREATE TABLE T2 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
gSQL-Master> ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (C1);
Table altered.
gSQL-Master> COMMIT;
Commit complete.
2.1.3 配置Sundb.properties.conf
需要确认的2个参数为:
DATA_STORE_MODE
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY
CYCLONE读取SUNDB的重做日志文件并执行复制。DATA_STORE_MODE值为’1’时为CDS (Concurrent Data Store)模式, '2’时为TDS (Transactional Data Store)模式。因此SUNDB要以TDS (Transactional DataStore)模式运行,该操作需要重启实例。
SUNDB的参数开启SUPPLEMENTAL LOGGING时,将记录所有表的附加日志,该操作需要重启实例。
[sunje@gs01 ~]$ cd $SUNDB_DATA/conf
[sunje@gs01 conf]$ pwd
/home/sunje/product/Sundb_data/conf
[sunje@gs01 conf]$ grep DATA_STORE_MODE Sundb.properties.conf
DATA_STORE_MODE = 2
[sunje@gs01 conf]$ grep SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY Sundb.properties.conf
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY = YES
2.1.4 配置cyclone.master.conf
以下内容为复制2张测试表的配置样例,关于该文件的其他配置参数,可参考文档末端附件中的“cyclone配置文件参数说明”表格。
[sunje@gs01 conf]$ pwd
/home/sunje/product/Sundb_data/conf
[sunje@gs01 conf]$ cat cyclone.master.conf
##################################
# Cyclone Configure #
# MASTER #
##################################
USER_ID = cdc
USER_PW = cdc
GROUP_NAME = Group1
{
PORT = 21102
CAPTURE_TABLE =
(
cdc.t1,
cdc.t2
)
}
2.1.5 开启归档
如果CYCLONE正在处理的重做日志文件被SUNDB再次使用,则CYCLONE将强制结束。为了保证复制的稳定运行,因此SUNDB一定要以归档日志模式运行。
首先关闭实例,在mount阶段将数据库变更为归档模式。
gSQL-Master> shutdown immediate
Shutdown success
gSQL-Slave> quit
[sunje@gs02 ~]$
然后将实例启动至MOUNT阶段,开启归档模式。
gSQL-Master> startup mount
Startup success
gSQL-Master> alter database archivelog;
Database altered.
gSQL-Master> alter system open database;
System altered.
验证配置。
gSQL-Master> select archivelog_mode from v$archivelog;
ARCHIVELOG_MODE
---------------
ARCHIVELOG
1 row selected.
gSQL-Master> select PROPERTY_NAME,PROPERTY_VALUE
from v$property
where PROPERTY_NAME=‘DATA_STORE_MODE’
or PROPERTY_NAME=‘SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY’;
PROPERTY_NAME PROPERTY_VALUE
--------------------------------- --------------
DATA_STORE_MODE 2
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY YES
2 rows selected.
2.1.6 开启监听器
[sunje@gs01 conf]$ glsnr --start
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release Venus.3.2.5 revision(28401)
Listener is started successfully.
2.2 目标端准备工作(Oracle)
2.2.1 创建用户及分配权限
为便于管理,建议目标端创建的同步用户名称与源端所创建的名称一致,当然如果有需要也可以设置成不同的名称,需要在cyclone.slave.conf文件中注意用户映射。
SQL> CREATE USER cdc IDENTIFIED BY cdc;
User created.
SQL> GRANT CONNECT,RESOURCE to cdc;
Grant succeeded.
2.2.2 创建两张测试表
切换至cdc用户创建T1、T2表。
SQL> conn cdc/cdc
Connected.
SQL> CREATE TABLE T1 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
SQL> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (C1);
Table altered.
SQL> CREATE TABLE T2 (C1 INT,C2 DATE,C3 VARCHAR(50));
Table created.
SQL> ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (C1);
Table altered.
2.2.3 在Oracle用户下安装Sundb
在Oracle家目录下解压Sundb安装包,注意文件权限,解压安装报之后添加Sundb环境变量。
[oracle@tank ~]$ pwd
/home/oracle
[oracle@tank ~]$ tar xf Sundb-server-venus.3.2.5-linux-x86_64.tar.gz
[oracle@tank ~]$ mv Sundb-server-venus.3.2.5-linux-x86_64 product
将如下内容追加至/home/oracle/.bash_profile文件末尾,并使其生效。
[oracle@tank ~]$ tail -11 .bash_profile
#Sundb
export SUNDB_HOME=${HOME}/product/Sundb_home
export SUNDB_DATA=${HOME}/product/Sundb_data
export PATH=.:$SUNDB_HOME/bin:$PATH
export LD_LIBRARY_PATH=$SUNDB_HOME/lib:$LD_LIBRARY_PATH
export CLASSPATH=$SUNDB_HOME/lib/Sundb6.jar:/home/oracle/product/Sundb_home/sample:$JAVA_HOME/lib:${CLASSPATH}
alias gs='gsql sys gliese --as sysdba --prompt=gSQL'
alias gp='vi $SUNDB_DATA/conf/Sundb.properties.conf'
alias gtrc='tail -100f $SUNDB_DATA/trc/system.trc'
alias ghome='cd $SUNDB_HOME'
alias gdata='cd $SUNDB_DATA'
[oracle@tank ~]$ source .bash_profile
2.2.4 配置cyclone.slave.conf
将ORACLE_DRIVER参数加入到cyclone.slave.conf文件中,用于声名libsqora.so.11.1的位置。
libsqora.so.11.1所在位置为$ORACLE_HOME/lib路径下。
[oracle@tank ~]$ ls $ORACLE_HOME/lib/libsqora.so.11.1
/u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
[oracle@tank ~]$ cat $SUNDB_DATA/conf/cyclone.slave.conf
##################################
# Cyclone Configure #
# SLAVE #
##################################
MASTER_IP = 192.0.2.21
HOST_IP = 192.0.2.10
HOST_PORT = 1521
USER_ID = cdc
USER_PW = cdc
ORACLE_DRIVER ='/u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1'
GROUP_NAME = Group1
{
PORT = 21102
APPLY_TABLE =
(
cdc.t1 to cdc.t1,
cdc.t2 to cdc.t2
)
}
2.2.5 开启监听器
$ lsnrctl start
3. 启动CYCLONE服务
3.1 源端启动Cyclone
[sunje@gs01 ~]$ cyclone --master --start --reset all
[GROUP1] Startup done as Master.
3.2 目标端启动Cyclone
[oracle@tank ~]$ cyclone --slave --start --reset all
[GROUP1] Startup done as Slave.
Slave报错解决
如遇到如下方的启动报错“ERR-HY000(11087)…”,说明依赖包存在问题。
[oracle@tank ~]$ cyclone --slave --start --reset all
[oracle@tank ~]$ ERR-HY000(11087): failed to open library (/u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1): libodbcinst.so.1: cannot open shared object file: No such file or directory
如果环境变量设置正确,使用ldd命令查看输出结果。
[oracle@tank conf]$ ldd /u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
ldd: warning: you do not have execution permission for `/u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1'
linux-vdso.so.1 => (0x00007fffab09a000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f49d51d6000)
libm.so.6 => /lib64/libm.so.6 (0x00007f49d4f51000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f49d4d34000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f49d4b1b000)
libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1 (0x00007f49d20b0000)
libodbcinst.so.1 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f49d1d0e000)
/lib64/ld-linux-x86-64.so.2 (0x00000038e2800000)
libnnz11.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so (0x00007f49d1940000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007f49d173f000)
根据上方提示信息发现系统缺失“libodbcinst.so.1”文件,复制一个新的so文件后再次验证。
[root@tank ~]# cp /usr/lib64/libodbcinst.so.2 /usr/lib64/libodbcinst.so.1
[oracle@tank ~]$ ldd /u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1
ldd: warning: you do not have execution permission for `/u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqora.so.11.1'
linux-vdso.so.1 => (0x00007fffac3ae000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f615d819000)
libm.so.6 => /lib64/libm.so.6 (0x00007f615d594000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f615d377000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f615d15e000)
libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1 (0x00007f615a6f3000)
libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007f615a4e2000)
libc.so.6 => /lib64/libc.so.6 (0x00007f615a14f000)
/lib64/ld-linux-x86-64.so.2 (0x00000038e2800000)
libnnz11.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so (0x00007f6159d81000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007f6159b80000)
libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f6159977000)
此时输出信息已经没有缺失文件的提示,再次使用cyclone命令即可成功启动。
4. 数据同步验证
4.1 Master端插入数据
分别对T1、T2表中各插入1条测试数据。
[sunje@gs01 conf]$ gs
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release Venus.3.2.5 revision(28401)
Connected to SUNDB Database.
gSQL-Master> connect cdc cdc
gSQL-Master> INSERT INTO T1 VALUES (1, sysdate, ‘T1 CYCLONE TEST’);
1 row created.
gSQL-Master> commit;
Commit complete.
gSQL-Master> INSERT INTO T2 VALUES (1, sysdate, ‘T2 CYCLONE TEST’);
1 row created.
gSQL-Master> commit;
Commit complete.
4.2 Slave端查看数据
登陆目标端实例进行数据查看,可以看到插入的2条测试数据已经同步完成。
[oracle@tank ~]$ sqlplus cdc/cdc
SQL> select * from t1;
C1 C2 C3
---------- --------- --------------------------------------------------
1 02-MAR-20 T1 CYCLONE TEST
SQL> select * from t2;
C1 C2 C3
---------- --------- --------------------------------------------------
1 02-MAR-20 T2 CYCLONE TEST



