注册
DMHS基于DM7数据库的LSN初始化同步
技术分享/ 文章详情 /

DMHS基于DM7数据库的LSN初始化同步

丁丁 2023/03/01 1936 1 0

1.环境描述

源端:192.168.1.225 数据库DM7 (提示:源端数据库开启归档日志和逻辑附加日志)
目的:192.168.1.223 数据库DM7
DMHS版本:V4.3.06

2.源端数据库检查

select para_value from v$dm_ini where para_name = ‘FAST_COMMIT’;
注意:dm.ini 配置参数中“FAST_COMMIT”必须为 0,否则会导致逻辑日志不全而影响同步。

#检查附加日志是否开启
select PARA_NAME,PARA_VALUE,PARA_TYPE from v$dm_ini where para_name=‘RLOG_APPEND_LOGIC’;

#开启附加日志
call sp_set_para_value(1,‘RLOG_APPEND_LOGIC’,1);

3.部署实施DMHS同步工具;

命令行方式安装简易版即可,根据安装导航提示,这里不做描述,省略…

4.配置源端DDL同步脚本:

执行DDL脚本ddl_sql_dm7.sql, 有个坑跟大家分享下:
4.1 SYSDBA用户登录执行DDL脚本,建议使用manager图形工具执行,不会遇到任何问题;
4.2 命令行中的脚本有异常,初步判断和字符集有关,必须使用disql执行脚本的情况,可以下载脚本后把内容复制拷贝到服务器的新建文档中执行,需要进行如下设置即可正常运行结束。
SQL> set define off
SQL> set char_code UTF8
SQL> start $DMHS_HOME/scripts/ddl_sql_dm7.sql

5.创建模拟同步用户和数据

–同步用户默认表空间
create tablespace dm datafile ‘/home/dm7/dmdbms/data/BJ/dm01.dbf’ size 200;
–创建同步用户DM
create user dm identified by dm123456789 default tablespace dm;
–赋权用户resource角色
grant resource to dm;
–DM用户登录创建模拟数据
SQL> CREATE TABLE TEST1(C1 INT,C2 NUMBER, C3 VARCHAR(20) ,SRC_TIME DATE DEFAULT SYSDATE, primary key (c1));
操作已执行
SQL> CREATE TABLE TEST2(C1 INT,C2 NUMBER, C3 VARCHAR(20) ,SRC_TIME DATE DEFAULT SYSDATE, primary key (c1));
操作已执行
已用时间: 22.552(毫秒). 执行号:1356.
SQL> CREATE TABLE TEST3(C1 INT,C2 NUMBER, C3 VARCHAR(20) ,SRC_TIME DATE DEFAULT SYSDATE, primary key (c1));
操作已执行
已用时间: 22.011(毫秒). 执行号:1357.
SQL> CREATE TABLE TEST4(C1 INT,C2 NUMBER, C3 VARCHAR(20) ,SRC_TIME DATE DEFAULT SYSDATE, primary key (c1));
操作已执行
已用时间: 22.066(毫秒). 执行号:1358.
SQL> CREATE TABLE TEST5(C1 INT,C2 NUMBER, C3 VARCHAR(20) ,SRC_TIME DATE DEFAULT SYSDATE, primary key (c1));
操作已执行
已用时间: 69.369(毫秒). 执行号:1353.

SQL> begin
for i in 1…100000
loop
INSERT INTO TEST1(C1,C2,C3) VALUES(i, 123.24,‘GOOD’);
IF mod(i,1000) = 0 THEN
commit;
end if;
end loop;
commit;
end;
/

DMSQL 过程已成功完成

SQL> begin
for i in 1…100000
loop
INSERT INTO TEST2(C1,C2,C3) VALUES(i, 123.24,‘GOOD’);
IF mod(i,1000) = 0 THEN
commit;
end if;
end loop;
commit;
end;
/

DMSQL 过程已成功完成

SQL> SQL> begin
for i in 1…100000
loop
INSERT INTO TEST3(C1,C2,C3) VALUES(i, 123.24,‘GOOD’);
IF mod(i,1000) = 0 THEN
commit;
end if;
end loop;
commit;
end;
/

DMSQL 过程已成功完成

SQL> begin
for i in 1…100000
loop
INSERT INTO TEST4(C1,C2,C3) VALUES(i, 123.24,‘GOOD’);
IF mod(i,5000) = 0 THEN
commit;
end if;
end loop;
commit;
end;
/

DMSQL 过程已成功完成

SQL> SQL> begin
for i in 1…100000
loop
INSERT INTO TEST5(C1,C2,C3) VALUES(i, 123.24,‘GOOD’);
IF mod(i,5000) = 0 THEN
commit;
end if;
end loop;
commit;
end;
/

DMSQL 过程已成功完成

6.源端在线联机备份

SQL> backup database full backupset ‘/home/dm7/backup/BACKUP_FILE_01’;

7.查看备份集LSN

手工dmhs.conf中记录cpt_start_lsn=(XXXX)或dmhs执行copy装载会自动填充)
[dm7@dwm bin]$ ./dmrman
dmrman V7
RMAN> show backupset ‘/home/dm7/backup/BACKUP_FILE_01’;

8.配置源端和目的端DMHS参数文件配置

默认在dmhs_home/bin下
源端: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>1</siteid>
        <version>2.0</version>
    </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>5237</db_port>
       <idle_time>300</idle_time>
       <ddl_mask>op:obj</ddl_mask>
       <parse_thr>1</parse_thr>
     <arch>
       <clear_interval>600</clear_interval>
       <clear_flag>2</clear_flag>
       <bak_dir></bak_dir>
     </arch>
     <send>
       <ip>192.168.1.223</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>DM.*</item>
         </enable>
       </filter>
       <map>
         <item>DM.*==DM.*</item>
       </map>
     </send>
    </cpt>
</dmhs>

目的端: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>
        <version>2.0</version>
    </base>
    <exec>
       <recv>
        <data_port>5346</data_port>
       </recv>
       <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>5237</db_port>
       <db_name></db_name>
       <char_code>PG_GB18030</char_code>
       <exec_thr>4</exec_thr>
       <exec_policy>1</exec_policy>
       <exec_sql>1024</exec_sql>
       <exec_trx> 5000 </exec_trx>
       <exec_rows>1000</exec_rows>
    </exec>
</dmhs>

9.备库还原操作(DM7无需执行UPDATE DB_MAGIC)

./dmrman CTLSTMT="CHECK BACKUPSET '/home/dm7/backup/BACKUP_FILE_01'"
./dmrman CTLSTMT="RESTORE DATABASE '/home/dm7/dmdbms/data/SH/dm.ini' FROM BACKUPSET '/home/dm7/backup/BACKUP_FILE_01'" 
./dmrman CTLSTMT="RECOVER DATABASE '/home/dm7/dmdbms/data/SH/dm.ini' FROM BACKUPSET '/home/dm7/backup/BACKUP_FILE_01'" 

10.目的端:起库,删除SYSDBA用户下的DMHS_DDL开头的表和触发器

[dm7@dm8p bin]$ ./DmServiceSH start
Starting DmServiceSH: [ OK ]

#删除SYSDBA用户下DMHS_DDL开头的表
select ‘drop table ’ ||owner||’.‘||table_name||’;’ from dba_tables where owner = ‘SYSDBA’ and table_name like ‘DMHS_DDL%’ and status =‘VALID’;
#删除SYSDBA用户下DMHS_DDL开头的触发器
select ‘drop trigger ‘||owner||’.’ ||trigger_name||‘;’ from dba_triggers where owner = ‘SYSDBA’ and trigger_name like ‘DMHS%’ and status = ‘Y’;

11.目的端:DMHS的bin目录下创建RECV_DIR目录,将目的端dm.ini文件拷贝到RECV_DIR,启动DMHS服务

(注意:缺少的库文件需要上传)

[dm7@dm8p bin]$ mkdir RECV_DIR
[dm7@dm8p bin]$ cp /home/dm7/dmdbms/data/SH/dm.ini RECV_DIR/
[dm7@dm8p bin]$ ./dmhs_server  dmhs.hs
MGR[INFO]: DMHS start up, current version: V4.3.06-Build(2023.02.09-123864trunc)_64_2302_sp1 (The beta)(Enterprise Edition)
MGR[WARN]: License will expire on 2023-05-09
MGR[INFO]: 成功加载配置文件,站点号:2, 管理端口:5345, 轮询间隔:3, 最大内存设置:64(GB)
MGR[INFO]: 管理 服务正在监听管理端口:5345

12.目的端:启动执行模块start exec

start exec
MGR[INFO]: 正在加载执行模块...
EXE[INFO]: CONNECT: SERVER=127.0.0.1;DRIVER=DM7 ODBC DRIVER;UID=SYSDBA;PWD=******;TCP_PORT=5237;
EXE[WARN]: 建表: DMHS_TRXID_TABLE
EXE[WARN]: 建表: DMHS_DTYPE_MAP
EXE[WARN]: 建表: DMHS_ERROR_TSK_TABLE
EXE[WARN]: 建表: DMHS_TABLE_SEQID
EXE[WARN]: 建表: DMHS_CHECKPOINT_TABLE
EXE[WARN]: 建表: DMHS_ERROR_TABLE
EXE[WARN]: 建表: DMHS_DPC_SYNC_TABLE
EXE[INFO]: EXEC_V4.3.06_64
EXE[INFO]: 执行线程 1 已经创建,事务合并:TRUE
EXE[INFO]: 执行线程 2 已经创建,事务合并:TRUE
EXE[INFO]: 执行线程 3 已经创建,事务合并:TRUE
EXE[INFO]: 执行线程 4 已经创建,事务合并:TRUE
REV[INFO]: 执行 服务数据接收端正在监听数据端口: 5346
命令执行完成

13.源端:启动DMHS服务,装载指定备份集目录

$ ./dmhs_server  dmhs.hs
MGR[INFO]: DMHS start up, current version: V4.3.06-Build(2023.02.09-123864trunc)_64_2302_sp1 (The beta)(Enterprise Edition)
MGR[WARN]: License will expire on 2023-05-09
MGR[INFO]: 成功加载配置文件,站点号:2, 管理端口:5345, 轮询间隔:3, 最大内存设置:64(GB)
MGR[INFO]: 管理 服务正在监听管理端口:5345
copy 0 backup|lsn|file|"/home/dm7/backup/BACKUP_FILE_01"

14.源端:装载字典

copy 0 "sch.name='DM'" DICT
copy mask is : |DICT|PARTITION|REP
PUB[INFO]: set enable_directio = 0
MGR[INFO]: 正在加载DM7日志分析模块...
SND[INFO]: 正在加载过滤信息: 
SND[INFO]:   ENABLE: DM.*
SND[INFO]: 正在加载列映射信息: 
SND[INFO]: 分析模块192.168.1.223:5346的日志发送线程已经被创建
SND[INFO]: 分析模块1正在连接站点192.168.1.223:5346...
SND[INFO]: 分析模块1正在重置站点192.168.1.223:5346的执行模块...
PUB[WARN]: 用户环境设置的LANG:PG_UTF8与char_code:PG_GB18030不兼容
PUB[WARN]: 使用字符集:PG_GB18030
CPT[INFO]: DDL同步方式:DMHS辅助表和触发器方式同步DDL
CPT[INFO]: 正在初始化表信息...
CPT[INFO]: 装载用户表字典的个数:5
CPT[INFO]: 正在初始化列信息...
CPT[INFO]: 正在初始化主键列信息...
CPT[INFO]: 正在初始化分区表信息...
CPT[INFO]: 正在保存字典信息...
MGR[INFO]: 正在设置目的端192.168.1.223:5345网匝模式:DISABLE
MGR[INFO]: 发送命令到站点192.168.1.223:5345成功
SND[INFO]: 分析模块1正在发送映射规则...
SND[INFO]:      DM.*==DM.*...
SND[INFO]: 分析模块1正在获取站点192.168.1.223:5346上的最小LSN...
SND[INFO]: 分析模块1成功获取LSN:0 LFS:0
SND[INFO]: 分析模块正在确认执行端已经执行完所有提交了的事务...
SND[INFO]: 192.168.1.223:5346到站点1的发送线程已经退出
命令执行完成

15.源端:启动CPT模块,开启同步

start cpt
MGR[INFO]: 正在初始化分析模块...
PUB[INFO]: set enable_directio = 0
MGR[INFO]: 正在加载DM7日志分析模块...
CPT[INFO]: DM7_V4.3.06_64
CPT[INFO]: DM7 io read buf size : 262144 (bytes)
CPT[INFO]: 发送队列长度(send_lst)为:3
CPT[INFO]: DM7是否为UNICODE库: FALSE
CPT[INFO]: DM7 parameter LENGTH_IN_CHAR: 0
CPT[INFO]: DM7 configuration parse_policy: 8, read_again_interval: 255(ms), read_delay_second: 0(s), idle_time: 300 (ms), timer_sync_interval: 0(s)
CPT[INFO]: DDL同步方式:DMHS辅助表和触发器方式同步DDL
CPT[INFO]: DM7归档目录: /home/dm7/dmdbms/data/archlog 归档文件大小:128 MB
CPT[INFO]: 获取归档文件数:1, START_ARCH_LSN: 0, START_FILE: null, VER: 1
CPT[INFO]: DM7在线日志目录: /home/dm7/dmdbms/data/BJ, 文件大小: 256 MB
CPT[INFO]: DM7 CPT is created.
MGR[INFO]: 正在设置目的端192.168.1.223:5345网匝模式:DISABLE
MGR[INFO]: 发送命令到站点192.168.1.223:5345成功
MGR[INFO]: 正在获取站点192.168.1.223:5345上的最小LSN...
MGR[INFO]: 成功获取站点192.168.1.223:5345上的最小LSN: 0...
MGR[WARN]: 起始LSN被替换为:1052816
SND[INFO]: 正在加载过滤信息: 
SND[INFO]:   ENABLE: DM.*
SND[INFO]: 正在加载列映射信息: 
SND[INFO]: 分析模块192.168.1.223:5346的日志发送线程已经被创建
SND[INFO]: 分析模块1正在连接站点192.168.1.223:5346...
CPT[INFO]: 加载离线字典表数为:13
SND[INFO]: 分析模块1正在重置站点192.168.1.223:5346的执行模块...
CPT[INFO]: DM7 CPT is ready.
MGR[INFO]: 日志分析启动成功
命令执行完成
CPT[INFO]: 起始LSN值:1052816 定位在日志文件: /home/dm7/dmdbms/data/archlog/ARCHIVE_LOCAL1_20230226183501725053_0.log
CPT[INFO]: 起始LSN值:1052823 定位在日志文件: /home/dm7/dmdbms/data/BJ/BJ01.log
CPT[INFO]: LSN: 1052823, 日志文件切换到: /home/dm7/dmdbms/data/BJ/BJ01.log
SND[INFO]: 分析模块1正在发送映射规则...
SND[INFO]:      DM.*==DM.*...
SND[INFO]: 分析模块1正在获取站点192.168.1.223:5346上的最小LSN...
SND[INFO]: 分析模块1成功获取LSN:1052816 LFS:0

16.模拟建表、删除、更新均正常。

源端:
image.png
目的端:
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服