源端:两节点Oracle RAC 版本 11.2.4.0
192.168.182.129 rac01
192.168.182.130 rac02
#Private IP
192.168.85.130 rac01-priv
192.168.85.131 rac02-priv
#Vip IP
192.168.182.229 rac01-vip
192.168.182.230 rac02-vip
#Scan IP
192.168.182.110 rac-scan
目的端:单节点Oracle 版本11.2.4.0
192.168.182.131 orcl
DMHS 在运行时,需要加载本地 Oracle 动态库 libcintsh.so。在部署 DMHS 之前,需将 libclnsh.so 所在目录添加到共享库路径变量中。libclntsh.so 通常位于$ORACLE_HOME/lib 中。在 LINUX/UNIX 系统中,设置的方法如下:
当在系统中未找到 libclntsh.so 文件, 但存在 libcintsh.so.的文件,可使用命令 ln -s libcintsh.so.* libclntsh.so 创建一个软链接。
DMHS 支持源端为 Oracle RAC 的数据库,DMHS 按照时,只需部署在 RAC 的某一个节点上。当数据库为 RAC 时,需对 RAC 各个节点配置时间同步。配置时间同步可访问
根据 RAC 存储使用的不同,需进行其他额外的配置:
ASM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.129)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.130)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = +ASM)
)
)
测试oracle数据库rac集群中ASM的密码方法:
sqlplus sys/*******@asm as sysdba
源端其中一个节点安装DMHS for oracle 11g同步工具,源端的 DMHS 必须安装在源端数据库所在机器
[root@rac02 soft]# chown -R oracle:oinstall dmhs_V4.3.38_oracle_rev192522_rh6_64_20250630_sp11.bin
[root@rac02 soft]# chmod +x dmhs_V4.3.38_oracle_rev192522_rh6_64_20250630_sp11.bin
[oracle@rac02:/dmdata]$ /soft/dmhs_V4.3.38_oracle_rev192522_rh6_64_20250630_sp11.bin -i
Extract install files.........
1.English(English)
2.Simplified Chinese(简体中文)
Select the language to install[2.Simplified Chinese(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:2
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:484 MB
安装目录: [/home/oracle/dmhs]1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:2正在安装
default start ...
default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
hsca start ... hsca finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在创建快捷方式
安装成功
实时同步服务(DMHS)配置
1.英文(English)
2.简体中文(简体中文)
Dmhs语言[2.简体中文(简体中文)]:请输入mgr端口号 (1000-65535)[5345]:
请输入信息收集间隔 时间(1-60)秒[3]:
请输入检查点间隔时间(10-65536)秒[60]:
请输入站点id(0-65536):1
远程部署工具配置
远程部署工具名称[HsAgent]:
主机Ip(外网)[192.168.122.1](192.168.122.1,169.254.234.238,192.168.85.131,192.168.182.230,192.168.182.130):192.168.182.130
远程部署工具管理端口[5456](1000-65535):
内置数据库轮询间隔[3](1-60):
内置数据库IP[]:192.168.182.130
内置数据库端口[15236](1000-65535):
内置数据库用户名[SYSDBA]:
内置数据库密码[SYSDBA]:
1.命令行方式
2.系统服务方式
3.脚本服务方式
Dmhs启动方式[2.系统服务方式]:3
服务脚本环境变量设置
依赖库路径
提示:此配置项供用户配置源或目的数据库依赖库路径和odbc依赖库路径, 多个路径以":"隔开(例:/opt/dmdbms/bin:/usr/local/lib),此配置项会添加到服务脚本的NEED_LIB_PATH的变量值中。
请配置依赖库路径:
Oracle字符集
提示:注意此处配置为ORACLE数据库的NLS_LANG,此配置项由源端数据库字符集编码格式决定,需与源端字符集编码适配。
1.SIMPLIFIED CHINESE_CHINA.ZHS32GB18030
2.SIMPLIFIED CHINESE_CHINA.AL32UTF8
3.TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5
4.TRADITIONAL CHINESE_TAIWAN.AL32UTF8
5.AMERICAN_AMERICA.AL32UTF8
6.AMERICAN_AMERICA.WE8ISO8859P1
7.AMERICAN_AMERICA.WE8ISO8859P15
8.AMERICAN_AMERICA.ZHS16GBK
9.不设置
请配置Oracle字符集[9.不设置]:8
ORACLE_BASE
请输入:ORACLE_BASE[/u01/app/oracle]:
ORACLE_HOME
请输入:ORACLE_HOME[/u01/app/oracle/product/11.2.0/db]:
远程控制服务
1.自动
2.手动
启动方式:[2.手动]2
正在创建远程控制服务
达梦数据实时同步服务
1.自动
2.手动
启动方式:[2.手动]2
正在创建达梦数据实时同步服务
状态监控服务
启动方式:[2.手动]
正在创建状态监控服务
达梦数据实时同步V4.0安装完成
更多安装信息,请查看安装日志文件:
/home/oracle/dmhs/log/install.log
注意:
DMHS安装完成之后,需要检查节点的所有安装模块情况,目录切换到 DMHS软件目录,通过命令 ldd libcpt_ora.so(RAC可通过命令 ldd libcpt_rac.so),查看 DMHS日志CPT模块链接是否正常,通过命令ldd libdmhs_exec.so,查看DMHS日志执行模块链接是否正常。
所有节点检查如下:
DMHS Oracle 目的端可安装在 Oracle 目的数据库网内的任何服务器中,只需要DMHS Oracle 部署服务器可远程连接 Oracle 目的数据库即可。DMHS Oracle 目的端是通过 ODBC 将源端数据库的操作同步到目的数据库,所以部署 DMHS Oracle 目的端的服务器,需要安装 ODBC 驱动及 Oracle 动态链接库,设置 oracle 本地链接库参照 DMHS Oracle 源端安装。在 windows 平台中,ODBC 驱动在安装完 Oracle 软件之后,会默认安装,在 UNIX/LINUX 平台中,需认为安装 UNIXODBC。
推荐安装 unixodbc2.3.2 版本的 odbc,下面介绍如何使用源码安装 unixidbc。
https://www.linuxfromscratch.org/blfs/view/7.8/general/unixodbc.html
Download (HTTP): http://www.unixodbc.org/unixODBC-2.3.2.tar.gz
Download (FTP): ftp://mirror.ovh.net/gentoo-distfiles/distfiles/unixODBC-2.3.2.tar.gz
tar -zxvf unixODBC-2.3.12.tar.gz
cd unixodbc-2.3.12
export CC=gcc
./configure --enable-drivers=no --with-iconv-char-enc=GB18030 --enable-gui=no --enable-iconv=yes
make
make install
当服务器系统为 UNIX/LINUX 64bits 时,在./configure 之前需执行
export CFLAGS="-maix64 -DBUILD_REAL_64_BIT_MODE"
export OBJECT_MODE=64
4) 配置 UNIXODBC
将操作系统当前目录切换到“/usr/local/etc”目录,修改 odbc.ini 和 odbcinst.ini 参数。
odbc.ini 参数内容如下所示:
[ORACLE]
Description = ORACLE ODBC DSN
Driver = Oracle in OraDb11g_home1
SERVER = 192.168.182.131
UserID = dmhs
Password = dmhs
Servername = ORCL
PORT = 1521
odbcinst.ini参数内容如下所示:
[Oracle in OraDb11g_home1]
Description = ODBC DRIVER FOR ORACLE
Driver = /u01/app/oracle/product/11.2.0/db/lib/libsqora.so.11.1
Threading = 0
验证:配置完成之后,可使用isql命令测试配置是否正确。
例如:isql -v ORACLE dmhs dmhs
[oracle@orcl:/home/oracle]$ isql -v ORACLE dmhs dmhs
报错:
[01000][unixODBC][Driver Manager]Can’t open lib ‘/u01/app/oracle/product/11.2.0/db/lib/libsqora.so.11.1’ : file not found
[ISQL]ERROR: Could not SQLConnect
解决:
[oracle@orcl:/home/oracle/dmhs/bin]$ ldd /u01/app/oracle/product/11.2.0/db/lib/libsqora.so.11.1
[oracle@orcl:/home/oracle/dmhs/bin]$ cp /usr/lib64/libodbcinst.so /home/oracle/dmhs/bin/libodbcinst.so.1
[oracle@orcl:/home/oracle/dmhs/bin]$ chown oracle:oinstall /home/oracle/dmhs/bin/libodbcinst.so.1
安装步骤同2.1.3
DMHS 在运行前,需对数据库参数/状态进行调整。以下有些操作只需在源端操作,有些操作只需在目的端操作。
本章节操作需在数据库管理员配合下操作,或直接由数据库管理员操作。
DMHS 装载历史数据时,需要通过数据库网络服务名来抽取数据库的数据。配置Oracle/RAC 数据库的网络服务名可通过 Oracle NCA 工 具 进 行 配 置 , 也 可 直 接 修 改$ORACLE_HOME\network\admin\tnsname.ora 文件。下例为直接修改 tnsname.ora 来配置数据库服务监听:
源端:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
ASM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.129)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.130)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = +ASM)
)
)
目的端:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.131)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
验证:
配置完成之后,可使用oracle客户端工具sqlplus测试配置是否正确。
例如: sqlplus dmhs/dmhs@ORCL
如果配置正确,则可成功登陆数据库
DMHS 通过分析 Oracle 数据库的归档/在线日志来捕获数据库的增量数据,DMHS 运行之前,必须将数据库设置为归档模式,同时开启最小附加日志及全列日志。修改数据库为归档模式需重启数据库服务,在操作只需,需确认工作环境能停机维护。具体操作过程如下:
##关闭数据库实例
srvctl stop database -d orcl
##开启单个节点到mount模式
srvctl start instance -d orcl -i orcl1 -o mount
##设置归档路径
alter system set log_archive_format =‘arch%t_%s_%r’ scope=spfile;
alter system set log_archive_dest_1=‘location=+DATA’;
##开启归档
alter database archivelog;
##重启数据库实例
srvctl stop instance -d orcl -i orcl1
srvctl start database -d orcl
##检查归档
archive log list
当数据库数据包含中文字符时,需将DMHS运作所在窗口的NLS_LANG设置为对应的字符集,建议AMERICAN_AMERICA.ZHS16GBK。
LINUX平台设置客户端字符集:
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
DMHS 支持源端 DDL 的同步。源端 DDL 同步必须满足以下三个条件:
SQL> @/dmdata/scripts/ddl_sql_ora.sql
Table created.
Trigger created.
DMHS 源端数据库用户,必须具有以下数据库操作权限:
grant SELECT ON SYS.V_$DATABASE to dmhs;
grant SELECT ON SYS.V_$SESSION to dmhs;
grant SELECT ON SYS.GV_$PARAMETER to dmhs;
grant SELECT ON SYS.GV_$INSTANCE to dmhs;
grant SELECT ON SYS.GV_$ARCHIVE_DEST to dmhs;
grant SELECT ON SYS.GV_$ARCHIVE to dmhs;
grant SELECT ON SYS.GV_$LOG to dmhs;
grant SELECT ON SYS.GV_$LOGFILE to dmhs;
grant SELECT ON SYS.DBA_TABLES to dmhs;
grant SELECT ON SYS.V_$INSTANCE to dmhs;
grant SELECT ON SYS.OBJ$ to dmhs;
grant SELECT ON SYS.USER$ to dmhs;
grant SELECT ON SYS.COL$ to dmhs;
grant SELECT ON SYS.DBA_CONS_COLUMNS to dmhs;
grant SELECT ON SYS.DBA_CONSTRAINTS to dmhs;
grant SELECT ON SYS.LOB$ to dmhs;
grant SELECT ON SYS.TABPART$ to dmhs;
grant SELECT ON SYS.TAB$ to dmhs;
grant SELECT ON SYS.TABSUBPART$ to dmhs;
grant SELECT ON SYS.TABCOMPART$ to dmhs;
grant EXECUTE ON DBMS_FLASHBACK to dmhs;
grant LOCK ANY TABLE to dmhs;
grant SELECT ANY TABLE to dmhs;
GRANT SELECT_CATALOG_ROLE TO dmhs;
GRANT SELECT ON V_$PARAMETER TO dmhs;
GRANT SELECT ANY DICTIONARY TO dmhs;
GRANT SELECT ON SYS.OBJ$ TO dmhs;
GRANT SELECT ANY TABLE TO dmhs;
GRANT INSERT ANY TABLE TO dmhs;
GRANT UPDATE ANY TABLE TO dmhs;
GRANT DELETE ANY TABLE TO dmhs;
GRANT DBA TO dmhs;
DMHS 执行端数据库用户必须具有同步对象的操作权限及操作用户下建表的权限。
配置ORACLE RAC源端,可使用DMHS配置助手进行配置,或手动配置DMHS配置文件dmhs.hs。手动配置dmhs.hs时需注意,dmhs.hs文件内容必须严格遵循xml格式规范。以下介绍如何手动配置dmhs.hs。
创建DMHS配置文件dmhs.hs。将文件路径切换到dmhs/bin工作目录下,创建文件dmhs.hs。注意DMHS运行用户必须具有dmhs.hs文件的读取权限。
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>en</lang><!-- 语言选项,ch为中文,en为英文 -->
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->
<ckpt_interval>45</ckpt_interval><!-- 执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
<siteid>1</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
<group>1</group>
<version>2.0</version>
</base>
<cpt><!-- 这项配置可以配置多个,也就是可以配置多个捕获模块,如果该节点只作为执行端,该节点需要删除 -->
<db_type>oracle11g</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7 -->
<db_server>ORCL</db_server><!-- 数据库服务名或IP,默认为127.0.0.1 -->
<db_user>dmhs</db_user><!-- 数据库用户名,默认为SYSDBA -->
<db_pwd>dmhs</db_pwd><!-- 数据库口令,默认为SYSDBA -->
<db_port>1521</db_port><!-- 数据库端口号,默认为5236 -->
<idle_time>300</idle_time><!-- 分析线程空闲睡眠时间,默认值为300ms,最小值0ms,最大值65536ms -->
<ddl_mask>op:obj</ddl_mask><!-- 分析端DDL同步支持的对象和操作,可选项参见手册4.2.1 CPT,需要将安装脚本中对应的DDL脚本在源端执行 -->
<parse_thr>1</parse_thr><!-- 分析线程个数,默认为1,最小值1,最大值32,多线程分析时,不支持ALTER TABLE操作同步 -->
<rac><!-- ORACLE的RAC配置选项,这项可选,如果配置了这项,那就以RAC模式工作 -->
<rac_type>1</rac_type>
<db_server>ASM</db_server><!-- 数据库服务名,默认为空串(只针对Oracle10g,Oracle11g有用) -->
<db_user>sys</db_user><!-- 数据库asm的登录名,默认为SYSDBA -->
<db_pwd>oracle</db_pwd><!-- 数据库口令,默认为SYSDBA -->
<nodes>2</nodes><!-- RAC节点数 -->
</rac>
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>0</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录-->
</arch>
<send><!-- 发送模块配置 -->
<ip>192.168.182.131</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<level>0</level><!-- 复制级别,默认为0,最小值0,最大值65535 -->
<trigger>0</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
<constraint>0</constraint><!-- 是否忽略约束,默认为0,限定值0,1 -->
<identity>0</identity><!-- 是否忽略自增列,默认为0,限定值0(不忽略,插入同步过来的值),1(忽略,插入自增列自身的值) -->
<net_turns>0</net_turns><!-- 是否开启网闸模式,默认为0,限定值0(关闭),1(开启),网匝模式下,主机看不到备机的统计信息 -->
<filter><!-- 过滤,必须指定,一定要注意大小写,要跟源库中的对像名大小写保持一致 -->
<enable><!-- 白名单,所有允许同步的表 -->
<item>TEST.*</item><!--样例 <item>SYSDBA.*</item> 主机SYSDBA模式下的表才允许同步 -->
</enable>
<disable><!-- 黑名单,不允许被同步的表,该项可选,执行流程是:当通过了白名单的验证以后,再来定位黑名单单-->
<item></item><!-- 过滤项 <item>SYSDBA.TEST</item> 主机SYSDBA模式下的TEST表不允许同步 -->
</disable>
</filter>
<map><!-- 表名映射,可选, 一定要注意大小写,要跟源库和目的库中的对像名大小写保持一致 -->
<item>TEST.* == TEST.*</item><!--样例 <item>SYSDBA.* == TEST.*</item> 把主机SYSDBA模式下的表同步到备机TEST模式下 -->
</map>
</send>
</cpt>
</dmhs>
配置文件说明:
<enable>1</enable>
<db_type>ORACLE11G</db_type>
<db_server>ORCL</db_server> --配置的是数据库的监听名
<db_user>dmhs</db_user> --创建的dmhs复制用户,非业务用户
<db_pwd>dmhs</db_pwd>
<db_port>1521</db_port>
<idle_time>300</idle_time>
<ddl_mask>OBJ:OP</ddl_mask>
Rac配置块说明:
当源端数据库使用了 ASM 时,还需要在 cpt 元素中添加 ASM 相关信息
<rac>
<rac_type>1</rac_type>
<db_server>asm</db_server> --监听文件里ASM的监听名
<db_user>sys</db_user> --必须是sys用户,请使用plsql SYS/****@asm验证是否能登录
<db_pwd>oracle</db_pwd>
<nodes>2</nodes>
</rac>
当源端 RAC 节点的归档未开启在共享存储上,而是开启在本地磁盘,则需要配置 NFS(网络文件系统)映射,将其他节点的归档日志所在目录映射到 DMHS 所在服务器,以便 DMHS 能够访问到各个 RAC 节点的归档日志,需在 cpt 中添加文件映射:
<rac>
<rac_type>1</rac_type>
<db_server>orcl</db_server>
<db_user>sys</db_user>
<db_pwd>oracle</db_pwd>
<nodes>2</nodes>
<dir_replace>
<item>2#/home/oracle/arch2</item>
<item>1#/home/oracle/arch1</item>
</dir_replace>
</rac>
其中 dir_replace 中设置的是 DMHS 可读取的归档目录,除了 DMHS 所在节点的归档目录为真实目录外,其他的目录为 RAC 其他节点归档目录映射到 DMHS 机器的目录。
发送模块说明
<send>
<ip>xxx.xxx.xxx.xxx</ip> --目地端的ip地址
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>en</lang><!-- 语言选项,ch为中文,en为英文 -->
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为3s,最小值1s,最大值60s -->
<ckpt_interval>45</ckpt_interval><!-- 执行端检查点间隔,默认60s,最小值10s,最大值65536s -->
<siteid>2</siteid><!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 -->
<group>1</group>
<version>2.0</version>
</base>
<exec><!-- 执行模块的基本配置 -->
<recv><!-- 接收模块的基本配置,如果该节点只作为分析端,该节点需要删除 -->
<mgr_port>5345</mgr_port><!-- 管理端口号,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 数据接收端口号,默认为5346,最小值1000,最大值65535 -->
</recv>
<db_type>oracle11g</db_type><!-- 数据库类型,默认为dm7,限定值Oracle10g,Oracle11g,dm6,dm7 -->
<db_server>192.168/182.131</db_server><!-- 数据库服务名或IP -->
<db_user>dmhs</db_user><!-- 数据库用户名,默认为SYSDBA -->
<db_pwd>dmhs</db_pwd><!-- 数据库口令,默认为SYSDBA -->
<driver>{Oracle in OraDb11g_home1}</driver><!--驱动 -->
<db_port>1521</db_port><!-- 数据库端口号,默认为5236 -->
<exec_mode>1</exec_mode><!-- 执行模式, 1(多线程执行),2(ETL模式),3(消息中转模式,跨网段级联时使用) -->
<exec_policy>0</exec_policy>
<exec_thr>1</exec_thr><!-- 执行线程个数,只有当exec_mode为1时才会生效!默认为1,最小值1,最大值64 -->
<exec_sql>512</exec_sql><!-- SQL缓存大小,默认为512M,最小值32M,最大值4096M -->
<exec_trx> 5000 </exec_trx><!-- 事务缓存个数,默认为5000,最小值,1000,最大值10000 -->
<exec_rows>250</exec_rows><!-- 批量绑定行数,默认为250,最小值1,最大值2000 -->
<msg_col_size>8000</msg_col_size><!-- 保存缓存消息列的大小, 默认为8000,最小值1000,最大值8000 -->
<level>0</level><!-- 复制级别,默认为0,最小值0,最大值65535 -->
</exec>
</dmhs>
配置说明:
<db_type>oracle11g</db_type> --目的端数据库版本
<db_server>xxx.xxx.xxx.xxx</db_server> --目的端ip地址
<db_user>tjrh</db_user> --目的端用户名
<db_pwd>**********</db_pwd>
<db_port>1521</db_port> --目的端端口
目的端运行dmhs_server,并执行Start exec
./dmhs_server dmhs.hs
start exec
源端运行dmhs_server,执行clear exec lsn。
./dmhs_server dmhs.hs
clear exec lsn
注意:源端请使用oracle用户运行dmhs,源端装载字典信息及历史数据。数据装载掩码具体请看用户手册。
copy 0 "sch.name='TEST'" CREATE|INSERT|DIC
等待执行完成
源端DMHS,执行start。
start cpt
如果5.1.1的步骤已经执行,只需要启动后台服务即可。
将bin目录下的service_template/DmhsService拷贝到bin目录
cp /home/oracle/dmhs/bin/service_template/DmhsService /home/oracle/dmhs/bin
修改DmhsService的脚本,如下
vim /home/oracle/dmhs/bin/DmhsService
DMHS_HOME=/home/oracle/dmhs
PROG_DIR=/home/oracle/dmhs/bin
CONF_PATH=/home/oracle/dmhs/bin/dmhs.hs
NEED_LIB_PATH=/home/oracle/dmhs/bin:/u01/app/oracle/product/11.2.0/db/bin
启动dmhs服务
cd /home/oracle/dmhs/bin
./DmhsService start
执行端运行DMHS软件工具dmhs_console,连接执行端DMHS服务,控制台管理工具中执行如下DMHS命令:
./dmhs_console
connect ip:mgr_port
目的端启动日志执行模块,控制台管理工具中执行如下DMHS命令:
start exec
源端运行DMHS软件工具dmhs_console,连接源端DMHS服务,设置日志捕获模块起始LSN。
./dmhs_server dmhs.hs
clear exec lsn
装载源端字典信息及历史数据。数据装载掩码具体请看用户手册。
copy 0 "sch.name='TEST'" CREATE|INSERT|DIC
等待执行完成
源端DMHS,执行start。
start cpt
源端
[oracle@rac01:/home/oracle/dmhs/bin]$ ./dmhs_server
[oracle@rac01:/home/oracle/dmhs/bin]$ ./dmhs_console
目的端
[oracle@orcl:/home/oracle/dmhs/bin]$ ./dmhs_server
[oracle@orcl:/home/oracle/dmhs/bin]$ ./dmhs_console
DMHS> start exec
源端两节点中任意节点的控制台管理工具中执行如下DMHS命令:
clear exec lsn 0
copy 0 "sch.name='TEST'" CREATE|INSERT|INDEX|DICT|REG|LSN
注:dmhs中要求源端与目标端同步数据之前保持数据一致,如果源端已有数据输入以下命令,此命令为拉平目标端与源端数据,保持数据一致,仅执行一次即可,多次执行会造成目的端数据混乱。
源端两节点的控制台管理工具中执行如下DMHS命令:
start cpt
源端添加索引
SQL> create index test.idx_name on test.book(name);
Index created.
目的端查询
SQL> select index_name,index_type from dba_indexes where table_name='BOOK' and owner='TEST';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
PK_ID NORMAL
IDX_NAME NORMAL
源端新增表
SQL> create table TEST.BOOK3 as select * from test.book where 1=2;
Table created.
目的端
TABLE_NAME
------------------------------
BOOK3
BOOK
BOOK2
源端插入数据
SQL> insert into TEST.BOOK3 select * from test.book;
6 rows created.
SQL> commit;
Commit complete.
目的端
SQL> select count(*) from test.book3;
COUNT(*)
----------
6
源端
[oracle@rac01:/home/oracle/dmhs/bin]$ ./dmhs_server
[oracle@rac01:/home/oracle/dmhs/bin]$ ./dmhs_console
目的端
[oracle@orcl:/home/oracle/dmhs/bin]$ ./dmhs_server
[oracle@orcl:/home/oracle/dmhs/bin]$ ./dmhs_console
DMHS> start exec
源端查询数据库当前SCN号:
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1642515
SQL> col DIRECTORY_PATH for a50
SQL> select * from dba_directories;
SQL>create directory DATA_PUMP as '/u01/app/oracle/admin/ORCL/dpdump';
[oracle@rac01:/u01/app/oracle/admin/ORCL/dpdump]$ expdp test/test DIRECTORY=DATA_PUMP DUMPFILE=test.dmp LOGFILE=test.log FLASHBACK_SCN=1642515
目的端导入数据
在导入前,如果系统有job,先把目标库的:job_queue_processes设置成0
SQL>alter system set job_queue_processes=0 scope=spfile;
[oracle@orcl:/u01/app/oracle/admin/orcl/dpdump]$ impdp test/test DIRECTORY=DATA_PUMP DUMPFILE=test.dmp LOGFILE=test.log cluster=no transform=segment_attributes:n table_exists_action=replace
源端指定SCN配置文件启动,dmhs.conf 文件添加如下:
cpt_start_lsn=(1642515)
源端启动cpt进程
copy 0 "sch.name='TEST'" DICT|REG|LSN
start cpt
源端
[oracle@rac01:/home/oracle/dmhs/bin]$ ./dmhs_server
[oracle@rac01:/home/oracle/dmhs/bin]$ ./dmhs_console
目的端
[oracle@orcl:/home/oracle/dmhs/bin]$ ./dmhs_server
[oracle@orcl:/home/oracle/dmhs/bin]$ ./dmhs_console
DMHS> start exec
源端查询当前scn
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1652799
源端全备
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup as compressed backupset format '/dbbak/test/full_%d_%U_%T_%p.bak' database plus archivelog;
backup current controlfile format '/dbbak/test/controlfile_%T_%U_%t.ctl';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
备份后将备份拷贝到目的端,目的端恢复数据
RMAN> restore controlfile from '/dbbak/controlfile_20250717_1g3uqpfb_1_1_1206740459.ctl';
RMAN> alter database mount;
RMAN> catalog start with '/dbbak/' NOPROMPT;
RMAN> RUN {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
set newname for datafile '+DATA/orcl/datafile/system.256.1206658801' to '/u01/app/oracle/oradata/orcl/system.256.1206658801';
set newname for datafile '+DATA/orcl/datafile/sysaux.257.1206658801' to '/u01/app/oracle/oradata/orcl/sysaux.257.1206658801';
set newname for datafile '+DATA/orcl/datafile/undotbs1.258.1206658803' to '/u01/app/oracle/oradata/orcl/undotbs1.258.1206658803';
set newname for datafile '+DATA/orcl/datafile/users.259.1206658803' to '/u01/app/oracle/oradata/orcl/users.259.1206658803';
set newname for datafile '+DATA/orcl/datafile/undotbs2.264.1206659179' to '/u01/app/oracle/oradata/orcl/undotbs2.264.1206659179';
set newname for tempfile '+DATA/orcl/tempfile/temp.263.1206658981' to '/u01/app/oracle/oradata/orcl/temp.263.1206658981';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
switch tempfile all;
recover database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
RMAN> alter database open resetlogs;
源端指定SCN配置文件启动,在dmhs.conf文件中增加cpt_start_lsn
cpt_start_lsn=(1652799)
目的端指定SCN配置文件启动,在dmhs.conf文件中增加commit_lsn_源端站点号=(END_LSN)。
commit_lsn_1=(1652799)
源端启动cpt进程
copy 0 "sch.name='TEST'" DICT|REG|LSN
start cpt
[oracle@orcl:/home/oracle]$ isql -v ORACLE dmhs dmhs
报错:
[01000][unixODBC][Driver Manager]Can’t open lib ‘/u01/app/oracle/product/11.2.0/db/lib/libsqora.so.11.1’ : file not found
[ISQL]ERROR: Could not SQLConnect
解决:
[oracle@orcl:/home/oracle/dmhs/bin]$ ldd /u01/app/oracle/product/11.2.0/db/lib/libsqora.so.11.1
[oracle@orcl:/home/oracle/dmhs/bin]$ cp /usr/lib64/libodbcinst.so /home/oracle/dmhs/bin/libodbcinst.so.1
[oracle@orcl:/home/oracle/dmhs/bin]$ chown oracle:oinstall /home/oracle/dmhs/bin/libodbcinst.so.1
image.png
2025-07-19 10:52:23 MGR[INFO]: loading the execute module...
2025-07-19 10:52:23 EXE[INFO]: CONNECT: SERVER=192.168/182.131;DRIVER={Oracle in OraDb11g_home1};UID=dmhs;PWD=******;
2025-07-19 10:52:24 EXE[WARN]: SITEID:65534 SEQID:0 TRXID:0 LAST ROWID:NULL SQL_ERROR = SQL:select value from v$parameter where upper(name)='RECYCLEBIN'
2025-07-19 10:52:24 EXE[WARN]: SITEID:65534 SEQID:0 TRXID:0 STATE:42S02 CODE: 942 ROWID:NULL ERR:[Oracle][ODBC][Ora]ORA-00942: table or view does not exis SQL:select value from v$parameter where upper(name)='RECYCLEBIN'
检查并授予权限
如果用户没有权限访问 v$parameter,可以授予 SELECT_CATALOG_ROLE 或直接授权:
GRANT SELECT_CATALOG_ROLE TO dmhs;
GRANT SELECT ON V_$PARAMETER TO dmhs;
2025-07-19 11:07:12 LD[ERROR]: OCI select execute failed, SQL:select a.dataobj#, b.tabfragobj#, a.name from sys.obj$ a left join sys.lobfrag$ b on(a.obj#=b.fragobj#) where (a.type#=40 or a.type#=41)
2025-07-19 11:07:12 LD[ERROR]: DB:ORA-00942: table or view does not exist
(code=942)
2025-07-19 11:07:12 CPT[INFO]: save dict(0:0) ...
2025-07-19 11:07:14 LD[INFO]: load oracle instance name :ORCL1
2025-07-19 11:07:14 LD[ERROR]: OCI select execute failed, SQL:SELECT SCH.name as sch_name, TAB.name tab_name, TAB.obj# obj_id, NT.OBJ# POBJD, decode(bitand(TAB.flags, 2), 0, 0, decode(bitand(t.property, 8388608), 8388608,1, 2)), T.property, s.extents, tab.dataobj# from SYS.OBJ$ TAB,sys.tab$ t, SYS.USER$ SCH, SYS.NTAB$ NT,sys.seg$ s WHERE TAB.OWNER# = SCH.USER# AND TAB.TYPE# = 2 and t.obj#=tab.obj# AND t.file#=s.file#(+) and t.block#=s.block#(+) and t.ts#=s.ts#(+) AND TAB.OBJ#=NT.NTAB#(+) and tab.obj# not in(select obj# from sys.external_tab$) and tab.name not like 'DMHS_%' and tab.name not like 'BIN$%' AND (sch.name='EMS') order by s.extents desc
2025-07-19 11:07:14 LD[ERROR]: DB:ORA-00942: table or view does not exist
(code=942)
2025-07-19 11:07:14 LD[ERROR]: unable to get sync table information in initial loader module
2025-07-19 11:07:15 SND[INFO]: Analysis module are checking the execute module complete all transactions...
2025-07-19 11:07:15 SND[INFO]: 192.168.182.131:5346 to site 1 's sending thread has quited
授予权限
GRANT SELECT ANY DICTIONARY TO dmhs;
GRANT SELECT ON SYS.OBJ$ TO dmhs;
2025-07-19 11:15:52 EXE[ERROR]: SITEID:1 SEQID:0 TRXID:7 STATE:HY000 CODE: 1031 ROWID:AAAVVqAAEAAAAC7AAC ERR:[Oracle][ODBC][Ora]ORA-01031: insufficient privileges
2025-07-19 11:15:52 PUB[ERROR]: insufficient privileges or no privileges
授权
GRANT SELECT ANY TABLE TO dmhs;
GRANT INSERT ANY TABLE TO dmhs;
GRANT UPDATE ANY TABLE TO dmhs;
GRANT DELETE ANY TABLE TO dmhs;
2025-07-19 12:05:06 CPT[ERROR]: OCI login database failed,server=ASM; user=sys; password=******
2025-07-19 12:05:07 CPT[ERROR]: DB:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
(code=12514)
2025-07-19 12:05:07 CPT[ERROR]: OCI login database failed,server=ASM; user=sys; password=******
2025-07-19 12:05:07 CPT[WARN]: RAC reset
2025-07-19 12:05:08 CPT[WARN]: RAC reset
添加ADDRESS_LIST
ASM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.129)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.182.130)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = +ASM)
)
)
2025-07-20 02:23:40 EXE[WARN]: SITEID:1 SEQID:0 TRXID:0 LAST ROWID:NULL SQL_ERROR = SQL:select SEQID,LFS from DMHS_CHECKPOINT_TABLE where SITEID=1;
2025-07-20 02:23:40 EXE[WARN]: SITEID:1 SEQID:0 TRXID:0 STATE:42S02 CODE: 942 ROWID:NULL ERR:[Oracle][ODBC][Ora]ORA-00942: table or view does not exist SQL:select SEQID,LFS from DMHS_CHECKPOINT_TABLE where SITEID=1;
未装载数据字典
copy 0 "sch.name='TEST'" DICT
原因:做copy动作的时候,需要stop cpt和start exec。在目的端start exec以后,装载动作就不会卡住了,并且装载后会把数据自动同步到目的端,如果多次执行copy动作,就会重复装载。
dmhs启动乱码如下图所示
修改dmhs.hs的配置文件,将<bash>的<lang>配置ch修改为en
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
在<exec>模块配置<check_index>0</check_index>
使用print 1 seqid trxid “err.sql”,获取到报错sql,报错语句全是如下格式:Insert into test(send_date) values(‘2015-11-23 10:28:42’)。达梦是支持这种形式的时间类型插入的。解决办法如下:
将dm.ini的DATETIME_FMT_MODE设置为0
EXE[ERROR]: SITEID:0 SEQID:0 TRXID:0 STATE:IM002 CODE: 0 ERR:[unixODBC][Driver Manager]Data source name not found, and no default driver specified
EXE[ERROR]: unable to connect database
dmhs.hs添加
<driver>{Oracle in OraDb11g_home1}</driver>
EXE[ERROR]: SITEID:0 SEQID:0 TRXID:0 STATE:01000 CODE: 0 ERR:[unixODBC][Driver Manager]Can’t open lib ‘Oracle in OraDb11g_home1’ : file not found
EXE[ERROR]: unable to connect database!
yum remove unixODBC*
重新安装unixODBC-2.3.12.tar.gz版本
文章
阅读量
获赞