DMHS数据实时同步软件的配置及使用。
在安装DMHS时,需要与用户确认如下几个问题:
2.1 DMHS需要跟客户确定源端到目的端是否有隔离设备,如果涉及到隔离设备需要现场工程师开通源端到目的端的访问端口以及目的端的映射IP(目的端映射给源端的虚拟IP地址)
2.2 DMHS安装时,需要确认源端,目的端网络能够互相通信,最简单的方法是测试是否可以从源端发包到目的端。(默认情况开通TCP协议5345、5346)
部门内部提供的端口测试工具dmnet,使用说明如下:
dmnet分为客户端和服务器,根据命令行分别对应不同的应用类型
服务器:应该部署在三区 命令行启动:dmnet port
客户端:应该部署在一区 命令行启动:dmnet port pagesize need_sleep_or_not send_val
说明:
send_val:新增参数,代表的是客户端向服务器发送的值,不填的话,发送的值是随机的;1:发送的是1;非1:发送的是0
示例:
III区 ./dmnet 5346
I区 ./dmnet XXXX:5346 32 1
2.3确认DMHS同步规则。比如那些模式需要同步,哪些模式不同步,哪些表不同步,这些前期准备工作需要做足。
2.4 DMHS目的端需要禁用触发器(非必须)并且不支持自增列的使用,建议同步的业务表有主键列,这些限制需要与用户确认。
3.1源端为DM7,需要申请对应操作系统的同步源为DM7的DMHS版本。
3.2目的端为DM7,需要申请对应操作系统的执行端为DM7的DMHS版本。
若源端和目的端的操作系统环境相同,可以使用同一版本。
1.使用dmdba用户将DMHS软件安装到对应目录下。一般目录命名为/home/dmdba/dm/dmhs。
步骤1:安装文件赋权
步骤2:命令行安装,执行安装文件 加-i参数,再安装远程部署工具名称[HsAgent]时候直接ctrl +c中断即可。
2.跟公司或项目商务同事申请DM7的 libdmoci.so文件,放到数据库bin目录下。
3.检查dmdba安装DMHS软件后的环境变量
4.拷贝完成后检查.so文件权限正确性。(源端验证libcpt_dm7.so ,目的端验证libdmhs_exec.so)
4.2.1 开启归档和逻辑日志
ARCH_MODE
------------------
N
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/archivelog,TYPE =local,FILE_SIZE =1024';
ALTER DATABASE ARCHIVELOG;
alter system set 'ARCH_INI'=1 both;
select arch_mode from v$database;
ALTER DATABASE OPEN;
DM7归档参数的具体含义参见DM7用户手册。
注意:dm.ini配置参数中“FAST_COMMIT”必须为0,否则会导致逻辑日志不全而影响同步
SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='FAST_COMMITC';。
示例:如果是以下结果表示正常可以进行下一步
4.2.2 配置DDL
如果要求DDL同步,那么需要创建DDL触发器和辅助表。创建的脚本参见DMHS安装目录下scripts子目录中“ddl_sql_dm7.sql”。注意创建时需要使用SYSDBA用户,建议使用manager工具执行脚本。
检查创建的触发器和辅助表是否有效,检查辅助表的语句:
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
查询结果如下:
如果存在以上的查询结果,表示DMHS辅助表创建有效。
检查触发器的语句:
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';
查询结果如下:
如果存在以上的查询结果,表示DMHS触发器创建有效。
4.2.3 源端DMHS配置文件
cd $DMHS_HOME/bin
vi dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
</base>
<cpt>
<db_type>DM7</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<idle_time>300</idle_time>
<char_code>PG_GB18030</char_code>
<ddl_mask>OP:TABLE:VIEW:PRO:FUN:TR:INDEX:CHECK:SEQ:PKG:TYPE:SYN:ROLE:REC</ddl_mask>
<dict_dir>/dm/dmhs_dir</dict_dir><!—建议设置存储路径,避免主机异常后数据无法继续同步-->
<arch>
<clear_interval>43200</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.1.12</ip><!—III区网闸对应的目的端地址-->
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<net_pack_size>32</net_pack_size>
<timeout>0</timeout>
<net_turns>1</net_turns><!—开启网闸模式-->
<crc_check>1</crc_check>
<trigger>1</trigger>
<constraint>1</constraint>
<identity>1</identity>
<filter>
<enable>
<item>DMHS.*</item> <!—I区同步的模式-->
<item>DM_TEST.*</item> <!—I区同步的模式-->
</enable>
<disable>
</disable>
</filter>
<map>
</map>
</send>
</cpt>
</dmhs>
4.3.1 目的端DMHS配置文件
cd $DMHS_HOME/bin
vi dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<ckpt_interval>45</ckpt_interval>
<siteid>2</siteid>
</base>
<recv>
<data_port>5346</data_port>
<exec>
<db_type>dm7</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<exec_mode>1</exec_mode>
<exec_thr>64</exec_thr>
<exec_sql>8192</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>1000</exec_rows>
<exec_policy>2</exec_policy>
<msg_col_size>8000</msg_col_size>
<char_code>PG_GB18030</char_code>
<enable_merge>1</enable_merge>
<dict_sql>0</dict_sql>
<enable_depended>0</enable_depended>
<level>0</level>
<recv_caches>64</recv_caches>
<save_point_times>3</save_point_times>
<affect_row>0</affect_row>
<ddl_continue>1</ddl_continue>
<err_msg_policy>0</err_msg_policy>
</exec>
</recv>
</dmhs>
4.4.1 启动目的端服务
$ cd $DMHS_HOME/bin/service_template
$ cp DmhsService ../dmhs_serverd
$ vi dmhs_serverd
修改如下内容:
DMHS_HOME=/home/dmdba/dm/dmhs
PROG_DIR=/home/dmdba/dm/dmhs/bin
CONF_PATH=/home/dmdba/dm/dmhs/bin/dmhs.hs
NEED_LIB_PATH=/home/dmdba/dm/dmhs/bin:/home/dmdba/dm/dmdbms/bin:/usr/local/lib
HS_NLS_LANG=""
EXEC_PROG_NAME=”dmhs_server”
SERVICE_TYPE_NAME=”Dmhs server”
启动DMHS
$ ./dmhs_serverd
[dmdba@DM bin]$
[dmdba@DM bin]$ ./dmhs_console
连接到DMHS:127.0.0.1:5345
DMHS> start exec
4.4.2 启动源端服务
$ cd $DMHS_HOME/bin/service_template
$ cp DmhsService ../dmhs_serverd
$ vi dmhs_serverd
修改如下内容:
DMHS_HOME=/home/dmdba/dm/dmhs
PROG_DIR=/home/dmdba/dm/dmhs/bin
CONF_PATH=/home/dmdba/dm/dmhs/bin/dmhs.hs
NEED_LIB_PATH=/home/dmdba/dm/dmhs/bin:/home/dmdba/dm/dmdbms/bin:/usr/local/lib
HS_NLS_LANG=""
EXEC_PROG_NAME=”dmhs_server”
SERVICE_TYPE_NAME=”Dmhs server”
启动DMHS
$ ./dmhs_serverd
[dmdba@DM bin]$
[dmdba@DM bin]$ ./dmhs_console
DMHS> stop cpt
源端查询当前LSN号,指定LSN进行数据同步,避免扫描本地多余归档日志,提升同步效率。
查询源端当前LSN:select CUR_LSN from v$rlog;
执行命令:
$ ./dmhs_console
DMHS> SET EXEC LSN 34347629
DMHS> COPY 0 "SCH.NAME='DMHS'" DROP|CREATE|INSERT|INDEX|DICT|LSN
CSL[WARN]: 检测到DROP掩码,该掩码会删掉目标库:TABLE! 请确认是否继续?(Y/N)
Y
CSL[WARN]: 检测到LSN掩码,该掩码会忽略日志中小于当前LSN的所有操作,请确认是否继续?(Y/N)
Y
copy mask is : |CREATE|DROP|INSERT|INDEX|TABLE|DICT|LSN|PARTITION|OBJID|REP
执行完成,请查看执行模块日志,检查数据装载是否成功
DMHS> start cpt
1)在目的端,连入dmhs_console工具
./dmhs_console
2)连接目的端dmhs_server
Connect ip:mgr_port(dmhs_server服务管理端口号)
3)使用state命令查看对应的exec的vid。
4)Exec vid,打出目的端统计信息。
5)多次打印统计信息,查看消息流量和日志时间是否正常。
dmhs安装用户执行
$cd $DMHS_HOME
$vi dmhs_monitor.sh
#监控dmhs_server进程,如果dmserver进程在并且dmhs_server进程不在,则启动dmhs_server;如果dmserver不在,dmhs_server在则停止dmhs_server
#!/bin/bash
pidcount=`ps cax -o pid,command | grep -w dmserver | grep -c dmserver`
if [ $pidcount -eq 1 ]; then
serverpid=`ps -ef|grep dmhs_server |grep -v grep|awk '{print $2}'`
if [ "$serverpid" = "" ]
then
serverpid=`ps -ef|grep dmhs_server |grep -v grep|awk '{print $2}'`
if [ "$serverpid" = "" ]
then
date
echo "dmhs_server process do not exist."
echo "restart dmhs_server ..."
cd /home/dmdba/dm/dmhs/bin
./dmhs_serverd start
fi
fi
fi
if [ $pidcount -eq 0 ]; then
serverpid=`ps -ef|grep dmhs_server |grep -v grep|awk '{print $2}'`
echo $serverpid
if [ "$serverpid" != "" ]
then
date
echo "dmhs_server process existed but dmserver not exist."
echo "stop dmhs_server ..."
cd /home/dmdba/dm/dmhs/bin
./dmhs_serverd stop
fi
fi
#配置定时启动任务
$crontab -e
*/1 * * * * sh /home/dmdba/dm/dmhs/dmhs_monitor.sh
【报错】PUB[ERROR]:获取客户端字符集失败
截图如下:
【解决方法】
检查客户端环境变量:echo $LANG 输出字符集是否与dmhs.hs配置一致zh_CN.gb18030
检查服务配置文件/etc/dm svc.conf 添加CHAR_CODE=(PG GB18030)
【报错】库文件libcpt_dm7.so未找到,出错:0,libcpt_dm7.so:cannot open shared object file:No such file or directory
报错截图:
【解决方法】
检查$DMHS_HOME/bin目录下是否存在libcpt_dm7.so,一般因为DMHS版本使用错误导致。
【报错】libdmoci.so => not found
报错截图:
【解决方法】
找项目商务同事申请对应DM7版本的libdmoci.so文件,放到$DMHS_HOME/bin目录下即可。
文章
阅读量
获赞