Dmhs数据实时同步搭建DM7到DM7
准备工作
环境规划
源端: dm7a 192.168.80.11 kylin10
目的端: dm7b 192.168.80.12 kylin10
1.确定且源端的归档日志和逻辑日志已经打开;
dm.ini参数
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
dmarch.ini配置
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST =/dm7/arch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制。
- 启动源端和目的端的数据库(特别是修改了归档日志和逻辑日志参数后一定要重启数据库才能生效)。
- 安装dmhs软件,源端目的端都需要安装
(1)上传dmhs软件并授权
使用图形化安装
./dmhs_xxxx
选择下一步
选择接受许可
因为是测试搭建选择免费试用
选择安装目录点击下一步
选择安装
选择默认ip 源端ip
选择自动启动
下一步
确定
执行脚本
安装完成
在目的端也进行安装
同步DDL操作
如果需要启动 DDL 同步功能,在启动捕获器之前,需要完成DDL配置。
对于DM7数据库,有两种配置方法。一是执行DMHS安装程序目录的scripts 文件夹中ddl_sql_dm7.sql,二是在 dm.ini 中设 置 参 数 RLOG_APPEND_SYSTAB_LOGIC 为1。
这里使用执行sql脚本方式找到相应的ddl脚本
在管理工具执行
脚本执行完毕后通过以下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';
检查FAST_COMMIT参数是否为0
select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
配置dmhs.hs
源端
dmhs.hs 是 DMHS 默认的配置文件名,如果需要 DDL 同步,那么基本的配置示例如下:
切换至dmdba用户,在/dm7/dmhs/bin2下创建dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid> #站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535
</base>
<cpt>
<db_type>dm7</db_type>
<db_server>127.0.0.1</db_server> #数据库服务名或IP
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</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> <!--DDL配置项-->
#<dict_dir>/dbarch/dict</dict_dir> #数据字典的目录挂在共享磁盘 (创建/dict)
<arch><!--归档清理配置项-->
<clear_interval>600</clear_interval>
<clear_flag>1</clear_flag> #归档删除方式
<bak_dir>/dm7/arch_bak</bak_dir>
</arch>
<send><!-- 发送模块配置 -->
<ip>192.168.80.11</ip> #目的端ip
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<trigger>1</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
<constraint>1</constraint><!-- 是否忽略约束,默认为0,限定值0,1 -->
<identity>1</identity>
<net_turns>0</net_turns>
<filter><!--过滤配置项-->
<enable><!-- 白名单,所有允许同步的表 -->
<item>SYSDBA.*</item>
</enable>
</filter>
<map><!--映射配置项-->
#<item>SYSDBA.*==DMHS.*</item>
</map>
</send>
</cpt>
</dmhs>
目的端
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>ch</lang><!-- 语言选项,ch为中文,en为英文 -->
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->
<ckpt_interval>60</ckpt_interval><!-- 执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
<siteid>2</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
</base>
<recv><!-- 接收模块的基本配置,如果该节点只作为分析端,该节点需要删除 -->
<data_port>5346</data_port><!-- 数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<exec><!-- 执行模块的基本配置 -->
<db_type>dm7</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7 -->
<db_server>192.168.80.11</db_server><!—本地数据库服务名或IP -->
<db_user>SYSDBA</db_user><!-- 数据库用户名,默认为SYSDBA -->
<db_pwd>SYSDBA</db_pwd><!-- 数据库口令,默认为SYSDBA -->
<db_port>5236</db_port><!-- 数据库端口号,默认为5236 -->
<db_name></db_name><!-- 默认数据库名,默认为空串(只针对dm6有用) -->
<exec_mode>1</exec_mode><!-- 执行模式, 1(多线程执行),2(ETL模式),3(消息中转模式,跨网段级联时使用) -->
<exec_thr>4</exec_thr><!-- 执行线程个数,只有当exec_mode为1时才会生效!默认为1,最小值1,最大值64 -->
<exec_sql>1024</exec_sql><!-- SQL缓存大小,默认为512M,最小值32M,最大值4096M -->
<exec_trx> 5000 </exec_trx><!-- 事务缓存个数,默认为5000,最小值,1000,最大值10000 -->
<exec_rows>1000</exec_rows><!-- 批量绑定行数,默认为250,最小值1,最大值2000 -->
<exec_policy>2</exec_policy><!--执行策略:0 出错后忽略继续。1 出错后停止执行。2 出错后部分执行继续-->
<msg_col_size>8000</msg_col_size><!-- 保存缓存消息列的大小,这取决于目的库的块大小, 默认为8000,最小值1000,最大值8000 -->
<level>0</level><!-- 复制级别,默认为0,最小值0,最大值65535 -->
</exec>
</recv>
</dmhs>
开启目的端DMHS服务
执行之前需要编辑dmhs_serverd中的$DMHS_HOME(描述dmhs的bin目录)与path(描述dmhs.hs配置文件位置)参数
[dmhs@localhost bin]#./dmhs_serverd start
[dmhs@localhost bin]#./dmhs_console
DMHS >connect
DMHS >start
开启源端DMHS服务:
./dmhs_serverd start
,/dmhs_server
初始装载:
装载一般有两种选择,1为备份还原,2为从配置好时开始同步。在初次搭建过程中,需要将源端数据加载到目的端,有三种操作方法。
如果需要保证目的端数据和源端数据完全一致,搭建时选择将源数据库停止对应用程序访问,并对源数据库进行物理备份,并在目的端数据库进行还原。还原操作需要放到启动dmhs_server之前。
种情况下,目的端装载,执行命令:
[root@localhost bin]# ./dmhs_console
CSL[INFO]: DMHS控制台工具: V3.0.2.01-Build(2015.10.09)
DMHS >connect
CSL[UNKNOW]: 执行成功
DMHS >COPY 0 "SCH.NAME IS NOT NULL" DICT|LSN
这种装载方法,只会进行字典信息及LSN值的装载,启动同步后会从COPY时刻记录的LSN值开始进行数据同步。
[root@localhost bin]# ./dmhs_console
CSL[INFO]: DMHS控制台工具: V3.0.2.01-Build(2015.10.09)
DMHS >connect
CSL[UNKNOW]: 执行成功
DMHS >COPY 0 "SCH.NAME='D5000'" TRUNCATE|INSERT|LOCK|DICT|LSN
另外针对于一些特殊情况(例如源端磁盘紧张,且两端数据需要完全相同,无法备份的情况),在以上方法均不能适用时可采取直接copy的方法。
[root@localhost bin]# ./dmhs_console
CSL[INFO]: DMHS控制台工具: V3.0.2.01-Build(2015.10.09)
DMHS >connect
CSL[UNKNOW]: 执行成功
DMHS >COPY 0 "SCH.NAME IS NOT NULL " CREATE|INSERT|DROP|THREAD|8
以上命令可根据源端信息在目的端建表并插入数据,相当于查询建表(另外要注意如果配置有黑白名单的情况下,某些操作可能无法同步。THREAD|8为使用8线程完成copy工作。)
初始装载完成后,则可以开启同步:
源端DMHS:
./dmhs_console
DMHS >start