注册
DMDRS单向同步oracle11g-dm8(二)
技术分享/ 文章详情 /

DMDRS单向同步oracle11g-dm8(二)

9999 2026/08/14 115 1 0

本次谈论的是单向单机ORACLE11G—单机DM8
通过DMDRS,将源数据库模式XKC_HZ下所有表的全量数据和增量数据同步到目标数据库的DMDRS模式下面。

1.数据库的准备工作

image.png

2.源和目标数据库的准备工作

2.1 源库开启归档和最小附加日志及全列日志:

sqlplus / as sysdba
archive log list 查看是否开启归档
startup mount
alter system set log_archive_dest=’/oradata/arch’;
alter database open;
alter database add supplemental log data;
alter database add supplemental log data (ALL) columns;
alter system set enable_goldengate_replication = TRUE;
注意:oracle11g版本需要开启enable_goldengate_replication参数。
查看全列日志和最小附加日志是否开启
SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
image.png

2.2 源dmdba用户加入oracle用户的组中

将2.48环境下面的dmdba加入组oinstall中,不然会报如下错误
image.png
[root@impdb ~]# useradd dmdba
[root@impdb ~]# usermod -aG oinstall dmdba
[root@impdb ~]# id oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
[root@impdb ~]# id dmdba
uid=12348(dmdba) gid=1004(dinstall) groups=1004(dinstall),1001(oinstall),1002(dba)

2.3创建源和目标数据库同步用户DMDRS

源和目标管理员分别创建数据库同步用户DMDRS,并赋予同步所需权限。源DMDRS用户不赋予DBA权限,仅赋予同步所需的最小权限即可,
源库:
当使用容器数据库且以公共用户登录时,需要将权限传递到所有可插拔数据库。权限示例如下:
赋予DMDRS用户会话权限,并传递到可插拔数据库:
GRANT CONNECT TO DMDRS CONTAINER=ALL。
赋予DMDRS用户查询SYS.OBJ表权限,并传递到可插拔数据库: GRANT SELECT ON SYS.OBJ TO DMDRS CONTAINER=ALL;
CREATE USER DMDRS IDENTIFIED by “DMDRS123456”;
GRANT SELECT ON dba_tables to DMDRS;
GRANT SELECT ON dba_objects to DMDRS;
GRANT FLASHBACK ANY TABLE to DMDRS;
GRANT SELECT ANY DICTIONARY TO DMDRS;
GRANT SELECT ANY TABLE, SELECT ANY DICTIONARY, CREATE SESSION TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
grant connect to dmdrs;
grant LOCK ANY TABLE to dmdrs;
grant FLASHBACK ANY TABLE to dmdrs;
grant EXECUTE ON DBMS_FLASHBACK to dmdrs;
grant select any table to dmdrs;
GRANT SELECT ON DBA_TAB_PARTITIONS TO DMDRS;
GRANT SELECT ON SYS.OBJ$ TO DMDRS;
GRANT SELECT ON SYS.USER$ TO DMDRS;
GRANT SELECT ON SYS.COL$ TO DMDRS;
GRANT SELECT ON SYS.COLTYPE$ TO DMDRS;
GRANT SELECT ON SYS.CCOL$ TO DMDRS;
GRANT SELECT ON SYS.CDEF$ TO DMDRS;
GRANT SELECT ON SYS.ATTRCOL$ TO DMDRS;
GRANT SELECT ON DBA_IND_COLUMNS TO DMDRS;
GRANT SELECT ON DBA_INDEXES TO DMDRS;
GRANT SELECT ON SYS.IND$ TO DMDRS;
GRANT SELECT ON SYS.SEQ$ TO DMDRS;
GRANT SELECT ON DBA_TAB_SUBPARTITIONS TO DMDRS;
GRANT SELECT ON DBA_CONSTRAINTS TO DMDRS;
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
GRANT ALTER ANY SEQUENCE TO DMDRS;
GRANT CREATE ANY table TO DMDRS;
GRANT ALTER ANY table TO DMDRS;
GRANT DROP ANY table TO DMDRS;
ALTER USER DMDRS QUOTA UNLIMITED ON USERS;
image.png

目标库:

CREATE USER DMDRS IDENTIFIED by “DMDRS123456”;
grant “PUBLIC”,“RESOURCE”,“SOI”,“SVI”,“VTI” to “DMDRS”;
grant CREATE SESSION to “DMDRS”;
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
GRANT COMMENT ANY TABLE TO DMDRS;
–GRANT EXECUTE ON PROCEDURE “DRS_$DDL_SQL_PROC” TO DMDRS;
GRANT CREATE PROCEDURE TO DMDRS;

2.4 设置环境变量

Oracle数据库:OCI驱动
Linux系统,在终端的配置文件中添加设置环境变量命令。

image.png
说明:dmdba用户没有LD_LIBRARY_PATH这些变量,会报错找不到 libclntsh.so.11.1,所以需要dmdba用户拥有和oracle同样的LD_LIBRARY_PATH变量

2.5.上传软件

源:
[dmdba@impdb ~]$ unzip dmdrs_V5.2.5.3_rev213013_x86_rh6_64_20260203.zip
dmdrs软件的key在/home/oracle目录下面,
chmod 777 dmdrs.key
mv /home/oracle/dmdrs/dmdrsC301900946.key /home/dmdba/dmdrs/release/dmdrs.key
目标:
[dmdba@localhost ~]$ unzip dmdrs_V5.2.5.3_rev213013_x86_rh6_64_20260203.zip
dmdrs软件的key在/home/dmdba目录下面,
chown -R dmdba:dinstall dmdrs
chmod 777 dmdrs.key
mv /home/dmdba/dmdrs/dmdrsC301900946.key /home/dmdba/dmdrs/release/dmdrs.key

3.DMDRS配置

3.1 配置源dmdrs

源数据库为oracle单机
cp /home/dmdba/release/conf_sample/cpt.xml /home/dmdba/dmdrs/release
[dmdba@impdb release]$ cat cpt.xml
image.png
注意:
DMDRS 从 Oracle → DM 做异构同步时,ddl_mask 是用来控制 哪些 DDL 操作需要捕获并同步 的配置项,配置在源端 cpt.xml 里面

3.2 配置目标dmdrs

目标DMDRS服务包括Manager模块和EXEC模块。在目标DMDRS服务中,Manager模块提供基本的服务管理功能,EXEC模块提供数据执行功能
cp /home/dmdba/dmdrs/release/conf_sample/exec.xml /home/dmdba/dmdrs/release
cat /home/dmdba/dmdrs/release/exec.xml
[dmdba@localhost conf_sample]$ cat exec.xml
image.png
注意:配置文件中的siteid为必配参数,配置时请确保源DMDRS和目标DMDRS服务站点号的唯一性,如果重复,会造成链路中数据复制的混乱

4.DMDRS的运行

4.1 目标dmdrs的运行

将服务脚本模板TemplateService拷贝到服务脚本目录并修改服务脚本的名称为DrsService。
[dmdba@localhost service_template]$ cp TemplateService /home/dmdba/dmdrs/release/DrsService
[dmdba@localhost release]$ chmod +x DrsService
vi DrsService
INSTALL_HOME=/home/dmdba/dmdrs
PROG_DIR=/home/dmdba/dmdrs/bin
CONF_PATH=/home/dmdba/dmdrs/release/exec.xml
NEED_LIB_PATH=_REPLACE_SELF_NEED_LIB_PATH
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”

前台启动测试是否报错:drsvr相当于disql命令行的命令
[dmdba@localhost release]$ ./drsvr exec.xml
MGR[INFO]: DRS start up, current version: V5.2.5.3-Build(2026.02.03-213013_trunc)64 (X86)(Enterprise Edition)
MGR[WARN]: mem_size参数配置过大,超过系统剩余内存大小 mem_size: 16G, total_free_size: 12G
MGR[INFO]: 模块被加载 module: exec_dm8
MGR[INFO]: 正在初始化缓存模块 path: ./exec_dm8/CACHE_exec_dm8, cache size: 512 MB
MGR[INFO]: SITEID: 5 NAME: localhost.localdomain MEMCHECK: 0 PORT: 5345 GROUP: 0 VERSION: 1 PATH: exec.xml
MGR[INFO]: 模块正在启动 module: exec_dm8
EXE[WARN]: 如快装表名中含有中文,需要手动设置LANG字符集与目标数据库保持一致 db_char_code: GB18030
EXE[INFO]: 执行端设置字符集 char_code: GB18030
MGR[INFO]: 模块已经处于运行状态 module: exec_dm8
CMD>EXE[INFO]: 建序列同步过程 proc: DRS
$SEQ_SYNC_PROC
EXE[INFO]: EXEC: DBTYPE:DM8 SERVER=215.244.12.36;USER=DMDRS;PORT=5236;
这个运行成功后,就退出否则后面启动会报错

启动目标DMDRS服务
[dmdba@localhost release]$ ./DrsService status
DrsService is stopped
[dmdba@localhost release]$ ./DrsService start
Starting DrsService: [ OK ]

4.2 启动源dmdrs的运行

[dmdba@impdb service_template]$ cp TemplateService …/DrsService
[dmdba@impdb service_template]$ vi DrsService
INSTALL_HOME=/home/dmdba
PROG_DIR=/home/dmdba/release
CONF_PATH=/home/dmdba/release/cpt.xml
NEED_LIB_PATH=/home/dmdba/drs
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”
[dmdba@impdb release]$ ./DrsService start
Starting DrsService: [ OK ]

5.管理服务

5.1 源dmdrs的cpt.xml启动

[dmdba@impdb release]$ ./drcsl cpt.xml
CSL[INFO]: CONSOLE TOOL DRS5: V5.2.5.3-Build(2026.02.03-213013_trunc)_64
CSL> connect
CSL[INFO]: [INPUT CMD: connect]

CSL> alter cpt_oracle set lsn
启动源DMDRS中cpt的模块
CSL> start
将源数据库中XKC_HZ模式下所有的表添加同步,并在同步之前把源端表的全量数据装载到目标数据库
CSL> alter cpt_oracle add table “sch.name=‘XKC_HZ’”
源/home/dmdba/release/log/drs_202608.log日志会出现同步的情况
image.png
image.png
image.png

5.2.查看cpt的运行情况

show mode
查看名称为“cpt_oracle”的CPT模块各装载字典/表的最新信息。
show cpt_oracle load dict last
show cpt_oracle load table last
查看名称为“cpt_dm8”的CPT模块各装载字典的历史信息。
show cpt_dm8 load dict all

查看名称为“cpt_oracle”的CPT模块各装载状态表最后一次装载的具体信息
show cpt_oracle load table last

查看名称为“cpt_oracle”的CPT模块各装载状态的表数量信息。
show cpt_oracle load status

查看名称为“cpt_oracle”的CPT模块正在装载的表的具体信息
show cpt_oracle load table running

查看名称为“cpt_oracle”的CPT模块装载错误的表的具体信息。
show cpt_oracle load table error

查看名称为“cpt_oracle”的CPT模块各装载状态表的具体信息。
show cpt_oracle load table all
查看名称为“cpt_oracle”的CPT模块中,模式名为“xkc_hz”、表名任意的装载表的具体信息。
show cpt_oracle load table xkc_hz.*
查看名称为“cpt_dm8”的CPT模块中,模式名为“PERSON”、表名为“PERSON”的装载表的具体信息。
show cpt_dm8 load table PERSON.PERSON

删除名称为“cpt_dm8”的CPT模块的全部装载记录。
alter cpt_dm8 delete load_record
image.png
可以看到表迁移完成

5.3.目标端查看表的数据量

select count(*) from TEMP_333 查看源端和目标端的数据量是一样的

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服