oracle数据同步到Sequoiadb

  

1、 背景

     oracle数据库是传统关系型数据库中的表明,也是目前最通用的数据库之一。Sequoiadb分布式数据库做为新一代的nosql数据库,拥有高并发、实时性、分布式、可扩展、灵活存储的操做。在国家提倡去IOE的大前提下,怎么将oracle的数据迁移到Sequoiadb,成为了摆在企业面前的难题。除了将oracle数据导出为csv文件,而后入库这种本办法以外,是否可以实时的将oracle数据同步到Sequoiadb中,响应时间控制在秒级。本文就从技术上阐述怎么实时同步oracle数据到Sequoiadb。java

2、 目的

Oracle GoldenGate 是一款专门针对各类关系型数据库的数据同步工具,它支持直接解析关系型数据库的事务日志文件,包括:Oracle、DB二、SQL Server、Mysql等,而后经过它自身的程序对事务日志进行数据解析,而后再将数据同步到远端的其余数据库上。node

Oracle GoldenGate上的3个模块分别是:extract、dpe(Distributed Processing Environment)、replica。它可以帮助用户对已有的数据库环境部署一个冗余数据库,而且数据同步效率可以保证在秒级单位。Oracle GoldenGate如下简称ogg。python

方案一:oracle->ogg->Kafka->SparkStreaming(or Store)->SequoiaDBlinux

方案二:oracle->ogg->SequoiaDBc++

相比较方案二,第一个方案进过的流程较为复杂、通过的环节多、同步时间久不建议使用。本文主要讲解方案二的操做过程,从搭建oracle、ogg、Sequoiadb到对接的过程。sql

3、 安装前准备

3.1机器介绍

linux操做系统版本shell

centos6.2数据库

oracle版本centos

11gbash

Sequoiadb版本

2.8.2

python版本

2.7.11

ogg版本

OGG for bigdata 12.3.1.1.0.013

ogg 服务端口

1357

sdb集群机器IP

192.168.137.128 (sdb2)

192.168.137.135 (sdb3)

192.168.137.164 (sdb1)

ogg目标端机器IP

192.168.137.128

ogg源端的机器IP

192.168.137.164

3.2设置swap的大小

使用命令free -m查看Swap空间大小

[root@sdb1 swap]# free -m total used free shared buffers cachedMem: 3825 3229 595 0 24 2663-/+ buffers/cache: 541 3283Swap: 3999 0 3999复制代码

显示本机不够4g,安装oracle须要至少4g的swap空间。接下来演示扩大swap空间。


在tmp下建立swap目录

mkdir /tmp/swapcd /tmp/swap复制代码

使用dd命令建立1g的大小空间

dd if=/dev/zero of=swapfree bs=1M count=1024 ;

If表示infile, of表示outfile, bs=1M表明增长的模块大小,count=1024表明是1024个模块,也就是1G空间大小


建立交换空间

mkswap /tmp/swap/swapfree复制代码

启动交换空间

swapon /tmp/swap/swapfree 复制代码

将/tmp/swap/swapfree加入到/etc/fstab条目将可使用得系统在init进程中调用swapon –a来自动挂载/tmp/swap/swapfree,这样每次机器重启后/tmp/swap/swapfree都处于有效的swap空间. 修改命令 vi /etc/fstab增长一行

/tmp/swap/swapfree    swap    swap defaults 0 0复制代码


重启系统

修改后使用swapon –s 或者free –m能够查看

[root@sdb1 swap]# free -m total used free shared buffers cachedMem: 3825 3088 736 0 20 2603-/+ buffers/cache: 464 3360Swap: 5023 0 5023复制代码


3.3 linux环境配置修改

在安装oracle以前,须要先对linux 的内核参数作一些调整。

首先修改 /etc/security/limits.conf 配置文件。
在末尾增长

#oracle softwareoracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536复制代码

修改 /etc/pam.d/login 配置文件。

在末尾增长

#oracle softwaresession required/lib/security/pam_limits.sosession requiredpam_limits.so复制代码

修改 /etc/sysctl.conf 配置文件,增长以下内容。

fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmall = 2097152 kernel.shmmax= 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range= 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default =262144 net.core.wmem_max = 1048576复制代码

要使 /etc/sysctl.conf 更改当即生效,执行如下命令。 输入:sysctl -p 显示以下:

net.ipv4.icmp_echo_ignore_broadcasts= 1net.ipv4.conf.all.rp_filter= 1fs.file-max = 6815744fs.aio-max-nr = 1048576kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 4194304net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576复制代码

编辑 /etc/profile ,输入命令:vi /etc/profile,按i键进入编辑模式,将下列内容加入该文件。

if [ $USER ="oracle" ]; thenif [ $SHELL ="/bin/ksh" ]; then  ulimit -p 16384  ulimit -n 65536else  ulimit -u 16384 -n 65536fifi复制代码


3.4建立oracle 系统用户

建立系统用户组和用户。

groupadd oracleuseradd -g oracle -m oracle复制代码

修改oracle 用户密码。

passwd oracle复制代码

在usr目录下建立oracle目录。

mkdir /usr/oracle复制代码

切换到 /usr/oracle目录,将如下两个oracle压缩包拷贝到建立的oracle目录下。

linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_2of2.zipcp /mnt/hgfs/1work/oracle/linux.x64_11gR2_database_1of2.zip ./cp /mnt/hgfs/1work/oracle/linux.x64_11gR2_database_2of2.zip ./复制代码


进行解压

unzip linux.x64_11gR2_database_1of2.zipunzip linux.x64_11gR2_database_2of2.zip复制代码

解压完,能够用ls查看(多出的database即为解压出来的文件)


在安装Oracle以前,用命令检查必需的RPM软件包有没有安装,检查的命令以下:

rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibcglibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make numactl-develsysstat unixODBC unixODBC-devel复制代码


若是上图显示XXX is not installed,这个时候就要在安装必要的RPM包,安装命令以下所示:

yum install -y gcc-c++.x86_64yum install -y gcc.x86_64yum install -y libstdc++.i686yum install -y libaio-devel.i686yum install -y libaio-devel.x86_64yum install -y compat-libstdc++-33.x86_64yum install unixODBC.i686 -yyum install unixODBC.x86_64-yyum install unixODBC-devel.i686 -yyum install unixODBC-devel.x86_64 -yyum install libaio-devel.x86_64 -yyum install elfutils-libelf-devel.x86_64 -yyum install libaio.i686 -yyum install libgcc.i686 -yyum install ksh.x86_64 -yyum install numactl numactl-devel -y复制代码

执行以上命令进行安装。

3.5 yum安装插件时注意事项

使用yum安装插件时出现以下问题,显示python安装包存在问题

[root@sdb1 oracle]# yum install -y gcc-c++.x86_64There was a problem importing one of the Python modulesrequired to run yum. The error leading to this problem was: No module named yumPlease install a package which provides this module, orverify that the module is installed correctly.It's possible that the above module doesn't match thecurrent version of Python,which is:2.7.11 (default, Oct 102017, 19:22:13) [GCC 4.4.7 20120313 (Red Hat4.4.7-4)]If you cannot solve this problem yourself, please go to the yum faq at:
http://yum.baseurl.org/wiki/Faq复制代码

解决办法:

查看python的版本,显示为2.7.11

[root@sdb1 oracle]# python --versionPython 2.7.11复制代码

查看python安装目录

[root@sdb1 oracle]# whereis pythonpython: /usr/bin/python2.6/usr/bin/python /usr/lib/python2.6 /usr/lib64/python2.6 /usr/include/python2.6/usr/share/man/man1/python.1.gz复制代码

查看yum安装目录

[root@sdb1 oracle]# whichyum/usr/bin/yum复制代码

打开/usr/bin/yum,将第一行中的#!/usr/bin/python修改成:

#!/usr/bin/python2.6复制代码

再次运行yum没有问题

[root@sdb1 ~]# vi/usr/bin/yum#!/usr/bin/python2.6import systry: import yumexcept ImportError: print >> sys.stderr,"""\There was a problem importing one of the Python modulesrequired to run yum. The error leading to this problem was:复制代码


3.6 oracle系统用户建立

groupadd oracleuseradd -g oracle -m oracle复制代码

修改oracle 用户密码

passwd oracle复制代码

切换oracle 用户(su – oracle),而后建立一些初始目录

#cd /usr/oraclemkdir appmkdir app/oraclemkdir app/datamkdir app/product复制代码

设置oracle环境变量

首先su到oracle用户下,编辑home目录下的.bash_profile

[oracle@oracledb~]$ vi ~/.bash_profileexport ORACLE_BASE=/home/oracle/appexport ORACLE_HOME=${ORACLE_BASE}/oracle/product/11.2.0/dbhome_1export ORACLE_HOME_LISTNER=${ORACLE_HOME}export ORACLE_SID=orclexport PATH=${PATH}:${ORACLE_HOME}/binexport LD_LIBRARY_PATH=${ORACLE_HOME}/lib:/usr/libexport DISPLAY=:0复制代码

Note:

    oracle_base是给oracle建立的app目录;

    oracle_home 为oracle安装目录;

    oracle_sid 起名为orcl;

设置环境变量PATH和LD_LIBRARY_PATH,其中须要注意DISPLAY须要根据本身的机器查询一下。

设置 DISPLAY 参数环境变量,用户能够经过如下命令查看

who

在sdb1这台机器的shell 中执行 who 命令显示

oracle   :0 2017-08-22 13:53oracle   pts/1 2017-08-22 13:54 (:0.0)oracle   pts/2 2017-08-22 14:13 (:0.0)复制代码

则在 ~/.bash_profile 中增长

export DISPLAY=:0.0复制代码

使配置生效

[oracle@oracledb ~]$ source.bash_profile  复制代码

关闭Selinux(在root用户下)

[root@oracledb ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config [root@oracledb ~]# setenforce 0复制代码

关闭防火墙(在root用户下)

[root@oracledb vsftpd]# service iptables stop[root@oracledb vsftpd]# chkconfig iptables off复制代码

4、 安装oracle

此时须要将虚拟机切换到oracle用户登陆(须要重启虚拟机),在oracle目下的database中执行命令runInstaller 开始进行安装。oracle 11g 安装必定须要图形化界面,另外用户必定要在oracle 用户下登录图形化界面执行 runInstaller 程序,不然将会出现“没法使用命令 /usr/bin/xdpyinfo 自动检查显示器颜色”这个错误。下面为详细安装步骤。

4.1oracle安装


能够选择第一个安装数据库软件并建立数据,也能够选择第二项仅安装数据库软件,这里选择的是第二个。




装到这一步,能够看到,能够查看到有不少的rpm包没有,咱们能够从安装linux的光盘或ISO中查找所缺的包,使用ftp上传到linux中,而后使用rpm –ivh xxx.rpm --nodeps --force 来进行安装(其中加上--nodeps -- force 表明强制安装,是在直接使用rpm –ivh xxx.rpm安装不成功的状况下用的)安装过程略。

等到把包所有都安装好的状况下,再次在oracle图形界面中,执行安装过程2,下来在环境检查过程当中,就经过了。若是机器中已经安装了更高版本的包请点击选择忽略。


其中须要注意一点,系统检测到pdksh这个安装包没有安装。发现pdksh是一个老包了,新的oracle都使用ksh包了,可是oracle的check机制里面并无把这个check去掉,因此在执行界面安装oracle的时候,还会有告警信息,咱们能够忽略掉它,而后看看ksh有没有安装,若是没有安装就安装ksh,用ksh就能够。

检测

yum install -ykshPackageksh-20120801-35.el6_9.x86_64 already installed and latest version复制代码

说明已经安装,选择忽略ignore掉就能够。


接下来的界面以下所示


安装过程


须要在root用户下执行这两个程序


安装完成后,系统会提示你须要用root权限执行2个shell脚本。按照其提示的路径,找到其所在的位置,如:个人就在

/home/oracle/app/oracle/product/11.2.0/dbhome_1/root.sh/home/oracle/app/oraInventory/orainstRoot.sh  复制代码

新开启一个终端,输入命令:

su – rootcd /home/oracle/app/oracle/product/11.2.0/dbhome_1sh  root.shcd /home/oracle/app/oraInventorysh  orainstRoot.sh复制代码

执行效果以下


4.2数据库新建

oracle用户的图形界面oracle用户中,新开启一个终端,直接输入命令dbca会弹出以下界面,这里须要说明,若是使用dbca启动不成功,输入dbca显示为bash: dbca: command not found,须要检查配置的bash_profile 配置是否有问题,而后在命令行中打印echo${PATH}进行检查。如没有问题须要重启下linux虚拟机,使用oracle用户进入到建立database页面中。


custom database


填写orcl,这里就是填写的环境变量中的SID。


不勾选任何选项,直接点击”next“


输入统一密码(也能够分别设置其密码),密码为oracle 管理员帐户的密码,即“system”和 “sys” 用户的密码


数据库存放位置,我这里采用默认


不指定快速恢复和归档


去掉不经常使用的模块


内存分配及指定字符集


选择字符集,这里做者选择使用”utf8“


最后一个步骤,直接点击”next“和下一页的“finish”


点击Finish


出现页面,点击OK


出现建立database页面,建立过程比较慢。


当看到此界面,说明oracle建库完成


能够用sqlplus来检验下,新开启一个命令窗口,输入sqlplus,而后输入用户名和密码,能够测试下


其中用户名和密码为:

Enter user-name:sys as sysdbaEnter password:oracle复制代码

须要注意的是Enter user-name输入的是 :用户名+as sysdba 。 如sys as sysdba

select count(*) from all_tables;select count(*) from user_tables;复制代码


4.3设置监听及本地网络服务

在oracle 用户下执行 netca 命令,启动设置网络监听的设置窗口 (图形化界面的登录用户依然是oracle)


选择新建一个监听服务,容许别的oracle客户端能够链接到本地的oracle 数据库服务。


选择端口 默认为1521,这里不作修改。


设置完成

,点击“next”


3)配置本地网络服务名(充当oracle客户端,链接别的oracle服务器)


输入链接的oracle服务器的数据库的实例名


输入本机的hostname 能够输入IP 也可能够输入配置好的hostname


选中测试


点击”change login“, 更换链接数据库服务其的帐号

输入Username :system

Password为建立database时设置的密码。

出现successful则说明链接已经成功


为咱们本地网络服务起一个名字,做者填写“orcl_ic"


选择”finish“ 结束设置

以上oracle服务器安装配置基本就完成了。

4.4设置开机自启动

首先切换root用户

新建一个 /etc/init.d/after.local 脚本,该脚本为开机后最后执行的步骤脚本,若是该文件已经存在,则直接打开便可

增长如下内容,包含关闭系统放火墙、开启oracle 监听和 oracle 数据库服务

#!/bin/bash/sbin/service iptables stop/sbin/chkconfig iptables offsu oracle -lc "/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/lsnrctlstart"su oracle -lc "/home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/dbstart"复制代码

修改 /etc/oratab 文件 (在oracle 用户下操做)

将旧的内容

orcl:/home/oracle/app/oracle/product/11.2.0/dbhome_1:N复制代码

修改成如下内容,保存退出

orcl:/home/oracle/app/oracle/product/11.2.0/dbhome_1:Y复制代码

分别修改 /home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/dbstart (80行)

将如下代码注释

#ORACLE_HOME_LISTNER=$1复制代码

和 /home/oracle/app/oracle/product/11.2.0/dbhome_1/bin/dbshut (50行)文件

修改成以下:

ORACLE_HOME_LISTNER=${ORACLE_HOME}复制代码

4.5操做oracle步骤

建立临时表空间

-查询临时表空间文件的绝对路径。若是须要的话,能够经过查询来写定绝对路径。通常用${ORACLE_HOME}就能够了

select name from v$tempfile;create temporary tablespace mpg_temp98 tempfile '/home/oracle/app/oradata/orcl/mpg_temp98.bdf' size 100m reuse autoextend onnext 20m maxsize unlimited;复制代码

查询用户表空间文件的绝对路径:

select name from v$datafile;复制代码

建立表空间

create tablespace MPG_DATA98 datafile'/home/oracle/app/oradata/orcl/MPG_DATA98.dbf' size 100M reuse autoextend onnext 40M maxsize unlimited default storage(initial 128k next 128k minextents 2maxextents unlimited);复制代码

查看已经建立好的表空间:

select default_tablespace, temporary_tablespace, d.username  from dba_users d ;复制代码

建立用户havi和密码havi,指定上边建立的临时表空间mpg_temp98和表空间MPG_DATA98

create user havi identified by havi default tablespace MPG_DATA98 temporary tablespace mpg_temp98;

用create user语法建立用户使用语法以下:

CREATE USER user_name IDENTIFIED BY user_password DefaultTablespace tbs_users;

user_name 为数据库用户的用户名

user_password 为数据库用户的密码

tbs_users 为用户使用的表空间,默认是users表空间。

给用户授予详细权限(用户为havi)

grant create session, create any table, create any view ,create anyindex, create any procedure,alter any table, alter any procedure,drop anytable, drop any view, drop any index, drop any procedure,select any table,create any trigger,create table,insert any table, update any table, delete any table ,unlimited tablespace,connect,resource,dba to havi;复制代码

给用户赋简单的权限(用户为havi)

GRANT connect, resource TO havi;    复制代码

Connect用户能登陆数据库的权限

Resource用户能建立一些数据库对像的权限,表、视图,存储过程,通常是授予开发人员的.

CONNECT ,RESOURCE,DBA是Oracle系统的三个内置角色,角色权限以下:

CONNECT:拥有Connect权限的用户只能够登陆oracle,不能够建立实体,不能够建立数据库结构。

RESOURCE:拥有Resource权限的用户只能够建立实体,不能够建立数据库结构。

DBA:拥有所有特权,是系统最高权限,只有DBA才能够建立数据库结构。

通常来讲,对于普通用户,授予CONNECT, RESOURCE权限。 对于管理员用户,则授予CONNECT,RESOURCE, DBA权限。

退出oracle

exit;

使用用户名为havi从新登陆/home/oracle/app sqlplus havi/havi

建立表插入数据

create table CAPITAL_ADJUST(  CAPITAL_ID    VARCHAR2(10),  CAPITAL_NAME  VARCHAR2(50),  TYPE          VARCHAR2(10),  BELONG        VARCHAR2(50),  IN_DEP        VARCHAR2(50),  ID            VARCHAR2(10) not null,  IN_DEP_LEADER VARCHAR2(50),  OUT_DEP_LEAD  VARCHAR2(50));复制代码

插入数据

INSERT INTO CAPITAL_ADJUST  (ID,   CAPITAL_ID,   CAPITAL_NAME,   TYPE,   BELONG,   IN_DEP,   IN_DEP_LEADER,   OUT_DEP_LEAD)VALUES  (1, '001', '002', '003','004', '005', '006', '007');复制代码

查询记录

SELECT * FROM CAPITAL_ADJUST;复制代码

删除记录

delete from CAPITAL_ADJUST t where t.ID = '1';复制代码

增长主键

alter table 表名 add constraint 主键名 primary key (字段名1);

给CAPITAL_ADJUST这张表建立主键

alter table CAPITAL_ADJUST add constraint ID primary key (ID);复制代码

增长外键

alter table 表名 add constraint 外键名 foreign key (字段名1) references 关联表 (字段名2);

建立索引

create index 索引名 on 表名 (GETSURE_UNIT_NO, SONSURE_UNIT_NO, UNIT_NO, FAMILY_NO, HOSPS_NO)

删除某个用户

drop user havi cascade;复制代码

查看用户下有哪些表

select * from tab;复制代码

查看临时表空间文件

select name from v$tempfile;复制代码

查看用户和表空间的关系

select USERNAME,TEMPORARY_TABLESPACE from DBA_USERS;复制代码

若是有用户的默认临时表空间是NOTIFYDB_TEMP的话,建议进行更改

alter user xxx temporary tablespace tempdefault;复制代码

设置 tempdefault 为默认临时表空间

alter database default temporary tablespace tempdefault;复制代码

删除表空间NOTIFYDB_TEMP及其包含数据对象以及数据文件

drop tablespace mpg_temp13 including contents and datafiles; 复制代码

删除临时表空间(删除以前要肯定没用在使用)

drop tablespace mpg_temp98 including CONTENTS and datafiles; 复制代码

删除表空间

drop tablespace MPG_DATA98 including CONTENTS and datafiles; 复制代码

建立表时的命名规则和注意事项:

1)表名和字段名的命名规则:必须以字母开头,能够含符号A-Z,a-z,0-9,_,$,#

2)大小写不区分

3)不用SQL里的保留字, 必定要用时可用双引号把字符串括起来

4)用和实体或属性相关的英文符号长度有必定的限制

5)约束名的命名规则和语法 约束名的命名规则约束名若是在建表的时候没有指明,系统命名规则是SYS_Cn(n是数字) 约束名字符串的命名规则同于表和字段名的命名规则

6)使用约束时的注意事项 约束里不能用系统函数,如SYSDATE和别的表的字段比较 能够用本表内字段的比较

注意事项:

1)建表时能够用中文的字段名, 但最好仍是用英文的字段名

2)建立表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面

3)建表时若是有惟一关键字或者惟一的约束条件,建表时自动建了索引

4)一个表的最多字段个数也是有限制的,254个.

执行startup,进行启动oracle服务

SQL> startupORACLE instance started. Total System Global Area 409194496 bytesFixed Size 2213856 bytesVariable Size 134219808 bytesDatabase Buffers  264241152 bytesRedo Buffers 8519680 bytesDatabase mounted.Database opened.复制代码


5、 Sequoiadb安装部署

5.1 Sequoiadb安装

解压安装包: tar -zxvf sequoiadb-2.8.1-linux_x86_64-enterprise-installer.tar.gz,则能够执行以下安装命令。其余步骤这里不作过多的讲解,具体请查看Sequoiadb安装文档。

命令行中执行命令:

./sequoiadb-2.8.2-linux_x86_64-enterprise-installer.run--mode text --installer-language en --prefix /opt/sequoiadb --upgrade false--force false --username sdbadmin --groupname sdbadmin_group --userpasswdsdbadmin --port 11790 --processAutoStart false --SMS true  复制代码

Note:

    SMS true表示安装OM

    SMS false 表示不安装OM

    Username 为sdb用户名不是数据库名不要混淆

    Userpasswd 为sdb用户密码不是数据库密码不要混淆

5.2集群部署

链接到本地 cm服务

var oma = new Oma("localhost", 11790)复制代码

建立临时协调节点

oma.createCoord(18800,"/opt/sequoiadb/database/coord/18800")复制代码

启动临时协调节点

oma.startNode(18800)复制代码

链接到临时协调节点

var db = new Sdb("localhost",18800)复制代码

建立一个编目节点组

db.createCataRG("sdbserver1", 11800,"/opt/sequoiadb/database/cata/11800")      复制代码

添加另外两个编目节点

> var cataRG = db.getRG("SYSCatalogGroup");> var node1 = cataRG.createNode("sdbserver2",11800,"/opt/sequoiadb/database/cata/11800")> var node2 = cataRG.createNode("sdbserver3", 11800,"/opt/sequoiadb/database/cata/11800")复制代码

启动编目节点组

> node1.start()> node2.start()复制代码

建立数据节点组

> var dataRG = db.createRG("datagroup")复制代码

添加数据节点

> dataRG.createNode("sdbserver1", 11820,"/opt/sequoiadb/database/data/11820")> dataRG.createNode("sdbserver2", 11820,"/opt/sequoiadb/database/data/11820")> dataRG.createNode("sdbserver3", 11820,"/opt/sequoiadb/database/data/11820")> dataRG.start()复制代码

建立协调节点组

> var rg = db.createCoordRG()复制代码

建立协调节点

> rg.createNode("sdbserver1", 11810,"/opt/sequoiadb/database/coord/11810")> rg.createNode("sdbserver2", 11810,"/opt/sequoiadb/database/coord/11810")> rg.createNode("sdbserver3", 11810,"/opt/sequoiadb/database/coord/11810")复制代码

启动协调节点

> rg.start()复制代码

删除临时协调节点

链接到本地的集群管理服务进程 sdbcm

> var oma = new Oma("localhost", 11790)复制代码

删除临时协调节点

> oma.removeCoord(18800)复制代码

6、 Oracle GoldenGate对接 Oracle 11g

机器介绍

目标端机器IP为 192.168.137.128 ogg 的mgr为1357

源端的机器IP为 192.168.137.164

6.1开始介绍部署与配置步骤

1. 开启日志自动归档

使用system用户登录oracle 的sqlplus

sqlplus "system/oracle" as sysdba复制代码

首先检查oracle 是否已经开启 Archive logging

archive log list;复制代码

若是显示如下错误,则证实没有开启

ORA-01031: insufficient privileges复制代码

或者是Automatic archival Disabled也是没有开启的。


用户可使用如下命令查看oracle 是否已经开启了 自动归档模式

select name,log_mode from v$database;复制代码

LOG_MODE 显示 NOARCHIVELOG 则表明没有开启


开启 Archive logging ,须要先中止数据库,执行如下命令

shutdown immediate;复制代码

而后将数据库启动到 mount 状态

startup mount复制代码

更改归档模式,启动 日志自动归档

ALTER DATABASE ARCHIVELOG;复制代码

想了解日志归档是否真的已经开启,以及查看归档日志存储在什么路径,能够再次执行

archive log list复制代码

例如做者机器就是显示

SQL> archive log listDatabase log mode   Archive ModeAutomatic archival  EnabledArchive destination  /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/archOldest online log sequence  49Next log sequence to archive 51Current log sequence  51复制代码


从新打开oracle 的 database

SQL> alter database open;复制代码

Database altered.

在shell中用户须要先建立好日志归档目录,例如做者的归档目录为 /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/arch,则该目录须要预先建立

mkdir -p /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/arch复制代码

测试归档

alter system switch logfile;复制代码

而后用户能够在 /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/arch 目录下看到新的归档日志。


用户也可使用sql 命令查看归档状况

select * from v$archived_log;复制代码

以上oracle 如何开启日志自动归档的方法就介绍完毕了。

2. 开启同步日志

检查是否开启forcelogging和 minimal supplemental logging

注意:若是不指定Primary key 和unique 属性,OGG将不会传送PK字段或Unique indiex字段信息。这样,下游的应用,在处理update数据时将失去依据。

SELECT supplemental_log_data_min,force_logging FROM v$database;复制代码

像做者的环境就没有开启(屏幕输出NO),因此咱们还须要执行开启命令,执行完毕后,咱们再来查看 forcelogging和 minimal supplemental logging 的开启状况

alter database add supplemental log data (primary key) columns;alter database add supplemental log data (unique) columns;alter database force logging;alter system switch logfile;复制代码

检查开启状况,显示以下则表明ok

SUPPLEME FOR-------- ---IMPLICIT YES复制代码

在oracle 中开启 enable_goldengate_replication 参数

alter system set ENABLE_GOLDENGATE_REPLICATION=true;复制代码

有些oracle版本会报错,这是正常状况忽略便可。


3. 建立ogg用户

在上面的SQL窗口中建立ogg用户

建立OGG 用户,用户名为ogg,密码也为ogg

create user ogg identified by ogg;grant connect,resource to ogg;grant select any dictionary to ogg;grant select any table to ogg;复制代码

6.2在Oracle 源端部署Oracle GoldenGate服务

1. 安装ogg

由于oracle 服务部署在 oracle 系统用户下,因此打算 ogg 也一样部署在 oracle 用户下

建立 ogg 的工做目录

mkdir -p /home/oracle/ogg复制代码

建立 oggapp目录

mkdir -p /home/oracle/ oggapp复制代码

将 ogg 软件拷贝到 /home/oracle/ogg 目录下,而且解压

cp /mnt/hgfs/mnt/orace_ogg/123010_fbo_ggs_Linux_x64_shiphome.zip /home/oracle/oggunzip 123010_fbo_ggs_Linux_x64_shiphome.zip复制代码

修改ogg 的配置文件

vi /home/oracle/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rspINSTALL_OPTION=ORA11gSOFTWARE_LOCATION=/home/oracle/oggappSTART_MANAGER=falseMANAGER_PORT=9001DATABASE_LOCATION=${ORACLE_HOME}复制代码

注意:上文中已经在~/.bash_profile 中设置好了 ORACLE_HOME 的环境变量。

运行安装 OGG 程序

cd /home/oracle/ogg/fbo_ggs_Linux_x64_shiphome/Disk1 ./runInstaller  -silent -responseFile /home/oracle/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp复制代码

出现如下信息表示安装成功


修改oracle 用户的配置文件 ~/.bash_profile,主要是增长OGG_HOME 内容

export JAVA_HOME=/opt/java1.7/jdk1.7.0_80export CLASSPATH=${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jarexport PATH=${JAVA_HOME}/bin:${PATH}export ORACLE_BASE=/home/oracle/appexport ORACLE_HOME=${ORACLE_BASE}/oracle/product/11.2.0/dbhome_1export ORACLE_HOME_LISTNER=${ORACLE_HOME}export OGG_HOME=/home/oracle/oggappexport ORACLE_SID=orclexport PATH=${PATH}:${ORACLE_HOME}/bin:${OGG_HOME}export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:/usr/lib:${OGG_HOME}export DISPLAY=:0复制代码

Note:

1) 配置OGG_HOME为ogg安装的地址

2) PATH中添加ogg的目录

3) LD_LIBRARY_PATH中添加ogg的目录

2)源端的jak版本配置1.7 ,目标端jdk版本为1.8。

登录 ogg 控制台

cd /home/oracle/oggapp./ggsci复制代码


给ogg 建立目录,注意此操做是在 ggsci 中执行

create subdirs复制代码

执行后,屏幕输出

Parameter file                /home/oracle/oggapp/dirprm: created.Report file                   /home/oracle/oggapp/dirrpt: created.Checkpoint file               /home/oracle/oggapp/dirchk: created.Process status files          /home/oracle/oggapp/dirpcs: created.SQL script files              /home/oracle/oggapp/dirsql: created.Database definitions files    /home/oracle/oggapp/dirdef: created.Extract data files            /home/oracle/oggapp/dirdat: created.Temporary files               /home/oracle/oggapp/dirtmp: created.Credential store files        /home/oracle/oggapp/dircrd: created.Masterkey wallet files        /home/oracle/oggapp/dirwlt: created.Dump files                    /home/oracle/oggapp/dirdmp: created.复制代码


2. 配置源端manager

配置源端manager进程,注意:此操做是在 ggsci 中执行

edit params mgr复制代码

而后操做会调到 VI 上,用户再输入如下内容后保存退出

port 9001autostart er *autorestart er *复制代码

启动 manager ,注意:此操做是在 ggsci 中执行

start mgr复制代码


查看manager 的状态,能够看到 MANAGER 为RUNNING,注意:此操做是在 ggsci 中执行

info all复制代码


3. 配置EXT_TEST服务

编辑ext_test服务,该服务是专门用来抽取oracle 新增日志的进程,注意:此操做是在 ggsci 中执行

edit params ext_test复制代码

而后操做会跳到 VI 上,用户再输入如下内容后保存退出

EXTRACT ext_test复制代码
Setenv (NLS_LANG="AMERICAN_AMERICA.UTF8")USERID ogg, PASSWORD ogggettruncatesDISCARDFILE ./dirrpt/ext_test.dsc, APPEND, MEGABYTES 1024DBOPTIONS  ALLOWUNUSEDCOLUMNREPORTCOUNT EVERY 1 MINUTES, RATEFETCHOPTIONS NOUSESNAPSHOTTRANLOGOPTIONS DBLOGREADEREXTTRAIL ./dirdat/exWILDCARDRESOLVE DYNAMICGETUPDATEBEFORESNOCOMPRESSUPDATESNOCOMPRESSDELETESdynamicresolutiontable ogg.test;复制代码

而后执行命令建立ext_test 的服务,而且指定将抽取到的日志存放在 ./dirdat/ 目录下,而且文件名以ex 开头,注意:此操做是在 ggsci 中执行

add extract ext_test, TRANLOG, BEGIN NOWADD EXTTRAIL ./dirdat/ex , EXTRACT ext_test, MEGABYTES 200复制代码


注意,指定的目录末尾必定只能是两个字符,不然报错为以下信息

file portion must be two characters.复制代码

启动该日志抽取服务,注意:此操做是在 ggsci 中执行

start ext_test复制代码


日志抽取部分的配置就ok了,下面开始配置日志发送的服务dpe_test

4. 配置DPE_TEST服务

一样的先编辑服务的配置

edit param dpe_test               复制代码

而后界面会进入VI 模式,在文件上填写如下内容后保存退出,一样的dirdat 路径下的文件名只可以用两个字符,不然会报告错误

EXTRACT dpe_testPASSTHRURMTHOST 192.168.137.128, MGRPORT 1357RMTTRAIL ./dirdat/reTABLE scott.test;复制代码

1)RMTHOST 这个IP 地址,是远端接收日志的服务的IP地址(目标端的IP不是源端的IP)。

2)MGRPORT 端口是远端接收日志的MGR 服务端口,这里千万不要搞混淆了。

3)RMTTAIL 这个是远端接收日志的路径,并不是本机的,便是在 88.162 机器上的dirdata 目录上的存放接收到的日志路径。

后面的步骤就是,将ext_test 抽取到的日志存放路径 配置给 dpe_test 发送日志服务,注意:此操做是在 ggsci 中执行

ADD EXTRACT dpe_test, EXTTRAILSOURCE ./dirdat/exADD RMTTRAIL ./dirdat/re, EXTRACT dpe_test, MEGABYTES 200复制代码


注意:红色字体是ext_test 的路径,绿色字体是发送到远端服务的路径

配置好dpe_test 服务后,还不可以立马启动,由于远端接收的MGR 服务尚未起来,因此这块还遗留一个小尾巴

6.3部署目标端的Oracle GoldenGate

1. 安装ogg

在目标端机器(192.168.88.162)上事先建立oracle:oracle 用户组和用户

groupadd  oracleuseradd  -s /bin/bash -m -g oracle oraclepasswd oracle复制代码

切换oracle 用户,为ogg adapter 建立目录

mkdir /home/oracle/ogg复制代码

拷贝ogg adapter 压缩包,而且解压

cp /mnt/hgfs/mnt/orace_ogg/123110_ggs_Adapters_Linux_x64.zip  /home/oracle/ogg_adapter ; 复制代码
unzip 123110_ggs_Adapters_Linux_x64.zip 复制代码

将解压的 ogg_adapter/ggs_Adapters_Linux_x64.tar 文件拷贝到 /home/oracle/oggapp 目录(若是不存在此目录,请事先建立)

cp ogg/ggs_Adapters_Linux_x64.tar /home/oracle/oggapp复制代码

在 /home/oracle/oggapp 目录下解压 ggs_Adapters_Linux_x64.tar.gz 文件

tar xvf ggs_Adapters_Linux_x64.tar.gz复制代码

为oracle 用户设置JDK 和 ogg 的环境变量

vi ~/.bash_profile export JAVA_HOME=/opt/jdk1.8.0_144export CLASSPATH=${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jarexport PATH=${JAVA_HOME}/bin:${PATH}export OGG_HOME=/home/oracle/oggappexport PATH=$PATH:$OGG_HOMEexport LD_LIBRARY_PATH=$OGG_HOME:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64复制代码

Note:

若是不设置JDK的LD_LIBRARY_PATH环境变量,会在启动后面的rep_test 服务时,报错。

用户也要注意 /etc/hosts 的设置,必定须要将机器的hostname 和 IP 地址配置好映射关系,否者也会出现错误。

若是用户出现此错误,须要先重启目标端的mgr 服务,直接在 ggsci 命令窗口执行 stop mgr 命令是不可以中止mgr 服务的,还须要用户在shell 中经过 kill -15 PID 的方法中止mgr。

用户正确修改 /etc/hosts 配置文件后,再重启 目标端的 mgr 和 rep_test 服务,而后须要 从新启动 源端 的 dpe_test 服务,由于目标段的 mgr 服务一旦中止, dpe_test 就可能出现异常。

拷贝模板文件

cp /home/oracle/ogg/AdapterExamples/big-data/kafka/*  /home/oracle/ogg/dirprm/复制代码

启动 ggsci 控制程序

/home/oracle/oggapp/ggsci复制代码

建立目录,注意:此操做是在 ggsci 中执行

create subdirs复制代码


2. 配置目标端manager

配置目标端manager进程,注意:此操做是在 ggsci 中执行

edit params mgr复制代码

而后出现VI 界面,输入如下内容后保存退出

port 1357autostart er *autorestart er *复制代码

在目标端的MGR 配置中,端口号设置是须要和源端的 dpe_test 配合的,这个须要注意。

启动manager 进程而且确认,注意此操做是在 ggsci 中执行 。

start mgr复制代码

确认命令,若是正常运行,则显示 MANAGER RUNNING ,注意:此操做是在 ggsci 中执行。

info all复制代码

能够看到manager服务已经启动。

3. 配置REP_TEST

修改接收服务配置,注意:此操做是在 ggsci 中执行

edit params rep_test复制代码

修改内容以下

REPLICAT rep_testTARGETDB LIBFILE libggjava.so SET property=dirprm/sequoiadb.propsGETTRUNCATESSOURCEDEFS dirdef/source.defREPORTCOUNT EVERY 1 MINUTES, RATEGROUPTRANSOPS 10000MAP scott.*, TARGET scott.*;复制代码

dirprm/ sequoiadb.props 是sequoiadb的配置文件,下面会介绍到。

dirdef/source.def 是源端的表结构定义文件,这个暂时尚未介绍到,等一下会介绍。

而后就是添加rep_test 该服务,而且指定 dirdat/re 路径做为 rep_test 服务的日志来源,能够留意一下dirdat/re 路径,实际上就是远端dpe_test 指定的路径。

由于rep_test 的服务做用就是将日志文件解析,而后再作相应的处理,本文就是将解析后的日志发送到sequoiadb上。

为 ogg 增长rep_test 服务,注意:此操做是在 ggsci 中执行

add replicat rep_test, exttrail ./dirdat/re

建立sequoiadb_libs目录,放置sequoiadb两个驱动包

>cd  /home/oracle/oggapp/mkdir sequoiadb_libscp ../sequoiadb-driver-2.9.0-SNAPSHOT.jar ./sequoiadb_libs/cp ../sequoiadb_ogg_2.8.2.jar ./sequoiadb_libs/复制代码

在ogg的dirprm目录下建立sequoiadb.props文件

gg.handlerlist=sequoiadbgg.handler.sequoiadb.type=oracle.goldengate.handler.sequoiadb.SequoiaDBHandler #The following handlerproperties are optional. #Please refer to the OracleGoldenGate for BigData documentation#for details about theconfiguration.#gg.handler.sequoiadb.hosts=sdb1:11810,sdb2:11810,sdb3:11810gg.handler.sequoiadb.hosts=localhost:11810#gg.handler.sequoiadb.password=sdbadmin#gg.handler.sequoiadb.username=sdbadmin#gg.handler.sequoiadb.bulkWrite=<true|false>#gg.handler.sequoiadb.bulkSize=1024#gg.handler.sequoiadb.checkMaxRowSizeLimit=<true|false>#gg.handler.sequoiadb.ignoreMissingColumns=<true|false>#gg.handler.sequoiadb.changeFieldToLowCase=<true|false>#gg.handler.sequoiadb.changeTableToLowCase=<true|false>gg.handler.sequoiadb.isPrintInfo=true goldengate.userexit.timestamp=utcgoldengate.userexit.writers=javawriterjavawriter.stats.display=TRUEjavawriter.stats.full=TRUEgg.log=log4jgg.log.level=INFOgg.report.time=30sec #Path to SequoiaDB Javadriver.# maven co-ordinates# <dependency># <groupId>com.sequoiadb</groupId># <artifactId>sequoiadb-driver</artifactId># <version>2.8.1</version># </dependency>gg.classpath=/home/oracle/oggapp/sequoiadb_libs/sequoiadb-driver-2.9.0-SNAPSHOT.jar:/home/oracle/oggapp/sequoiadb_libs/sequoiadb_ogg_2.8.2.jarjavawriter.bootoptions=-Xmx512m-Xms32m -Djava.class.path=.:ggjava/ggjava.jar:./dirprm复制代码

Note:

gg.handler.sequoiadb.hosts是须要对接的Sequoiadb的IP和协调节点和地址,当有多台机器构成的集群可使用多个链接。

gg.handler.sequoiadb.username数据库鉴权用户名。

gg.handler.sequoiadb.password是数据库鉴权密码。

gg.handler.sequoiadb.bulkWrite是否起开批量插入,默认为打开的。

gg.handler.sequoiadb.bulkSize当打开批量插入后,每次批量插入的条数。

gg.handler.sequoiadb.checkMaxRowSizeLimit是否检查写入数据库的记录大小,若是打开,则超过16MB的BSON记录将会报错,默认是关闭的。

gg.handler.sequoiadb.ignoreMissingColumns写入记录时,是否要忽略值为null的字段,默认是打开的。

gg.handler.sequoiadb.changeFieldToLowCase链接器在获取源端的表结构时,是否要对其转换为小写字母,默认为打开。

gg.handler.sequoiadb.changeTableToLowCase链接器在获取源端的表名时,是否要对其转换成小写字母,默认为打开。

gg.handler.sequoiadb.isPrintInfo是GoldenGate的replica程序在运行时是否要打印OGG-SequoiaDB链接器的日志信息,默认是关闭的。

以上操做后,rep_test 的服务配置已经基本完了,可是源端表结构的配置尚未开始作,因此也暂时对 rep_test 服务不能启动。

4. 源端表结构文件初始化

回到源端的ggsci 客户端的交互命令窗口上来,执行如下命令,建立一个新的初始化源端表结构的配置文件,注意:此操做是在 ggsci 中执行

edit param defgen

此时界面会跳转到VI界面上,用户直接在上面编辑如下内容。

DEFSFILE dirdef/source.def,PURGEUSERID ogg, PASSWORD oggTABLE ogg.test ;复制代码

userid 和 password 参数是 oracle 数据库中的用户名和密码登陆方式

table 参数就是须要初始化的表名

而后用户在 linux shell 窗口下执行如下命令(源端执行shell 命令)

defgen paramfile dirprm/defgen.prm

而后把在源端新生成的 dirdef/source.def 文件scp 到 目标端 的 dirdef/source.def

scp -r dirdef/source.def oracle@sdb2:/home/oracle/oggapp/dirdef/source.def复制代码

首先来启动rep_test 服务(目标端的ggsci 执行),注意:此操做是在 ggsci 中执行

start rep_test复制代码

再来启动 dpe_test 服务(源端的ggsci 执行),注意:此操做是在 ggsci 中执行

start dpe_test复制代码

用户也能够分别在源端和目标端的 ggsci 中查看rep_test 和 dpe_test 服务的启动状态。

info  all复制代码

7、 Oracle GoldenGate对接Sequoiadb

7.1 对接准备

进入到oracle用户中

cd – oracle复制代码

切换到ogg的安装目录中

/home/oracle/oggapp/dirprm复制代码

查看源端的ogg机器MANAGER、DPE_TEST、EXT_TEST服务是否已经启动。


若是显示为非RUNNING状态,能够执行如下语句进行启动

start mgrstart rep_teststart ext_test复制代码

查看目标端的MANAGER和REP_TEST服务是否已经启动


若是没启动,也是同理执行start进行启动。

start mgrstart rep_test复制代码

在oracle中建立须要同步的表

使用ogg用户进入到oracle中,这里建立test这张表。

SQL>create table test(  a  INT,  b VARCHAR2(10),  c  INT);复制代码

//插入一条记录,验证能够进行操做。

SQL>INSERT INTO test     (a,b,c)   VALUES    (2, '2',4);复制代码


在配置的Sequoiadb中建立须要同步的表,此表在oracle数据库中已经存在(也就是上面建立的test这张表)。其中cs为oracle的登陆用户,cl为oracle用户中的表。


7.2 基本功能测试

1. insert测试

首先在oracle中将test表清空。

SQL> select * from test ;no rows selected复制代码

在Sequoiadb中检查ogg.test这个集合也没有记录存在。

> db.ogg.test.find()Return 0 row(s).Takes 0.014508s.复制代码

在oracle中插入一条记录,而且进行提交。

SQL> INSERT INTO test(a,b,c)VALUES(1, '01',3);1 row created.SQL> commit;Commit complete.复制代码

在Sequoiadb中进行查询已经提交成功。

> db.ogg.test.find(){  "_id": {    "$oid":"5a17c6dde4b0035abe90a3a0"  },  "a": 1,  "b": "01",  "c": 3}复制代码

Sequoiadb中显示记录和插入到oracle中的记录相同。

2. update测试

在oracle中将插入记录a字段由原来的1改成10,并进行提交。

SQL> update test set a=10where a= 1; 1 row updated.SQL> commit;Commit complete.在Sequoiadb中进行查询。> db.ogg.test.find(){  "_id": {    "$oid":"5a17c6dde4b0035abe90a3a0"  },  "a": 10,  "b": "01",  "c": 3}Return 1 row(s).复制代码

注意:

同步时,必定是commit提交后才进行同步的。

3. delete测试

在oracle中将test表中a字段为10的记录删除,并进行提交。

SQL> delete from test where a = 10;1 row deleted.SQL> commit;Commit complete.复制代码

在oracle中进行查询,显示已经不存在记录。

SQL> select * from test;  no rows selected复制代码

在Sequoiadb中进行查询,显示记录已经不存在,表示delete同步成功。

> db.ogg.test.find()Return 0 row(s).Takes 0.002469s.复制代码


8、 总结

      相比较oracle 11g的安装,Sequoiadb数据库的安装是比较容易的,部署集群也仅仅须要几步便可,经过直接使用ogg将oracle和Sequoiadb进行数据迁移,使得同步过程大大的简化,提升了同步的效率。使得oracle数据迁移到nosql数据库得以在生产中普遍使用。

相关文章
相关标签/搜索