10.DMHS工具使用-DM对接DM

前言

达梦数据实时同步软件(以下简称 DMHS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实时同步复制,本篇主要讲使用该工具对接使用 DM 迁移 DM 的过程步骤以及遇到的问题

一、安装部署

1. 环境检查

## 需要源端目的端一致
echo $LANG
## 时间一致
date
## 关闭防火墙
systemctl status firewalld.service  
systemctl stop firewalld.service  
systemctl disable firewalld.service  
## 关闭 SELinux
sed -i 's/^SELINUX.*/SELINUX = disabled/g' /etc/selinux/config

2. 数据库参数配置

  • 开启归档日志
    • 方法一 :
ALTER DATABASE MOUNT;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/home/dmdba/dmarch/DMHS,TYPE=LOCAL,SPACE_LIMIT=0';
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
    • 方法二 :
## 修改 dm.ini 文件的 arch_ini 参数为1
## 在 dm.ini 文件目录新建dmarch.ini 文件,添加以下内容
cat >  /opt/dm/data/DAMENG/dmarch.ini << EOF
ARCH_WAIT_APPLY            = 1   #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL  #本地归档类型
ARCH_DEST                = /opt/dm/data/DAMENG/arch/  #本地归档存放路径
ARCH_FILE_SIZE           = 1024  #单个归档大小,单位 MB
ARCH_SPACE_LIMIT         = 51200  #归档上限,单位 MB
EOF
    • 确认归档是否开启
-- ARCH_MODE 为 Y ,表示启用归档;为 N,表示未启用。
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
  • 其他数据库参数
-- 开启逻辑追加日志
-- RLOG_APPEND_LOGIC 为 1 ,表示逻辑追加日志启用;为 0 表示未启用。
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
SP_SET_PARA_VALUE(1,'RLOG_APPEND_SYSTAB_LOGIC',1);
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';

-- 检查在线日志
SELECT PATH FROM SYS.V$RLOGFILE;

-- 查询值为0即正常
select para_value from v$dm_ini where para_name = 'FAST_COMMIT';

3. 配置 DDL

-- 使用disql工具执行,需要先执行set define off和set char_code utf8来设置关闭本地变量和设置字符集编码,然后使用"start /xx/xx.sql"执行该脚本,如果是使用DM管理工具连接的数据库,可以直接复制SQL脚本内容到查询框执行即可
set define off
set char_code utf8
start /home/dmdba/dmhs/scripts/ddl_sql_dm8.sql

-- 检查
select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';
select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';

4. dmhs 安装

  • 源端目标端服务器执行安装(安装包需要找社区人员或者销售获取)

5. 存放 DMOCI 以及对应的 key

  • 源端目标端服务器都需要执行
  • key 肯定需要存放,不然会出现配置后无法登录问题,且没有报错
cp -r dmoci/* $DMHS_HOME/bin/
cp dmhs.key $DMHS_HOM/bin/dmhs.key

6. 目标端配置

  • 目标库配置文件,尽量不要通过上传文件覆盖,会产生权限问题
cd $DMHS_HOME/bin

## dmhs.hs 是默认的配置文件,也可以指定文件进行
cat >> dmhs.hs << EOF
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
 <base>    <!-- 管理模块的基本配置 -->
    <lang>en</lang>    <!-- 语言选项,ch 为中文,en 为英文 -->
    <mgr_port>5345</mgr_port>    <!-- 管理端口号,默认为5345-->
    <ckpt_interval>60</ckpt_interval>    <!-- 检查点间隔,默认60 -->
    <siteid>2</siteid>    <!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
    <version>2.0</version>
</base>
<exec>    <!-- 执行模块的基本配置 -->
  <recv>
    <data_port>5346</data_port>    <!-- 当数据传递采用网络直连时,需要配置该参数,表明同步数据从该端口号获取。 -->
  </recv>
  <db_type>dm8</db_type>    <!-- 目标端数据库类型 -->
  <db_server>192.168.30.180</db_server>    <!-- 目标端数据库服务名或IP -->
  <db_user>SYSDBA</db_user>    <!-- 目标端数据库用户 -->
  <db_pwd>SYSDBA</db_pwd>    <!-- 用户的密码 -->
  <db_port>30236</db_port>    <!-- 目标端数据库端口 -->
  <db_name></db_name>    <!-- 默认数据库名,默认为空串(只针对dm6有用)-->
  <char_code>PG_GB18030</char_code>
  <exec_thr>4</exec_thr>    <!-- 执行线程个数,只有当 exec_mode 为 1 时才会生效!默认为1 -->
  <exec_sql>1024</exec_sql>    <!-- SQL 缓存大小,默认为 512M -->
  <exec_trx> 5000 </exec_trx>    <!-- 事务缓存个数,默认为 5000 -->
  <exec_rows>1000</exec_rows>    <!-- 批量绑定行数,默认为 250 -->
 </exec>
</dmhs>
EOF
  • 创建服务脚本
cp service_template/DmhsService .
sed -i 's/^DMHS_HOME.*/DMHS_HOME=$DMHS_HOME' DmhsService
sed -i 's/^PROG_DIR.*/PROG_DIR=$DMHS_HOME\/bin/' DmhsService
sed -i 's/^CONF_PATH.*/CONF_PATH=$DMHS_HOME\/bin\/dmhs.hs/' DmhsService
sed -i 's/^HS_NLS_LANG.*/HS_NLS_LANG=""/' DmhsService
sed -i 's/^NEED_LIB_PATH.*/NEED_LIB_PATH=$DM_HOME\/bin:$DMHS_HOME\/dmhs\/bin/' DmhsService
## 查看修改
cat DmhsService |grep -E "^DMHS_HOME|^PROG_DIR|^CONF_PATH|^HS_NLS_LANG|^NEED_LIB_PATH"
  • 目标端启动
./DmhsService start
./dmhs_console
start exec

7. 源端配置

  • 源端配置文件,尽量不要通过上传文件覆盖,会产生权限问题
cd $DMHS_HOME/bin

## dmhs.hs 是默认的配置文件,也可以指定文件进行
cat >> dmhs.hs << EOF
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
	<base>
		<lang>en</lang>
		<mgr_port>5345</mgr_port>
		<ckpt_interval>60</ckpt_interval>
		<siteid>1</siteid>
		<version>2.0</version>
	</base>	
		<cpt>
			<db_type>dm8</db_type>
			<db_server>192.168.30.179</db_server>
			<db_user>SYSDBA</db_user>
			<db_pwd>SYSDBA</db_pwd>
			<db_port>30236</db_port>
			<db_ssl_path></db_ssl_path>
			<db_ssl_pwd></db_ssl_pwd>
			<parse_thr>1</parse_thr>
			<ddl_mask>op:obj</ddl_mask>
			<arch>
				<clear_interval>600</clear_interval>
				<clear_flag>0</clear_flag>
			</arch>
			<send>
				<ip>192.168.30.180</ip>
				<mgr_port>5345</mgr_port>
				<data_port>5346</data_port>
				<trigger>1</trigger>
				<constraint>1</constraint>
				<identity>1</identity>
				<net_turns>0</net_turns>
				<filter>
					<enable>
						<item>SYSDBA.*</item>
						<item>DMHR.*</item>
					</enable>
				</filter>
				<map>
					<item>SYSDBA.*==SYSDBA.*</item>
					<item>DMHR.*</item>
				</map>
			</send>
		</cpt>
	
</dmhs>
EOF
  • 创建服务脚本
cp service_template/DmhsService .
sed -i 's/^DMHS_HOME.*/DMHS_HOME=$DMHS_HOME' DmhsService
sed -i 's/^PROG_DIR.*/PROG_DIR=$DMHS_HOME\/bin/' DmhsService
sed -i 's/^CONF_PATH.*/CONF_PATH=$DMHS_HOME\/bin\/dmhs.hs/' DmhsService
sed -i 's/^HS_NLS_LANG.*/HS_NLS_LANG=""/' DmhsService
sed -i 's/^NEED_LIB_PATH.*/NEED_LIB_PATH=$DM_HOME\/bin:$DMHS_HOME\/dmhs\/bin/' DmhsService
## 查看修改
cat DmhsService |grep -E "^DMHS_HOME|^PROG_DIR|^CONF_PATH|^HS_NLS_LANG|^NEED_LIB_PATH"
  • 源端启动服务
./DmhsService start

8. 实时同步测试

  • 源库导入模本库,目标库不导入,但是需要新建模型,否则会报错
  • 源端开启同步
./dmhs_console
## 装载数据
copy 0 "sch.name='DMHR'" DICT|LSN|CREATE|INSERT|INDEX

## 开始进行实时同步
start cpt

  • 装载数据SQL
##为了初始化日志的起始位置
clear exec lsn
copy 0 "sch.name='DMHR'" DICT|LSN|CREATE|INSERT|INDEX
COPY 0 " sch.name='DMHR' and tab.name in ('TEST')"  DICT|LSN|CREATE|INSERT|INDEX 
COPY 0 " tab.name in ('DMHR.TEST')"  CREATE|INSERT|INDEX

二、额外内容

1. 安装 ODBC

## 使用 root 用户
yum -y install unixODBC
odbcinst -j  

cat >> /etc/odbcinst.ini << EOF
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dmdbms/bin/libdodbc.so
EOF

## 没有需要新增
cat >  /etc/odbc.ini << EOF

[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236
EOF

2. 测试 ODBC 连接

  • 使用 dmdba 用户进行测试
isql dm8 -v

参考内容

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值