暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SUNDB数据库技术宝典 | SUNDB到ORACLE的数据同步

原创 科蓝SUNDB数据库 2023-12-30
250

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 拓扑图

image.png
图2 CYCLONE拓扑(Sundb–>Oracle)

1.2 服务器信息

image.png
表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
最后修改时间:2024-01-03 14:55:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论