一、概念
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的同步,作为初学者,还需学习的地方很多。
来源:CSDN
作者:zcn126
链接:https://blog.csdn.net/zcn126/article/details/104519469