目录
一、基础概念
1.1DMHS
1.2部署分配
二、安装前准备
2.1oracle端(源端)前期准备
2.1.1检查系统信息
2.1.2检查系统内存与存储空间
2.1.3检查数据库管理系统
2.2DM8端(目的端)前期准备
2.2.1开启归档
2.2.2开启逻辑日志
2.2.3创建用户且授权
三、安装并部署DMHS服务器
3.1目的端(DM8)
3.1.1安装DMHS
3.2源端(oracle)
3.2.1解压安装文件
3.2.2配置文件
四、验证同步
4.1在源端创建表格
4.2查看目的端的传输结果
一、基础概念
1.1DMHS
达梦数据实时同步软件 DMHS 是达梦公司推出的新一代支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。
DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输 模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。
1.2部署分配
源端 | 目的端 | |
ip地址 | 192.168.37.140 | 192.68.37.130 |
数据库 | Oracle | DM8 |
部署地址 | /opt/dmhs/release | /opt/dmhs/release |
数据库端口号 | 1521 | 5236 |
DMHS服务端口 | 5345 | 5345 |
数据接收端口 | \ | 5346 |
二、安装前准备
2.1oracle端(源端)前期准备
在安装 DMHS 之前,源端数据库管理员应当首先完成安装前的准备工作。
1) 检查 ORACLE 数据库归档日志功能是否已开启;
2) 检查 ORACLE 数据库最小附加日志功能是否已开启;
3) 如果需要同步 DDL 操作,还需要检查 ORACLE 数据库回收站是否已关闭。
2.1.1检查系统信息
在安装 DMHS 前,需要检查当前操作系统的相关信息,确认 DMHS 安装程序与当 前操作系统匹配,以保证 DMHS 能够正确安装和运行。
getconf LONG_BIT ##查看系统位数
cat /etc/redhat-release ##查看release信息
uname -a ##查看系统名称
2.1.2检查系统内存与存储空间
为了保证 DMHS 的正确安装和运行,要尽量保证操作系统至少 1GB 的可用内存(RAM)。 如果可用内存过少,可能导致 DMHS 安装或启动失败。
1.检查内存呢
#获取内存总大小
grep MemTotal /proc/meminfo
#获取交换分区大小
grep SwapTotal /proc/meminfo
#获取内存使用详情
free
2.检查存储空间
DMHS 完全安装需要 1GB 的存储空间,用户需要提前规划好安装目录,预留足够 的存储空间。并且 DMHS 安装程序在安装时将产生临时文件,临时文件需要 1GB 的存储空间,临时文件目录默认为/tmp
df -h /opt ##查看opt的容量
df -h /tmp ##查看tmp的容量
2.1.3检查数据库管理系统
1.检查归档日志
检查源端数据库管理系统所在机器,是否开启数据库管理系统的归档日志、附加日志;如果需要 DDL 同步,还需要检查是否关闭数据库管理系统的回收站。
archive log list ##查看归档信息
如果没有打开归档则执行以下命令打开归档
shutdown immediate ## 关闭数据库
startup mount ## 以mount方式开启数据库
alter database archivelog; ## 开启归档
alter system set db_recovery_file_dest='';
alter system set log_archive_dest='/data/oracle/oradata/orcl/archlog';
alter database open; ## 开启数据库
2.检查附加日志
##检查附加目录是否开启
select supplemental_log_data_min, supplemental_log_data_all from v$database;
##若未开启则执行以下命令开启附加目录
alter database add supplemental log data;
alter database add supplemental log data (all) columns;
3.检查回收站
##查看回收站是否关闭
show parameter recycle;
##若回收站未关闭即recyclebin为on,则执行以下命令关闭
alter system set recyclebin=off deferred;
执行以上命令后需要重启数据库才能看到更改结果
4.检查同步用户权限
在 DMHS 捕获器中用于连接源端数据库管理系统的数据库用户,若没有 DBA 权限,则 至少应被赋予以下权限(SQL 执行)。
5.设置源端字符集
当数据库数据包含中文字符时,需将 DMHS 运作所在窗口的 NLS_LANG 设置为对应 的字符集,建议使用 AMERICAN_AMERICA.ZHS16GBK。
select userenv('language')from dual; ##查询数据库字符集
echo $NLS_LANG ##查询系统字符集
如果该变量值为空或者与查询结果不一致,请将改变量设置为查询结果的值修改 /.bash_profile或者/.profile,增加以下:
export NLS_LANG='AMERICAN_AMERICA.ZHS16GBK'
source ~/.bash_profile ##更新
6.创建数据库用户dmhs
##创建dmhs用户
create user DMHS identified by "DMHS" default tablespace USERS temporary tablespace TEMP profile DEFAULT;
##赋予dmhs以下权力
grant dba to DMHS;(用于测试时)
grant connect 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;
7. Root用户安装odbc
搭建DMHS最安装2.3.0以上的版本的odbc
rpm -qa|grep unixODBC ##查看是否安装了ODBC
##添加ODBC环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
##安装ODBC
yum -y install unixODBC unixODBC-devel
odbcinst -j
创建/ect/odbc.ini文件在odbc.ini添加以下内容:
vim /etc/odbc.ini
[ORACLE]
Description = Oracle ODBC driver for Oracle 11g
Driver= Oracle in OraDb11g_home1
SERVER = 192.168.37.140
ServerName = orcl
UserID = DMHS
Password = DMHS
Port = 1521
配置 odbcinst.ini 文件
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /data/ora/oracle/product/11.2.0/lib/libsqora.so.11.1
Threading = 0
查看是否缺少依赖:
ldd /data/oracle/product/11.2.0/lib/libsqora.so.11.1
如果缺少依赖则执行以下内容:
find / -name libclntsh* ##查找文件路径
cp /data/oracle/product/11.2.0/lib/libclntsh.so.11.1 /lib64/libclntsh.so.11.1 ##将文件复制到lib64路径
再次查看依赖
ldd /data/oracle/product/11.2.0/lib/libsqora.so.11.1
所有依赖都已存在。
使用 isql 命令测试配置是否正确:
isql -v ORACLE dmhs 123456
2.2DM8端(目的端)前期准备
先执行上面部分的2.1.1和2.1.2的前1、2点内容。
2.2.1开启归档
进入数据库,查看是否开启归档:
./disql SYSDBA/SYSDBA:5236
SQL> select arch_mode from v$database;
Y表示已开启
2.2.2开启逻辑日志
##查看逻辑日志是否开启
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME='RLOG_APPEND_LOGIC';
未开启则执行以下命令开启逻辑日志:
SP_SET_PARA_VALUE(2,'RLOG_APPEND_LOGIC',1);
执行完成后需要重启数据库服务器:
DmServicedmserver restart
再次查询逻辑归档是否开启:
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME='RLOG_APPEND_LOGIC';
2.2.3创建用户且授权
create user dmhs identified by "SYSDBA123456" default tablespace MAIN temporary tablespace TEMP;
grant dba to dmhs;
grant connect to dmhs;
grant select any table to dmhs;
grant resource to dmhs;
三、安装并部署DMHS服务器
3.1目的端(DM8)
3.1.1安装DMHS
mkdir /opt/dmhs ##创建dmhs文件目录
将dmhs安装包上传至该目录并进行解压:
unzip dmhs_oracle_rh6_64_veri_20220301_x86_rh7.zip
在dmhs安装目录/opt/dmhs/release下新建dmhs.hs文件,并添加以下内容:
touch dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<ckpt_interval>45</ckpt_interval>
<siteid>4</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>192.168.37.130</db_server>
<db_user>dmhs</db_user>
<db_pwd>SYSDBA123456</db_pwd>
<db_port>5236</db_port>
<char_code>PG_UTF8</char_code>
<db_name></db_name>
<exec_thr>8</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>2000</exec_trx>
<exec_rows>2000</exec_rows>
<msg_col_size>30000</msg_col_size>
<ddl_continue>1</ddl_continue>
<affect_row>0</affect_row>
<exec_policy>2</exec_policy>
<enable_rowid>0</enable_rowid>
<clear_trx_file>1</clear_trx_file>
<trx_max_file>8</trx_max_file>
</exec>
</dmhs>
3.1.2配置服务文件
将模板文件,复制一份为正式服务并授权,并修改文件内容
cp TemplateDmhsService DmhsService
chmod +x DmhsService
vi DmhsService
#set execute environment
#REPLACE DMHS_HOME path
DMHS_HOME=/opt/dmhs/release
#REPLACE program dir
PROG_DIR=/opt/dmhs/release
#REPLACE program config path
CONF_PATH=/opt/dmhs/release/dmhs.hs
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=
HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
将key 文件上传至安装目录并修改文件名文dmhs.key
3.1.3启动dmhs服务器
cd至dmhs安装目录release:
./DmhsService start
./dmhs_console
DMHS> connect ##连接
execute success
DMHS> start exec ##开启exec工具
execute success
3.2源端(oracle)
3.2.1解压安装文件
以下配置最好使用oracle用户进行操作:
在/opt目录创建文件夹dmhs,并将安装包上传至该目录进行解压:
unzip dmhs_oracle_rh6_64_veri_20220301_x86_rh7.zip
3.2.2配置文件
以下配置最好使用oracle用户进行操作:
在/opt/dmhs/release目录下创建dmhs.hs文件并添加以下内容:
touch dmhs.hs ##创建文件
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>45</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<db_type>oracle11g</db_type>
<db_server>orcl</db_server>
<db_user>DMSH</db_user>
<db_pwd>DMHS</db_pwd>
<ddl_mask>op:obj</ddl_mask>
<char_code>PG_UTF8</char_code>
<constraint>1</constraint>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.37.130</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<filter>
<enable>
<item>DMHS.*</item>
</enable>
<disable>
</disable>
</filter>
</send>
</cpt>
</dmhs>
复制模板文件为服务文件并进行授权
cp TemplateDmhsService DmhsService
chmod +x DmhsService
修改DmhsService文件的以下内容
#set execute environment
#REPLACE DMHS_HOME path
DMHS_HOME=/opt/dmhs/release
#REPLACE program dir
PROG_DIR=/opt/dmhs/release
#REPLACE program config path
CONF_PATH=/opt/dmhs/release/dmhs.hs
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=
HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
3.2.3连接dmhs服务器
当源端的文件配置完成后,可以在 /opt/dmhs/release 目录下执行以下语句进行连接:
./DmhsService start
./dmhs_console
connect
clear exec lsn
copy 0 "sch.name='DMHS'"|CREATE
copy 0 "sch.name='DMHS'"|INSERT|THREAD|2
start cpt
出现该错误:分析模块1连接站点192.168.37.130失败,3秒后重试
可以尝试排查目的端的防火墙是否关闭
四、验证同步
4.1在源端创建表格
登录DMHS用户后输入以下命令:
create table DMHS.test(id int,name varchar2(30));
insert into DMHS.test values(1,'nanjing');
commit;
4.2查看目的端的传输结果
通过dmhs_server可以快速看到传输效果:
通过 ./disql 工具登录 dmhs 查看表格: