CPT模块是源DMDRS服务的核心组成模块,主要实现源数据库的全量数据装载以及增量数据实时捕获、解析和投递。
介绍CPT模块相关的操作命令。
适用场景
数据同步、数据分发
命令功能
在同步中,动态添加和更新增量同步表。添加增量同步表后,源DMDRS会自动进行增量数据的同步;更新增量同步表后,源DMDRS以数据库中该表的最新表结构作为字典自动进行增量数据的同步。
注意
- 添加增量同步表后,源DMDRS不会自动进行表的全量数据的装载。采用此方式开启增量数据同步后不建议再进行全量数据装载,否则可能导致装载重复数据。
- 由于更新操作的条件可能会影响其他表,进行该操作时需要进行确认操作。
- 添加带嵌套表类型的增量同步表时,需要分别添加该表和该表的嵌套子表为增量同步表。
该命令的使用场景如下:
当源DMDRS服务中表存在,对应离线字典文件也存在时,不支持add命令,支持update命令。
当源DMDRS服务中表存在,对应离线字典文件不存在时,例如手动删除字典文件后,支持add命令,支持update命令。
当源DMDRS服务中表不存在,对应离线字典文件存在时,例如同步drop操作后,支持add命令,支持update命令。
当源DMDRS服务中表不存在,对应离线字典文件也不存在时,支持add命令,支持update命令。
| 表是否存在 | 离线字典文件是否存在 | 是否支持add命令 | 是否支持update命令 |
|---|---|---|---|
| 存在 | 存在 | 不支持 | 支持 |
| 存在 | 不存在 | 支持 | 支持 |
| 不存在 | 存在 | 支持 | 支持 |
| 不存在 | 不存在 | 支持 | 支持 |
命令格式
ALTER [<CPT_NAME>] ADD|UPDATE DICT "<FILTER>" [<LOAD_MASK>]
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| ADD|UPDATE | ADD:添加源DMDRS增量同步表。 UPDATE:更新源DMDRS增量同步表。 |
| "<FILTER>" | FILTER:从数据库中筛选待增量同步表的条件,过滤条件采用SQL表达式,需要满足SQL表达式的语法规则。过滤条件中SCH.NAME为模式名,TAB.NAME为表名。格式举例如下: "SCH.NAME='<SCHNAME>' AND TAB.NAME='<TABNAME>'" :SCHNAME模式下的表TABNAME。 "SCH.NAME='<SCHNAME_PERSON>' or SCH.NAME='<SCHNAME_RESOURCES>'":SCHNAME_PERSON和SCHNAME_RESOURCES模式下所有的表。 |
| LOAD_MASK | 增量同步表掩码,包括LSN和PDB。具体说明请参见增量同步表掩码说明表。 |
| 掩码 | 说明 |
|---|---|
| LSN | 该掩码表示在离线字典文件中需要记录当前这一刻源数据库的LSN值,如果字典中存在起始LSN,那么在同步时该表小于该LSN的日志都不会被分析投递。该功能用来实现某个表只需要从当前这一刻开始同步的需求。
搭建同步时,如果源库是静态的,目标库在使用备份还原初始化或是其它方式初始化以后,源表对象的数据同步只需要从当前这一刻开始,可以在装载字典时指定LSN掩码。或者在现有同步的环境下,需要增加某个表的同步,并且只要求同步从当前这一刻起始的数据,那么装载该表字典时应该指定该掩码,否则该表同步会从日志分析的起始位置开始。 示例: 表RESOURCES.DEPARTMENT同步从当前数据库的日志LSN开始,该表前面的操作都丢弃。 alter cpt_dm8 add dict "sch.name='RESOURCES' and tab.name='DEPARTMENT'" LSN |
| PDB | 该掩码用于容器数据库,需要紧跟容器名。如果是容器数据库,必须使用PDB掩码。 示例: 添加容器名为COMPANY的容器数据库中增量同步表RESOURCES.DEPARTMENT。 alter cpt_dm8 add dict "sch.name='RESOURCES' and tab.name='DEPARTMENT'" PDB|"COMPANY" |
命令示例
动态地添加增量同步表RESOURCES.EMPLOYEE,添加后自动进行增量数据的同步。
alter cpt_dm8 add dict "sch.name='RESOURCES' and tab.name='EMPLOYEE'"
动态地添加一批增量同步表,添加后自动进行增量数据的同步。
alter cpt_dm8 add dict "sch.name='RESOURCES' and tab.name like 'E%'"
动态地添加pdb1容器中的一批增量同步表,添加后自动进行增量数据的同步。
alter cpt_dm8 add dict "sch.name='RESOURCES' and tab.name like 'E%'" pdb|"pdb1"
动态地更新增量同步表RESOURCES.EMPLOYEE,更新后以数据库中该表的最新表结构作为字典自动进行增量数据的同步。
alter cpt_dm8 update dict "sch.name='RESOURCES' and tab.name='EMPLOYEE'"
动态地更新一批增量同步表,更新后以数据库中最新表结构自动进行增量数据的同步。
alter cpt_dm8 update dict "sch.name='RESOURCES' and tab.name like 'E%'"
适用场景
Oracle数据库主备分别做源和目标数据库,数据库主备拆分后能衔接数据同步。
命令功能
用于主备拆分前的准备工作,设置源DMDRS的起始LSN,添加同步表的字典,获取目标数据库的衔接LSN,最后拆分主备启动DMDRS同步。
注意
- 该功能实现包含一系列命令,必须按照顺序执行,且每个命令的执行时链路状态要符合限制,否则启动后会衔接出错。
- 备库只读模式下搭建的目标DMDRS会无法自动启动,需要在修改备库为可读写后再手动启动EXEC模块。
命令格式
在数据库主备正常同步时,将源DMDRS部署在主库,目标DMDRS部署在备库上,并启动源DMDRS和目标DMDRS服务,不启动CPT和EXEC模块。
设置源DMDRS的起始LSN。
首先获取源库最小活动事务的起始LSN,如果没有活动事务则获取数据库当前LSN。
ALTER [<CPT_NAME>] SET STANDBY LSN
添加同步表的字典。
检测到设置起始LSN是使用set standby lsn命令后,会自动做闪回查询,设置闪回LSN为上一步获取的起始LSN,使字典版本和起始LSN时刻保持一致。具体的参数说明见添加和更新增量同步表。如果无法闪回会使用当前数据库最新版本的字典保存,可能会导致解析日志的字典版本与当前版本字典不匹配。建议在检查活动事务结束后重新进行步骤2或者使用LSN掩码手动指定可闪回LSN。
ALTER [<CPT_NAME>] ADD DICT "<FILTER>" [<LOAD_MASK>]
将数据库主备停止同步,备库停止应用且仍然处于只读状态时,获取目标备库的最新LSN作为衔接LSN。
ALTER [<CPT_NAME>] GET STANDBY LSN
将数据库主备完全拆分,目标备库修改为可读写,手动启动源DMDRS的CPT模块和目标DMDRS的EXEC模块,开始同步。
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
适用场景
数据同步、数据分发
命令功能
在同步中,动态删除和终止增量同步表。删除增量同步表后,停止进行增量数据的同步;终止增量同步表后,停止进行增量数据的同步,并通知目标DMDRS清理该表的对象信息。
注意终止增量同步表会发送消息到目标DMDRS,对目标DMDRS的表信息进行清理。要再次启用已终止增量同步表的同步,源端必须执行以下任一操作: 1. 重新添加字典。 2. 重新添加表的增量同步。 3. 重新删除创建表同步。
命令格式
ALTER [<CPT_NAME>] DELETE|TERMINATE DICT [<PDBNAME>.]<SCHNAME>.<TABNAME>|ALL
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| DELETE|TERMINATE | DELETE:仅删除源DMDRS增量同步表,目标DMDRS仅移除监控信息。 TERMINATE:删除源DMDRS增量同步表,并通知目标DMDRS清理该表的信息。 |
| "<FILTER>"|[<PDBNAME>.]<SCHNAME>.<TABNAME>|ALL |
|
命令示例
删除增量同步表RESOURCES.EMPLOYEE,删除后停止进行增量数据的同步。
alter cpt_dm8 delete dict RESOURCES.EMPLOYEE
删除已添加的全部增量同步表,停止增量数据的同步。
alter cpt_dm8 delete dict all
删除增量同步表RESOURCES.EMPLOYEE,删除后停止进行增量数据的同步,并通知目标DMDRS清理该表的对象信息。
alter cpt_dm8 terminate dict RESOURCES.EMPLOYEE
删除已添加的全部增量同步表,停止增量数据的同步,并通知目标DMDRS清理所有表的对象信息。
alter cpt_dm8 terminate dict all
适用场景
数据分发
命令功能
用于只有数据库归档文件和离线字典文件,可以在不访问数据库的情况下将归档文件解析成SQL语句并存入文件的应用场景。
启用离线日志解析功能时,可以通过指定离线日志和离线字典、可选LSN范围、过滤条件、目标存储文件和配置文件,将离线日志解析后按CVT脚本规则存储到文件。该命令仅支持在启动源DMDRS服务的模块前执行。
说明
- 该命令仅适用于DM8(单机和DMDSC)和Oracle 10g及以上版本(单机)数据库。当为DM8时,仅支持辅助表方式的离线日志解析。
- 当离线解析DMDSC数据库的日志时,由于需要使用ASM连接来读日志,因此需要在DMDRS配置文件的rac标签下正确配置DMDSC的ASM连接信息。
命令格式
DUMP LOG "<FILEPATH>"|"<FILEDIR>" [LSN MIN <MIN_LSN>] [LSN MAX <MAX_LSN>] DICT "<DICTDIR>" [TABLE "<SCHNAME>.<TABNAME>"] [FILE "<FILEPATH>"][CONF "<FILEPATH>"] [SEND]
参数说明
| 参数 | 说明 |
|---|---|
| "<FILEPATH>"|"<FILEDIR>" |
|
| MIN_LSN | 待解析日志的起始LSN。若不输入,则将从指定离线日志的最小LSN开始打印。 |
| MAX_LSN | 待解析日志的结束LSN。若不输入,则表示一直解析到指定离线文件最大LSN。 |
| "<DICTDIR>" | 离线字典目录。 |
| "<SCHNAME>.<TABNAME>" | 按模式名.表名过滤,若指定则表示只存储指定条件的内容,不指定则表示不过滤。Oracle 12c及以上版本且带有容器的数据库必须指定,使用"*.*.*"表示不过滤。 模式名和表名都支持模糊查询,具体如下: *:所有模式或表。 A*:前缀为A的所有模式或表。 *B:后缀为B的所有模式或表。 A*B:前缀为A且后缀为B的所有模式或表。 |
| FILE "<FILEPATH>" | 解析后内容的保存路径。默认生成到本次命令所生成的模块所属文件夹下的dump.sql文件中。 |
| CONF "<FILEPATH>" | ini配置文件的路径,用于初始化字符集编码或者PDB容器数据库信息。Oracle 12c及以上版本且带有容器的数据库必须指定,默认查找DICTDIR同级目录下的drsvr.ini。 |
| SEND | 离线解析的日志需发送到目标DMDRS。 |
命令示例
离线字典使用"C:\DICT"中字典,对指定离线日志目录"D:\Oracle\fast_recovery_area\orcl\ARCHIVELOG\2023_01_11"下所有日志从头到尾进行解析,对得到的内容不进行任何过滤,结果保存在本次命令所生成的模块所属文件夹下的dump.sql文件中。
dump log "D:\Oracle\fast_recovery_area\orcl\ARCHIVELOG\2023_01_11" dict "C:\DICT"
离线字典使用"C:\DICT"中字典,对指定离线日志目录"D:\Oracle\fast_recovery_area\orcl\ARCHIVELOG\2023_01_11"下所有日志从LSN 3246723开始解析,到LSN 4523872停止解析,解析过程中过滤除了模式PRODUCTION下PRODUCT表之外的所有内容,结果保存到"D:\dump\dumplog.sql"路径文件中,采用"C:\CONF\drsvr.ini"配置文件中信息初始化模块。
dump log "D:\Oracle\fast_recovery_area\orcl\\ARCHIVELOG\2023_01_11" lsn min 3246723 lsn max 4523872 dict "C:\DICT" table "PRODUCTION.PRODUCT" file "D:\dump\dumplog.sql" conf "C:\CONF\drsvr.ini"
离线字典使用"C:\DICT"中字典,对指定离线日志文件"+DMLOG/arch2/ARCHIVE_LOCAL1_0x19F10588_EP1_2025-12-22_10-57-40.log"从头到尾进行解析,对得到的内容不进行任何过滤,结果保存在本次命令所生成的模块所属文件夹下的dump.sql文件中。
dump log "+DMLOG/arch2/ARCHIVE_LOCAL1_0x19F10588_EP1_2025-12-22_10-57-40.log" dict "C:\DICT"
适用场景
数据迁移、数据同步、数据分发
命令功能
通过命令添加或删除指定的映射规则,再执行确认命令使所有的修改命令生效或者执行取消命令删除当前未生效的所有修改命令,并同步保存在配置文件中,可在不重启源DMDRS的情况下动态修改映射规则。
说明该命令不适用于源数据库DM8 DMDPC。
注意输入修改映射规则命令后会对当前输入的映射规则进行校验,满足校验条件的映射规则才能修改。
- 若为添加映射规则,则在type和disable属性相同时校验左值是否完全相等,左值完全一样的无法添加,可添加已有映射规则的真子集或将已有映射规则当作真子集的映射规则(例:存在DMDRS.T*==DMDRS.T*,不可添加DMDRS.T*==SYSDBA.T*,可添加DMDRS.T1==DMDRS.T2和DMDRS.*==SYSDBA.*)。当存在有交集的映射规则时,映射以最大匹配度,即最小子集为准。
- 若为删除映射规则,则在type和disable属性相同时校验整个映射规则,仅当用户输入规则与已有规则完全相同时才能删除。
命令格式
添加或删除指定的映射规则。
ALTER [<CPT_NAME>] ADD|DELETE [DISABLE] MAP [<TYPE>] "<ITEM>" [DIR "<TSDIR>"]
确认或取消当前所有的修改命令。
ALTER [<CPT_NAME>] CONFIRM|CANCEL
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| ADD|DELETE |
|
| DISABLE | 配置该参数,表示添加或者删除的映射规则为黑名单规则。如果不配置该参数,表示添加或删除的映射规则为白名单规则。 |
| TYPE | 对象类型。
|
| "<ITEM>" | 映射规则。 不配置TYPE:格式为 "<库名./容器名.>模式名.对象名模式名.对象名"。对象名包括表、序列、视图、函数、存储过程、触发器、包、类、同义词、自定义类型。 TYPE配置为table:格式为 "<库名./容器名.>模式名.表名模式名.表名"。 TYPE配置为tablespace:格式为"表空间名表空间名" TYPE配置为object:格式为 "<库名./容器名.>模式名.对象名模式名.对象名"。对象名不包括表,仅包括序列、视图(普通视图、物化视图)、函数、存储过程、触发器、包、类、同义词、自定义类型。 TYPE配置为view/mview/procedure/function/trigger/package/synonym/sequence/class:格式为 "<库名./容器名.>模式名.对象名==模式名.对象名"。 库名、表空间名、模式名和对象名支持通配符配置,包括*和A*。容器名不支持通配符配置,具体如下: *:表示所有库、所有表空间、所有模式和所有对象。 A*:表示前缀为A的所有库、所有表空间、所有模式和所有对象。 具体说明请参见CPT模块map标签下的item参数。 |
| DIR "<TSDIR>" | 映射后的表空间的路径。TYPE配置为tablespace时,可选配。不配置表示表空间路径没有映射。 |
| CONFIRM|CANCEL |
|
命令示例
添加PERSON模式下所有对象的映射规则,以及删除RESOURCES模式下所有对象的映射规则,确认使当前所有的修改命令生效。
添加PERSON模式下所有对象的映射规则"PERSON.* == PERSON.*"。
alter cpt_dm8 add map "PERSON.*==PERSON.*"
删除RESOURCES模式下所有对象的映射规则"RESOURCES.*==RESOURCES.*"。
alter cpt_dm8 delete map "RESOURCES.*==RESOURCES.*"
确认使当前所有修改命令生效。
alter cpt_dm8 confirm
添加PERSON模式下所有表的映射规则,以及删除RESOURCES模式下所有表的映射规则,确认使当前所有的修改命令生效。
添加PERSON模式下所有表的映射规则"PERSON.* == PERSON.*"。
alter cpt_dm8 add map table "PERSON.*==PERSON.*"
删除RESOURCES模式下所有表的映射规则"RESOURCES.*==RESOURCES.*"。
alter cpt_dm8 delete map table "RESOURCES.*==RESOURCES.*"
确认使当前所有修改命令生效。
alter cpt_dm8 confirm
添加表空间Tablespace_cpt的映射规则,并指定映射到目标数据库的表空间的路径,确认使当前所有的修改命令生效。
添加表空间Tablespace_cpt的映射规则"Tablespace_cpt==Tablespace_exec" ,映射后表空间的路径为 "/opt/tablespace"。
alter cpt_dm8 add map tablespace "Tablespace_cpt==Tablespace_exec" dir "/opt/tablespace"
确认使当前所有修改命令生效。
alter cpt_dm8 confirm
添加PERSON模式下除表外的对象的映射规则,以及删除RESOURCES模式下除表外的对象的映射规则,确认使当前所有的修改命令生效。
添加PERSON模式下除表外的对象的映射规则"PERSON.* == PERSON.*"。
alter cpt_dm8 add map object "PERSON.*==PERSON.*"
删除RESOURCES模式下除表外的对象的映射规则"RESOURCES.*==RESOURCES.*"。
alter cpt_dm8 delete map object "RESOURCES.*==RESOURCES.*"
确认使当前所有修改命令生效。
alter cpt_dm8 confirm
添加RESOURCES模式下的对象名为EMPLOY_VIEW的视图的映射规则,确认使当前所有的修改命令生效。
添加RESOURCES模式下的对象名为EMPLOY_VIEW的视图的映射规则"ORCLPDB.RESOURCES.EMPLOY_VIEW==RESOURCES.EMPLOY_VIEW"。
alter cpt_oracle add map view "ORCLPDB.RESOURCES.EMPLOY_VIEW==RESOURCES.EMPLOY_VIEW"
确认使当前所有修改命令生效。
alter cpt_oracle confirm
适用场景
双向同步场景。
命令功能
切换双向同步时,数据来源方向。
命令格式
SWITCH LINK [FORCE]
参数说明
| 参数 | 说明 |
|---|---|
| FORCE | 切换的方式。使用该关键字,将过滤链路(standby)中操作LSN>0的消息屏蔽掉;不使用该关键字,将过滤链路(standby)中操作LSN>(数据库当前LSN)的消息屏蔽掉。 |
命令示例
切换双向同步数据来源方式。
switch link force
说明切换双向同步的数据方向后可通过如下2种方式查看切换后的链路状态。
- 查看日志,日志中会显示“双向同步,切换链路状态成功status : standby”。
- 执行show mode命令查看切换后的链路状态。
适用场景
数据同步、数据分发
命令功能
当源数据库DMDPC添加BP节点后,在不中断DMDRS集群中各节点服务的情况下,将新增BP节点上的DMDRS服务动态添加到DMDRS集群中。
当源数据库DMDPC添加或删除BP节点时,MP节点上的DMDRS服务会进行监测并给予提示信息。当删除BP节点时,会将该BP节点上的DMDRS服务自动移除DMDRS集群。当添加BP节点时,则可使用该命令将新增BP节点上新部署的DMDRS服务动态加入到DMDRS集群。
注意使用该命令前,必须先启动新添加的BP节点上的DMDRS服务。
命令格式
ALTER [<CPT_NAME>] ADD BP "<FILTER>"
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| "<FILTER>" | FILTER:从数据库中筛选BP节点的条件,过滤条件采用SQL表达式,需要满足SQL表达式的语法规则。过滤条件中RAFT_ID为新增BP节点的节点号,NAME为新增BP节点的节点名,IP_INTERNAL为新增BP节点的IP地址。过滤条件需要确保根据该条件能从源数据库DMDPC中查询到唯一的BP节点(非STANDBY类型)。格式举例如下: "RAFT_ID = '<BP_ID>' AND NAME = '<BP_NAME>'":节点号为BP_ID且节点名为BP_NAME的BP节点。 "IP_INTERNAL = '<BP_IP>'":IP地址为BP_IP上的BP节点。 |
命令示例
将节点号为3,且节点名为BP3的BP节点上的DMDRS服务动态加入DMDRS集群。
alter cpt_dpc add bp "RAFT_ID = '3' AND NAME = 'BP3'"
将IP地址为192.168.17.12的BP节点上的DMDRS服务动态加入DMDRS集群。
alter cpt_dpc add bp "IP_INTERNAL = '192.168.17.12'"
适用场景
数据迁移、数据同步、数据分发
命令功能
源DMDRS获取源数据库的归档日志文件,并备份到源DMDRS、DMDSS或目标DMDRS的程序运行目录或指定目录。
说明
- 归档日志文件默认保存在DMDRS程序运行目录的mgr目录。
- 指定目录是指DMDRS程序所在服务器的目录。
- 该命令仅适用于DM8(单机、DMDSC)、MySQL和Oracle(单机、RAC)数据库。
命令格式
ALTER [<CPT_NAME>] BACKUP|SEND [ARCH "<FILE_NAME>"]|[LSN MIN <MIN_LSN> LSN MAX <MAX_LSN>] [DIR "<SAVE_PATH>"]
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| BACKUP|SEND | BACKUP:源DMDRS获取源数据库的归档日志文件,并备份到源DMDRS的程序运行目录或指定目录。 SEND:源DMDRS获取源数据库的归档日志文件,并备份到DMDSS或目标DMDRS的程序运行目录或指定目录。 |
| FILE_NAME | 源数据库的归档日志文件名。 |
| MIN_LSN | 源数据库的归档日志文件的最小LSN,包括最小LSN所在的归档日志文件。 |
| MAX_LSN | 源数据库的归档日志文件的最大LSN,包括最大LSN所在的归档日志文件。 |
| SAVE_PATH | 备份归档日志文件的保存目录。不配置该参数,归档日志文件默认保存在程序运行目录的mgr目录。 |
命令示例
源DMDRS将名称为1_593_1190308056.DBF的源数据库归档日志文件备份到源DMDRS的程序运行目录。
alter cpt_dm8 backup arch "1_593_1190308056.DBF"
源DMDRS将LSN范围为28260137~28954251的源数据库归档日志文件备份到目标DMDRS的程序运行目录。
alter cpt_dm8 send LSN MIN 28260137 LSN MAX 28954251
源DMDRS将LSN范围为28260137~28954251的源数据库归档日志文件备份到目标DMDRS程序所在服务器的/mppdata/backup目录。
alter cpt_dm8 send LSN MIN 28260137 LSN MAX 28954251 DIR "/mppdata/backup"
适用场景
数据同步、数据分发
命令功能
动态开启清洗转换功能,以及添加、更新或删除CVT脚本配置。
说明该命令仅适用于DM8和Oracle源数据库。
命令格式
ALTER <CPT_NAME> CVT ADD|UPDATE|DELETE "<PATH>"
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| ADD|UPDATE|DELETE |
|
| PATH | CVT文件路径或CVT文件目录。 |
命令示例
动态开启清洗转换功能。
alter cpt_dm8 cvt add "/home/dmdrs/bin/cvt_script"
动态添加test1.cvt脚本配置。
alter cpt_dm8 cvt add "/home/dmdrs/bin/cvt_script/test1.cvt"
动态更新test1.cvt脚本配置。
alter cpt_dm8 cvt update "/home/dmdrs/bin/cvt_script/test1.cvt"
动态删除test1.cvt脚本配置。
alter cpt_dm8 cvt delete "/home/dmdrs/bin/cvt_script/test1.cvt"
文章
阅读量
获赞
