在Linux下,DMHS的搭建

孤街浪徒 提交于 2020-02-26 20:06:22

一、概念

1.DMHS全称:

Heterogeneous database Synchronization for DM

达梦异构数据同步软件

2.工作模式

捕获器:读取解析源端数据库管理系统的归档日志;

执行器:接收数据,并进行数据映射及事务的入库(目标端数据库)执行;

路由器:适用于捕获器和执行器被网关隔断的环境;

转发器:捕获器和执行器之间存在物理隔离网闸,无法通过网络直连需要文件中转的时候。

二、安装数据库ORACLE

设置ip:192.168.73.8-这是我配置的ip地址

1.创建系统用户

groupadd oinstall

groupadd dba

useradd -g oinstall -G dba oracle

passwd oracle

2.配置环境变量

vi .bash_profile

export ORACLE_SID=orcl
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/product/11.2.0/dbhome_2
export PATH=$ORACLE_HOME/bin:$PATH

使环境变量生效:source .bash_profile

3.开始安装Oracle,步骤省略

4.开启监听:lsnrctl start

5.检查是否开启归档日志

sqlplus / as sysdba

SQL>archive log list; -- 检查归档是否开启

如果Automatic archival为Disabled则没有开启

那么执行以下语句开启

SQL>alter database open;

        SQL>alter system set db_recovery_file_dest=’’;

        SQL>alter system set log_archive_dest=’’;--设置路径

重启数据库,使归档路径生效

       Shutdown immediate

       以mount方式启动数据库:

       startup mount

       alter database open;

       archive log list;

6.检查附件日志

SQL> select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_ALL from v$database;

 

如果是为no,就执行以下语句

SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

7.将Oracle的回收机制关闭

SQL>alter system set recyclebin=off deferred;

8.关闭防火墙

Systemctl stop firewalld  --linux7

chkconfig iptables off; --linux6

9.检查字符集是否一致

先查询oracle数据库的字符集:

SQL> select userenv('language') from dual;

再查询系统字符集

echo $NLS_LANG

如果该变量值为空或者与查询结果不一致,请将该变量设置为查询结果的值

修改~/.bash_profile文件,增加export NLS_LANG=“sql查询结果值”

10.创建数据库用户dmhs

Create user dmhs identified by ‘123456’;

Grant dba to dmhs;--测试时直接赋予dba权限

现实环境最好赋予以下的权限

如果没有DBA权限,需要做如下赋权操作(例如用户是DMHS):

grant all on dmhs_ddl_sql to dmhs;

grant select any table to dmhs;

grant select any dictionary to dmhs;

grant create session to dmhs;

grant lock any table to dmhs;

grant execute on dbms_flashback to dmhs;

grant connect to dmhs

11.安装odbc

下载 unixodbc2.3.2 源码 unixODBC-2.3.2.tar.gz;这里是2.3.2版本的,搭建DMHS最好要2.3.0以上的版本

 解压 unixodbc 源码

tar -zxvf unixODBC-2.3.2.tar.gz

进入 unixodbc 源码目录,编译源码

cd unixodbc-2.3.2

         export CC=gcc

         export CFLAGS="-maix64 -DBUILD_REAL_64_BIT_MODE" export OBJECT_MODE=64 –l系统为unix/linux 64bits才执行

./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes

make

make install

配置 UNIXODBC 将操作系统当前目录切换到“/usr/local/etc”目录,修改 odbc.ini 和 odbcinst.ini 参数。 odbc.ini 参数内容如下所示:

[ORACLE]

Description = ORACLE ODBC DSN

Driver = Oracle in OraDb11g_home1

SERVER = 127.0.0.1

UID = DMHS

PWD = 123456

Servername = ORCL

PORT = 1521

odbcinst.ini 参数内容如下所示:

[Oracle in OraDb11g_home1]

Description = ODBC DRIVER FOR ORACLE

Driver = oracle/product/11.2.0/db_home2/lib/libsqora.so.11.1 –安装oracle路径

Threading = 0

 配置完成之后,可使用 isql 命令测试配置是否正确。

        isql -v ORACLE DMHS 123456

 如果不成功,看是否缺乏依赖包

      ldd /oracle/product/11.2.0/dbhome_2/lib/libsqora.so.11.1

linux-vdso.so.1 =>  (0x00007fff335ff000)

        libdl.so.2 => /lib64/libdl.so.2 (0x00007fc37d97e000)

        libm.so.6 => /lib64/libm.so.6 (0x00007fc37d6f9000)

        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc37d4dc000)

        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fc37d2c3000)

        libclntsh.so.11.1 => /opt/oracle/112/lib/libclntsh.so.11.1 (0x00007fc37ad92000)

        libodbcinst.so.1 => /lib64/libodbcinst.so.1 (0x00007fc37ab7b000)

        libc.so.6 => /lib64/libc.so.6 (0x00007fc37a7e7000)

        /lib64/ld-linux-x86-64.so.2 (0x0000003462a00000)

        libnnz11.so => /opt/oracle/112/lib/libnnz11.so (0x00007fc37a41a000)

        libaio.so.1 => /lib64/libaio.so.1 (0x00007fc37a219000)

 

这里格外要注意libodbcinst.so.1这个依赖,它依赖于/lib64/libodbcinst.so.1,但是UnixODBC某些版本和Oracle兼容的问题,这个指向有可能是错的。最后发现无法通过isql链接Oralce数据库。那么不妨在数据库中查找libodbcinst.so.2(find / -name libodbcinst*),将依赖改为libodbcinst.so.2的路径

以下是配置成功的截图

三、安装DM

配置ip:192.168.73.3

1.创建dmdba用户脚本:

groupadd dinstall  --创建安装用户组dinstall

useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba  --创建安装用户dmdba

passwd dmdba

2.安装DM,步骤省略

3.配置dm.ini文件

ARCH_INI=1   开启归档

RLOG_APPEND_LOGIC=1      开启逻辑附加日志

rlog_append_systab_logic=1         (如果要执行DDL脚本,则此参数设置为0)

4.配置dmarch.ini

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /dm/dmdba/dmdata/DAMENG/arch

ARCH_FILE_SIZE = 1024

ARCH_SPACE_LIMIT = 1024000 --归档空间上限

5.创建用户dmhs

disql  sysdba/sysdba:5236

SQL>create user dmhs identified by “1234567890”;

SQL>grant dba to dmhs;

6.关闭防火墙

chkconfig iptables off;  linux6

systemctl stop firewalld  linux7

以上步骤是前期的准备

四、配置DMHS.XML文件

捕获端配置示例

vi.DMHS_CPT.XML

<?xml version="1.0" encoding="GB2312"?>

<dmhs>

<base>

<lang>ch</lang>

<mgr_port>5355</mgr_port>

<chk_interval>3</chk_interval>

<ckpt_interval>60</ckpt_interval>

<siteid>3</siteid>

</base>

<cpt>--捕获端

<db_type>oracle11g</db_type>

<db_server>orcl</db_server>

<db_user>dmhs</db_user> 用户

<db_pwd>123456</db_pwd> 密码

<db_port>1521</db_port>

<idle_time>300</idle_time>

<ddl_mask>TABLE:VIEW:FUN:PRO:OP</ddl_mask>

<parse_thr>1</parse_thr>

<arch>

<clear_interval>600</clear_interval>

<clear_flag>1</clear_flag>

<bak_dir></bak_dir>

</arch>

<send>--发送 目的端

<ip>192.168.73.3</ip>

<mgr_port>5355</mgr_port>

<data_port>5356</data_port>

<trigger>0</trigger>

<constraint>0</constraint>

<identity>0</identity>

<net_turns>0</net_turns>

<filter>--过滤器

<enable>--允许同步的数据

<item>DMHS*</item>  --要同步数据的用户模式

</enable>

<disable>

<item></item>

</disable>--过滤掉的数据

</filter>

</send>

</cpt>

</dmhs>

执行端的配置示例

vi dmhs_exec.xml

 <?xml version="1.0" encoding="GB2312"?>

<dmhs>

<base>

<lang>ch</lang>

<mgr_port>5355</mgr_port>

<chk_interval>2</chk_interval>

<ckpt_interval>45</ckpt_interval>

<siteid>4</siteid>

</base>

<recv>

<data_port>5356</data_port>

<exec>

<db_type>dm7</db_type>

<db_server>127.0.0.1</db_server>

<db_user>dmhs</db_user>

<db_pwd>1234567890</db_pwd>

<db_port>5236</db_port>

<exec_mode>1</exec_mode>

<exec_thr>1</exec_thr>

<exec_sql>512</exec_sql>

<exec_trx>5000</exec_trx>

<exec_rows>250</exec_rows>

<msg_col_size>8000</msg_col_size>

<level>0</level>

</exec>

</recv>

</dmhs>

五、启动DMHS

1.启动执行端,这里是DM作为执行端

在另外一个窗口执行以下命令

这里报连接数据库失败,那么可以检查是否是用户和密码错误导致的,或者没有开启数据库数据库服务

这里没有启动达梦数据库服务

 

执行端已经启动成功

2.启动捕获端

打开另一个窗口

LOAD 0 "SCH.NAME='DMHS'"CREATE|INSERT|DICT   --装载模式为DMHS的数据

 

测试:

在捕获端创建表插入数据

在执行端查询是否有数据

 

 这里是oracle到dm7的同步,注意以下三点

①每次启动时,如果存在dmhs_exec.tmp/dmhs_cpt.tmp,先删除rm –rf 后启动

②装载数据字典时要clear exec lsn

③如果Oracle作为执行端的话,需要先安装unixodbc驱动。

 本文只是简单介绍Oracle到Dm7的同步,作为初学者,还需学习的地方很多。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!