DMDRS搭建
本次进行DMDRS工具的部署搭建以及使用
环境配置
操作系统及数据库配置
- 操作系统:使用CentOS7
- 数据库:dm8_20240408_x86_rh7_64
服务器配置
实例名 | 服务器IP |
---|---|
DM1 | 192.168.19.7(源DMDRS) |
DM2 | 192.168.19.4(目的DMDRS) |
目录配置
目录类型 | 源DMDRS数据库 | 目的DMDRS数据库 |
---|---|---|
安装路径 | /home/dmdba/dmdrs5 | /home/dmdba/dmdrs5 |
执行程序目录 | /home/dmdba/dmdrs5/bin | /home/dmdba/dmdrs5/bin |
配置文件路径 | /home/dmdrs/dmdrs5/bin/cpt.xml | /home/dmdrs/dmdrs5/bin/exec.xml |
服务脚本目录 | /home/dmdrs/dmdrs5/bin | /home/dmdrs/dmdrs5/bin |
console远程控制工具 | /home/dmdrs/dmdrs5/bin/drcsl | /home/dmdrs/dmdrs5/bin/drcsl |
数据库准备工作
开启源数据库的归档和逻辑日志(源端)
-
动态配置(推荐)
-
使用disql登录数据库,执行命令进行归档配置
SQL> alter database mount; SQL> alter database add archivelog 'DEST=/home/dmdba/arch,TYPE=LOCAL,FILE_SIZE=512,SPACE_LIMIT=10240'; SQL> alter database archivelog; SQL> alter database open;
-
调用系统过程SP_SET_PARA_VALUE修改RLOG_APPEND_LOGIC参数值
SQL> call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);
-
-
静默配置
-
进入DM数据库的配置文件dm.ini中修改ARCH_INI参数为1,RLOG_APPEND_LOGIC根据情况配置
#configuration file ARCH_INI = 1 #redo log RLOG_APPEND_LOGIC = 1
-
在dm.ini同目录下,新建配置文件dmarch.ini,并添加归档配置文件
[ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /home/dmdba/arch ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 10240
-
配置完毕后重启服务器
-
配置DDL同步(源端)
-
辅助表方式(推荐)
-
在源数据库执行
ddl_sql_dm8.sql
脚本创建辅助表,脚本默认在DMDRS执行程序目录下的scripts目录中SQL>set define off; SQL>start /home/dmdba/dmdrs5/bin/scripts/ddl_sql_dm8.sql
建议:
这里建议使用manager工具执行脚本,使用disql执行的话很容易出现部分语句报错
-
检查创建的触发器和辅助表是否有效
SQL> select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DRS_$%' and status = 'Y'; SQL> select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DRS_$%' and status = 'VALID';
- 出现4个触发器、9个辅助表则表示配置成功
-
-
系统表方法
-
静默配置
-
设置数据库配置文件dm.ini中RLOG_APPEND_LOGIC参数值为1
#redo log RLOG_APPEND_SYSTAB_LOGIC = 1
-
重启数据库服务,使配置生效
-
-
动态配置
-
调用系统过程SP_SET_PARA_VALUE修改RLOG_APPEND_SYSTAB_LOGIC参数值
SQL> call sp_set_para_value(1,'RLOG_APPEND_SYSTAB_LOGIC',1);
-
-
创建数据库同步用户DMDRS(源端&目的端)
-
在源端和目的端创建数据库同步用户DMDRS,并赋予同步权限
注:
如果是在测试环境下学习,可以直接赋予DBA权限;如果是在生产环境下,需要执行权限管控,配置同步用户最小权限
-
这里我使用manager工具创建用户
-
DMDRS准备工作
DMDRS服务管理规划(源端&目的端)
-
DMDRS服务运行过程中,需要使用数据库的驱动文件访问数据库数据,需要为运行DMDRS的用户设置环境变量
-
在系统中查询驱动文件的所在位置
find /home/dmdba/dmdbms -name *dmdpi*
-
设置环境变量,添加驱动文件路径
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dmdbms/drivers/dpi" echo $LD_LIBRARY_PATH
-
DMDRS配置
配置源DMDRS
-
源DMDRS服务包括Manager管理模块和CPT模块,在dmdrs安装目录下的bin/conf_sample下存有配置文件模板
<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5345</mgr_port><!--如:5345--> <siteid>1</siteid><!--如:1--> </base> <cpt> <name>cpt_dm8</name><!--如:cpt_dm8--> <login> <dbtype>dm8</dbtype><!--如:dm8--> <server>192.168.19.142</server><!--如:192.168.20.24--> <user>DMDRS</user><!--如:DMDRS--> <pwd>DMDRS</pwd><!--如:DMDRS--> <port>5236</port><!--如:5236--> </login> <send> <ip>192.168.19.139</ip><!--如:192.168.20.21--> <port>5345</port><!--如:5345--> <target_name>exec_dm8</target_name><!--如:exec_dm8--> <map> <item>*.*==*.*</item><!--如:*.*==*.*--> </map> </send> </cpt> </drs>
配置目标DMDRS
-
目标DMDRS服务包括Manager管理模块和EXEC模块
<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5345</mgr_port><!--如:5345--> <siteid>2</siteid><!--如:2--> </base> <exec> <name>exec_dm8</name><!--如:exec_dm8--> <login> <dbtype>dm8</dbtype><!--如:dm8--> <server>192.168.19.139</server><!--如:192.168.20.21--> <user>DMDRS</user><!--如:DMDRS--> <pwd>DMDRS</pwd><!--如:DMDRS--> <port>5236</port><!--如:5236--> </login> </exec> </drs>
DMDRS运行
管理服务(源端&目的端)
-
配置DMDRS服务脚本
-
将服务脚本模板TemplateService拷贝到执行程序目录,并修改服务脚本的名称为默认服务脚本名
cp /home/dmdba/dmdrs5/bin/service_template/TemplateService /home/dmdba/dmdrs5/bin/DrsService
-
打开并修改服务脚本中的相关配置参数
##源端DMDRS配置 INSTALL_HOME=/home/dmdba/dmdrs5 PROG_DIR=/home/dmdba/dmdrs5/bin CONF_PATH=/home/dmdba/dmdrs5/bin/cpt.xml EXEC_PROG_NAME=drsvr SERVICE_TYPE_NAME="drs server" ##目的端DMDRS配置 INSTALL_HOME=/home/dmdba/dmdrs5 PROG_DIR=/home/dmdba/dmdrs5/bin CONF_PATH=/home/dmdba/dmdrs5/bin/exec.xml EXEC_PROG_NAME=drsvr SERVICE_TYPE_NAME="drs server"
-
启动DMDRS服务
-
启动源DMDRS服务器
./DrsService start
-
启动目的端服务器
./DrsService start
数据复制
数据迁移
-
在源端DMDRS服务中执行数据迁移命令
说明:
数据迁移功能无需启动CPT功能模块,直接执行相应的数据迁移命令即可
-
启动控制台
./drcsl cpt.xml
-
连接源DMDRS服务
CSL> connect
-
将源数据库DMDRS模式下表EMPLOYEE的全量数据迁移到目标数据库
CSL> alter cpt_dm8 cp "sch.name='DMDRS' and tab.name='EMPLOYEE'"
-
-
验证迁移结果
-
到目的端数据库上去查看是否存在表EMPLOYEE,表中是否存在数据,数据是否能够对得上
##查看表EMPLOYEE中的所有数据 select * from DMDRS.EMPLOYEE; ##查看EMPLOYEE表中的数据量 select count(*) from DMDRS.EMPLOYEE;
- 35个数据完完整整地迁移过来了
-
数据同步
-
配置目标DMDRS服务
-
在目标DMDRS服务中打开exec.xml配置文件,修改配置文件内容
<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5345</mgr_port> <siteid>2</siteid> </base> <exec> <name>exec_dm8</name> <login> <dbtype>dm8</dbtype> <server>192.168.19.4</server> <user>DMDRS</user> <pwd>DMDRS</pwd> <port>5236</port> </login> <group> <item> <id>35</id> <exec_policy>0</exec_policy> <desc> <table>*.*</table> </desc> </item> </group> </exec> </drs>
-
-
配置源端DMDRS服务器
-
在源端DMDRS服务中打开cpt.xml配置文件,修改配置文件内容
<?xml version="1.0" encoding="GB18030"?> <drs> <base> <mgr_port>5345</mgr_port> <siteid>1</siteid> </base> <cpt> <name>cpt_dm8</name> <login> <dbtype>dm8</dbtype> <server>192.168.19.7</server> <user>DMDRS</user> <pwd>DMDRS</pwd> <port>5236</port> </login> <send> <ip>192.168.19.4</ip> <port>5345</port> <target_name>exec_dm8</target_name> <map> <item>*.*==*.*</item> </map> </send> </cpt> </drs>
-
-
运行DMDRS服务器
-
启动目标DMDRS服务器
./DrsService start
-
启动源DMDRS服务器
./DrsService start
-
-
启动源端CPT模块
-
启动控制台,连接服务
##启动控制台 ./drcsl cpt.xml ##连接DMDRS服务 CSL> connect
-
设置数据库当前最新的日志LSN作为日志解析的起始位置
CSL> alter cpt_dm8 set lsn
-
启动CPT模块,将源数据库中DMDRS模式下所有的表添加同步,并在同步之前把源端表的全量数据装载到目标数据库
##启动CPT模块 CSL> start ##添加同步 CSL> alter cpt_dm8 add table "sch.name='DMDRS'"
-
-
验证同步结果
-
在源DMDRS服务上创建表test,并插入数据
##创建表test CREATE TABLE DMDRS.test( id INTEGER, name VARCHAR(20) ); ##插入数据 INSERT INTO DMDRS.TEST VALUES(1,'Tom'),(2,'Jerry'); ##提交 commit;
-
到目的DMDRS服务上查看数据是否同步过来
- 源端DMDRS服务上的表已经同步过来了,同时表中的数据也过来了
-
至此,DMDRS工具的数据迁移和同步已经验证成功。
总结
- 本次主要是DMDRS工具的搭建使用,需要注意许可证的时间,我最开始搭建的时候没有注意到这个问题,在配置完后启动服务就报错了。还有要多注意源端DMDRS的LSN序列与目的端DMDRS的LSN是否能够对得上,不然就会报错网络连接失败,数据也会同步不过去。
参考
- 达梦在线服务平台——https://eco.dameng.com