DMHS单机实时同步(DM7)

DMHS单机实时同步(DM7)

前言

DMHS 支持的操作系统平台:Windows 系列(包括 XP、Win2003、Win7/8/10、WinServer2008等),Linux(Redhat、Ubuntu、CentOS、Kylin、Rocky 等)、Aix、Solaris 等。内存要求:DMHS 需要的内存总量取决于执行的分析线程以及执行线程的并发数,最少需要 1G 内存。磁盘需求:DMHS 安装文件占用 277M,包括了管理工具以及管理界面占用的空间,另外需要一些额外的空间存储 DMHS 运行的日志文件。操作系统权限:在 Windows 安装时,安装和执行 DMHS 的用户必须是管理员身份;在 Linux 平台下安装,安装用户必须有权限读写 DMHS 安装目录,将涉及的数据库接口动态库添加到系统共享库环境变量中。TCP/IP:配置系统支持 TCP/IP 服务(DMHS 安装的所有机器必须配置主机名或者 IP 地址)。DMHS 需要使用以下 TCP/IP 端口:管理进程间通信的默认端口 5345;发送和执行子系统之间通信的默认端口 5346;用户可以自行定义这些端口。
dmhs.hs配置文件可以移动到bin2目录下进行配置,因为bin2目录是debug版本,出错容易排查,启动服务也可在bin2目录下。

一、开启归档和逻辑日志

1.1 设置归档标记和逻辑日志标记。打开 DM7 服务器配置文件“dm.ini”,设置如下值:

ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
注意:

dm.ini 配置参数中“FAST_COMMIT”必须为 0,否则会导致逻辑日志不全而影响同步。

1.2 添加归档配置文件。在“dm.ini”同目录下创建文件“dmarch.ini”,示例内容如下:

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 
ARCH_DEST = /opt/dmdbms/arch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制

1.3 重启 DM7 数据库,使配置参数生效。

1.4 验证配置的正确性

1.4.1 检查归档配置的正确性,请执行以下 SQL 命令:

SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';

查询结果如下则为正常:

行号 ARCH_DEST ARCH_FILE_SIZE
------- ---------------------------- --------------
1 /opt/dmdbms/arch 128
已用时间: 128.384(毫秒). 执行号:3

1.4.2 检查逻辑日志配置的正确性,通过下面的查询:

SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';

查询结果如下则为正常:

行号 PARA_VALUE
---------- ----------
1 1
已用时间: 20.685(毫秒). 执行号:4.

1.4.3 检查在线日志,通过如下的查询:

SELECT PATH FROM SYS.V$RLOGFILE;

查询结果如下则为正常:

行号 PATH
---------- ----------------------------------------
1 /opt/dmdbms/arch/src_db01.log
2 /opt/dmdbms/arch/src_db02.log
已用时间: 1.096(毫秒). 执行号:5.

1.4.4 检查 FAST_COMMIT 参数是否为 0

 select para_value from v$dm_ini where para_name = 'FAST_COMMIT';

查询结果如下则为正常:

行号 PARA_VALUE
---------- ----------
1 0
已用时间: 8.691(毫秒). 执行号:585.

二、配置 DDL

如果要求 DDL 同步,那么需要创建 DDL 触发器和辅助表。创建的脚本参见 DMHS 安装目录下 scripts 子目录中“ddl_sql_dm7.sql”。注意创建时需要使用 SYSDBA 用户。
检查创建的触发器和辅助表是否有效,检查辅助表的语句:

select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 
'VALID';

查询结果如下则为正常:

行号 OWNER TABLE_NAME
---------- ------ ---------------
1 SYSDBA DMHS_DDL_COL
2 SYSDBA DMHS_DDL_SQL
3 SYSDBA DMHS_DDL_CONS
4 SYSDBA DMHS_DDL_IDX
5 SYSDBA DMHS_DDL_RENAME
6 SYSDBA DMHS_DDL_SEQ
7 SYSDBA DMHS_DDL_PART
7 rows got
已用时间: 197.302(毫秒). 执行号:7.

检查触发器的语句:

select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and 
status = 'Y';

查询结果如下则为正常:

行号 OWNER TRIGGER_NAME
---------- ------ -----------------------
1 SYSDBA DMHS_DDL_TRIGGER_AFTER
2 SYSDBA DMHS_DDL_TRIGGER_BEFORE
3 SYSDBA DMHS_DDL_TRIGGER_GRANT
4 SYSDBA DMHS_DDL_TRIGGER_REVOKE
已用时间: 12.147(毫秒). 执行号:16.

三、配置 dmhs.hs

dmhs.hs 是 DMHS 默认的配置文件名,如果需要 DDL 同步,那么源端基本的配置示例如下:

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
 <base>
 <lang>ch</lang>
 <mgr_port>5345</mgr_port> 
 <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>
 <db_ssl_path></db_ssl_path>
 <db_ssl_pwd></db_ssl_pwd>
 <parse_thr>1</parse_thr>
 <ddl_mask>op:obj</ddl_mask> <!--DDL 配置项-->
 <arch><!--归档清理配置项-->
 <clear_interval>600</clear_interval>
 <clear_flag>2</clear_flag>
 <bak_dir>/dmarch/arch_bak</bak_dir>
 </arch>
 <send><!-- 发送模块配置 -->
 <ip>192.168.10.109</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>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm7</db_type>
<db_server>10.0.0.210</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<db_name></db_name>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>1000</exec_rows>
</exec>
</dmhs>

现对以上的基本配置作如下几点说明:

  1. siteid 全局唯一,即 DMHS 同步系统涉及的所有节点的 siteid 必须全局唯一,不允许有重复值。
  2. DDL 配置项,如果不需要 DDL 同步,那么就配置为空,即<ddl_mask></ddl_mask>,相应地 DMHS DDL 触发器和辅助表也不需要创建。
  3. 归档清理配置项,clear_flag 为 1 表示清除,即 DMHS 将同步完成的归档文件删除;为 2,表示将同步完成的归档移到 bak_dir 目录下;为 0,表示不作任何操作。
  4. 过滤配置项,本示例配置了白名单,即 enable,也可以配置黑名单。其过滤的规则是:先判断白名单,然后判断黑名单。如果存在重叠的情况,那么也是会被过滤的。
  5. 映射配置项,表示存在不同模式之间的表同步,例如本示例中源端的 SYSDBA 模式下的表映射成目的端的 DMHS 模式下同名的表。

四、开启源端服务

配置完成之后,则可以启动 DMHS 服务:dmhs_server。
Linux:

./dmhs_serverd start

Windows:

net start dmhs_server

五、初始化装载

初始装载是将源端数据库中的初始数据装载到目的端数据库,使 DMHS 同步的时刻源和目的端的同步表数据一致。装载前源端 DMHS 服务和目的端 DMHS 服务都需要开启。本示例的目的端 DMHS 使用的是和源端相同环境的 DM7 数据库。
步骤如下:
1)开启目的端 DMHS 服务:

 ./dmhs_serverd start

2)start 目的端 DMHS:

./dmhs_serverd start
./dmhs_console
DMHS >connect
DMHS >start

启动界面如下:
在这里插入图片描述
3)开启源端 DMHS 服务:

./dmhs_serverd start
  1. 初始装载:
./dmhs_serverd start
./dmhs_console
DMHS >connect
DMHS >copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX

示例如下:
在这里插入图片描述

六、开启同步

初始装载完成后,则可以开启同步:
源端 DMHS:

./dmhs_console
DMHS >start

示例如下:
在这里插入图片描述

七、初始化装载一些示例

示例:LOAD 0 “SCH.NAME=’SYSDBA’AND TAB.NAME=’TEST’” INSERT
说明:装载SYSDBA模式下的TEST表,装载时对该表上S锁,当该表装载完成以后才释放S锁
示例:LOAD 0 “SCH.NAME=’SYSDBA’” INSERT|NOLOCK
说明:装载SYSDBA模式下的所有表,装载时对该表短暂的上S锁,执行语句返回时便释放S锁
示例:LOAD 0 “SCH.NAME=’SYSDBA’AND TAB.NAME LIKE ‘T%’” INSERT
说明:装载SYSDBA模式下所有以T打头的表
示例:LOAD 0 “SCH.NAME=’SYSDBA’AND TAB.NAME=’TEST’”INSERT|“ID>100” 说明:装载TEST表时,只装载该表中ID列大于100的记录
示例:LOAD 0 "SCH.NAME='TEST' AND TAB.NAME='SF'" UPDATE|"OBJ,NAME"|STOP|FILE
说明:当日志分析依然在运行的情况下,暂停日志分析并更新表TEST.SF的OBJ和NAME列的值
示例:DMHS > COPY 0 “SCH.NAME=’TEST’ AND TAB.NAME=’TX’ ” ABSOLUTE|INSERT
说明:使用该掩码装载 TEST.TX 表
示例:DMHS > COPY 0 “SCH.NAME=’TEST’ AND TAB.NAME=’TX’ ” INSERT|AFTER|1000
说明:使用该掩码装载 TEST.TX 表查询结果集 1000 行以后的数据。
示例:DMHS > COPY 0 “SCH.NAME=’TEST’” ALTER|SEQUENCE
说明:把 TEST 用户下的所有序列当前值应用到目标端
示例:DMHS > COPY 0 BACKUP
说明:立即备份虚拟 ID 为 0 的 CPT 所指向的数据库并在目标端还原。
示例:DMHS > COPY 0 BACKUP|"/back"
说明:立即备份虚拟 ID 为 0 的 CPT 所指向的数据库并在目标端还原,源端备份文件存放在”/back”目录。
示例:DMHS > COPY 0 BACKUP|FILE|"/back/test_20160506.bak"
说明:指定源端的备份文件 test_20160506.bak 发送到目标端还原。
示例:DMHS > COPY 0 “SCH.NAME=’USO’” INSERT|THREAD|4|CONTINUE
说明:装载 USO 用户下所有的表,如果某表上次成功装载过这次则跳过该表。
示例:DMHS > COPY 0 “SCH.NAME=’USO’” CREATE|INSERT|THREAD|4
说明: 使用 4 个线程并发的装载 USO 模式下的所有表。

猜你喜欢

转载自blog.csdn.net/weixin_43459159/article/details/108778396