DMHS主要有3个模块
CPT,日志分析,捕获并装载源端数据库的redo日志,会连接源端数据库。
NET,消息发送,将CPT捕获的内容发往EXEC。
EXEC,数据入库,将收到的内容进行执行,会连接目的端数据库。
另有一个模块用于管理上方这3个模块——MGR,它可以启动并加载这3个模块,类似个中控台。
达梦数据库端
开启归档和逻辑日志
编辑服务器配置文件dm.ini,修改如下:
ARCH_INI = 1 RLOG_APPEND_LOGIC = 1 |
#新建dmarch.ini配置文件
vim dmarch.ini
[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmarch #归档目录,输入自己的归档目录 ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制 |
重启数据库服务
检查归档配置是否正确
disql执行命令:
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y'; |
检查逻辑日志配置是否正确
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC'; |
检查在线日志
SELECT PATH FROM SYS.V$RLOGFILE; |
检查FAST_COMMIT参数是否为0
select para_value from v$dm_ini where para_name = 'FAST_COMMIT'; |
oracle端
二、开启归档
当同步源数据库是 Oracle 时,必须开启 Oracle 的归档日志,请按照以下顺序进行操作,相关操作命令如下所示。
1.查看当前归档模式,确认是否开启归档日志
SQL> ARCHIVE LOG LIST; |
2. 如果未开启归档日志,应首先关闭 Oracle 服务,准备开启归档日志。
SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST='/arch'; SQL> ALTER DATABASE OPEN; |
三、开启最小附加日志
当同步源数据库是 Oracle 时,还必须开启最小附加日志;并且当同步表不包含主键,还需要开启数据库级补充日志。相关操作命令如下所示。
1.开启最小附加日志。
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; |
2.查看最小附加日志是否开启。
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE; |
检查回收站需要关闭
SQL> show parameter recycle;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ buffer_pool_recycle string db_recycle_cache_size big integer 0 recyclebin string OF |
关闭回收站语句
alter system set recyclebin=off deferred; |
检查odbc配置
lrwxrwxrwx 1 oracle oinstall 57 Aug 16 08:30 libclntsh.so -> /u01/app/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1 lrwxrwxrwx 1 oracle oinstall 52 Aug 16 08:28 libclntsh.so.10.1 -> /u01/app/oracle/product/11.2.0/db_1/lib/libclntsh.so |
当同步源数据库是 Oracle 时,DMHS 使用具有以下限制:
1.启动 DMHS 的用户必须具有DBA权限,并和 Oracle 的安装用户位于同一用户组中。如果没有DBA权限,那么需要赋予如下权限(例如用户为“dmhs”):
grant select any table to dmhs; grant select any dictionary to dmhs; grant create session to dmhs; grant lock any table to dmhs; grant execute on dbms_flashback to dmhs; |
四、RAC的支持
当同步源数据库是 Oracle 时,DMHS支持 ASM 类型和裸设备的 RAC,并且需要注意以下事项。
1. DMHS必须安装Oracle RAC环境中的任意一个节点上,以便DMHS可以访问到共享磁盘上的日志文件。
2. 必须要检查RAC集群中所有节点的时钟同步情况。RAC集群中所有的节点的时钟必须同步,缺省容忍节点间有3秒的误差,如果允许容忍时间超过3秒,请修改对应的epoch参数。
3. 为了确保DMHS可以连接到ASM实例,需要在“tnsnames.ora”文件中进行配置ASM实例。配置方法示例如下:
4. DMHS开启Oracle RAC同步时,配置文件中必须开启RAC选项,配置RAC实例连接的用户名和密码。当需要动态增加或减少RAC集群连接节点时,需要修改配置文件中的节点数,并重启DMHS方能生效。
5. 对于裸设备的RAC,归档文件是在本地文件系统,需要对节点上的归档目录进行nfs配置,实现共享。
五、用户
1创建\删除用户
登录到system以创建其他用户
SQL> connect / as sysdba SQL> create user dmhs identified by "dba.com"; SQL> grant connect, resource to 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 CREATE ANY TABLE TO DMHS; GRANT LOCK ANY TABLE TO DMHS; GRANT SELECT ANY TABLE TO DMHS; GRANT CREATE ANY VIEW TO DMHS; GRANT SELECT ANY DICTIONARY TO DMHS; GRANT FLASHBACK ANY TABLE TO DMHS; |
执行DDL同步脚本
SQL> start 目录/ddl_sql_ora.sql |
配置dmhs.hs文件【目的端】
进dmhs的bin目录,创建配置文件dmhs.hs
<?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.1.135</db_server> <!-- 目标端数据库服务名或IP --> <db_user>TEST</db_user> <!-- 目标端数据库用户 --> <db_pwd>test12345678</db_pwd> <!-- 用户的密码 --> <db_port>5237</db_port> <!-- 目标端数据库端口 --> <db_name></db_name> <!-- 默认数据库名,默认为空串(只针对dm6有用)--> <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> |
【源端】
进dmhs的bin目录,创建配置文件dmhs.hs
vim dmhs.hs
<?xml version="1.0" encoding="GB2312"?> <dmhs> <base> <!-- 管理模块的基本配置 --> <lang>en</lang> <mgr_port>5345</mgr_port> <ckpt_interval>45</ckpt_interval> <siteid>1</siteid> <!-- 站点ID,这个ID配置时要注意,全局唯一,最小值0,最大值65535 --> <version>2.0</version> </base> <cpt> <!-- 捕获器模块,这项配置可以配置多个 --> <db_type>ORACLE11g</db_type> <!-- 源端数据库类型 --> <db_server>orcl</db_server> <!-- 源端数据库服务名,DM8和ORACLE为OCI连接的服务名,DM6为连接的服务器IP --> <db_user>dmhs</db_user> <!-- 源端数据库用户名 --> <db_pwd>dba.com</db_pwd> <!-- 用户的密码 --> <db_port>1521</db_port> <!-- 源端数据库端口 --> <ddl_mask>TABLE:VIEW:INDEX:OP</ddl_mask> <!--DDL配置项,写的是掩码,需同步DDL时使用,详见末尾--> <arch> <!--归档信息配置,该标签是一个功能标签,需要配置它的子项--> <clear_interval>600</clear_interval> <!--归档日志清理间隔,取值范围在60-65535,单位秒 --> <clear_flag>0</clear_flag> <!--归档日志清理选项,选配0(不操作),默认为0 --> </arch> <send> <!-- 此处仅以发送到网络为例,其他配置详见本手册 4.2NET 发送子模块 --> <ip>192.168.3.79</ip> <!-- 目标端dmhs的服务器ip --> <mgr_port>5345</mgr_port> <!-- 目标端dmhs的管理端口号 --> <data_port>5346</data_port> <!-- 目标端dmhs的data_port --> <filter> <!-- 过滤配置项,必须指定 --> <enable> <!-- 白名单,允许同步所有的表 --> <item>TEST.*</item> <!-- 要同步的模式名.表名,*代表所有 --> </enable> </filter> <map> <!--映射配置项--> <item>TEST.*==TEST.*</item> <!-- 要同步的模式名,左边是源端,右边是目标端 --> </map> </send> </cpt> </dmhs> |
目的端开启、验证dmhs
【开启dmhs】
- 先前台启动,方便查阅。进dmhs的bin目录
./dmhs_server |
(2)若报错找不到.so,可以ldd查看下libcpt_ora.so
ldd libcpt_ora.so
(3)可以看到需要的.so文件。缺少的.so文件,去stat目录查找,找到后复制到bin目录下。或切换root用户全盘找
(4)再次启动,没看到MGR[ERROR]的报错就可以了。
【验证dmhs】
新开一个会话窗口,上面server的会话窗口不要最小化,放到方便查看的地方。
(1)新会话窗口进入bin目录,执行:
./dmhs_console
(2)连接目的端dmhs
DMHS> connect 127.0.0.1:5345
execute success
(3)启动exec
DMHS> start exec
execute succes
(4)此时查看server的窗口,没有报错就ok
源端开启、验证dmhs
【开启dmhs】
也是前台启动,方式、报错处理等都跟“6、目的端开启、验证dmhs”的【开启dmhs】相同。
【验证dmhs】
新开一个会话窗口,上面server的会话窗口不要最小化,放到方便查看的地方。
因为源端这边要验证dmhs的cpt,需要目的端配合,所以要开启目的端并start exec
先开启目的端exec,再开启源端cpt,否则报错连不上目的端。
- 新会话窗口进入bin目录,执行:
./dmhs_console |
- 连接源端dmhs
DMHS> connect 127.0.0.1:5345 execute success |
(3)初始化日志起始位置;装载数据,配置同步掩码
DMHS> clear exec lsn execute success DMHS> LOAD 0 "SCH.NAME='TEST' AND TAB.NAME='T1'" DICT|CREATE|INSERT |
装载数据字典时要clear exec lsn,为了初始化日志的起始位置。
【可选项】还可以新指定日志分析的起始位置: SET EXEC LSN 0
(4)此时源端会将模式TEST下的表T1进行装载。(T1表在“1、环境准备”处就要求建了,若没建的可返回去创建或把TAB.NAME改成别的表,SCH.NAME=是表所在模式,也改下使其对应)
因为dmhs是装载的redo日志,所以如果T1的redo日志没了会装不上(虽然配了归档但谁知道会不会有人动),因此可以再建一张表并插入一点数据使其生成redo日志,同时别忘了修改TAB.NAME='新表名',和SCH.NAME='新表所在模式'
(5)查看源端server会话窗口,有没有报错,没有报错表示正常。
若报错no listener,就是没启动oracle监听,若报错无效的服务名,就是 “4.6 配置listener” 没写好,若报错连不上目的端,就是目的端防火墙没关闭。诸如此类的还有目的端没start exec等。报错.so文件没找到请看 “6、目的端开启、验证dmhs” 。
(6)查看目的端server是否报错,没有报错表示正常。
打开disql或者manager连接达梦数据库dm8,查看刚才那张表T1是否有同步过来。
(7)启动cpt,开启实时同步
DMHS> start cpt execute success |
此时可连接源端oracle数据库再新建一两张表并插入一些数据,看看目的端是否都同步完成。
执行start cpt后,若没有需要同步的redo日志就会报错,属正常现象。
必须先装载日志,即执行COPY或LOAD语句,才能执行start cpt,否则报错
社区地址:https://eco.dameng.com




