目录
一、基础概念
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 查看表格:
以上就是本文的主要内容,如果想了解更多关于DMHS的知识,可以浏览以下平台:
总结:本文主要介绍了DMHS在oracle和dm8的部署。如有错误,欢迎指正。