软件环境
操作系统 centos 7
源数据库 dm8单机
目标数据库 dm8单机
数据库方面准备工作
1. 开启数据库归档和逻辑日志(在源端操作)
- 动态配置(推荐)
## 配置归档日志
alter database mount;
alter database archivelog;
alter database add archivelog 'DEST=/path/to/arch,TYPE=LOCAL,FILE_SIZE=64,SPACE_LIMIT=10240';
alter database open;
## 配置逻辑日志
call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);
- 静态配置
编辑修改 dm.ini 文件
#configuration file
ARCH_INI = 1
#redo log
RLOG_APPEND_LOGIC = 1
新建 dmarch.ini 文件,并配置归档参数
[ARCHIVE_LOCAL1]
ARCH_DEST = /path/to/arch
ARCH_TYPE = LOCAL
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 10240
重启数据库
2. 配置 ddl 同步(在源端操作)
- 辅助表方式(推荐)
在 dmdrs 的安装目录下找到 bin/scripts 下的 ddl_sql_dm8.sql 脚本并执行
ps:建议通过管理工具执行脚本,如果通过 disql 命令行执行 “start ddl_sql_dm8.sql” ,可能会出现部分语句报错(部分注释语言可能会被误解析,可以手动调整脚本解决)
- 系统表方式
a. 静态配置
修改 dm.ini 文件参数,修改完后重启数据库生效
# redo log
RLOG_APPEND_SYSTAB_LOGIC=1
b. 动态配置
调用系统过程实现
SQL> call sp_set_para_value(1,'RLOG_APPEND_SYSTAB_LOGIC',1);
当配置两种方式时,dmdrs 会优先使用辅助表方式
3. 用户配置(在源端和目的端操作)
需要在源数据库和目标数据库创建用户DMDRS,并授予同步相关权限
如果在测试环境学习使用,可以直接授予dba权限;如果考虑安全性,需要执行权限管控,则配置同步用户最小权限
用户最小权限说明:
权限类别 | 权限说明 | 权限 |
---|---|---|
基础权限 | DM8数据库用户默认具有PUBLIC角色权限。 | 需要赋予如下权限:PUBLIC |
基础权限 | DMDRS服务在启动、数据装载及同步过程中需要使用数据库数据字典表来查询如附加日志信息、日志信息、数据库实例名和表定义等相关信息。 | 需要赋予如下权限:SOI、SVI、VTI |
装载相关权限 | 装载时,数据库用户需要具有装载表的查询权限。如果待装载的表或序列在当前用户下,不需要额外赋予任何查询权限。 如果待装载的表或序列在其他用户下,则需要赋予待装载表的查询权限。 | 需要赋予如下权限:SELECT ON <待装载表/序列的模式名>.<待装载表/序列的表名> |
DSC相关权限 | 数据库为DSC时,数据库用户需要具有建表、INSERT和UPDATE权限,以及建包和调用的权限。 | 需要赋予如下权限:CREATE TABLE |
4. DMDRS服务管理规划
DMDRS服务运行过程中,需要使用数据库的驱动文件访问数据库数据,需要为运行DMDRS的用户设置环境变量
find /path/to/dmdbms -name *dmdpi*
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/ptah/to/DMDPI驱动路径"
echo $LD_LIBRARY_PATH
5. 运行 DMDRS 服务
在 dmdrs 的安装目录 bin/conf_sample 下,存放有 dmdrs 配置文件模板
模板文件的注释给出了参数格式及参考值,可以根据实际使用情况进行自定义设置
- 源DMDRS cpt.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>Manager管理模块的端口号</mgr_port><!--如:5345-->
<siteid>站点号</siteid><!--如:1-->
</base>
<cpt>
<name>CPT模块的名称</name><!--如:cpt_dm8-->
<login>
<dbtype>源数据库的类型</dbtype><!--如:dm8-->
<server>源数据库的服务名或IP地址</server><!--如:192.168.20.24-->
<user>源数据库的用户名</user><!--如:DMDRS-->
<pwd>源数据库的登录密码</pwd><!--如:DMDRS-->
<port>源数据库的监听端口号</port><!--如:5236-->
</login>
<send>
<ip>下一级DMDRS服务的IP地址</ip><!--如:192.168.20.21-->
<port>下一级DMDRS服务的Manager管理模块的端口号</port><!--如:5345-->
<target_name>下一级DMDRS服务的接收模块的名称</target_name><!--如:exec_dm8-->
<map>
<item>对象名映射</item><!--如:*.*==*.*-->
</map>
</send>
</cpt>
</drs>
send 部分信息需要与目标 DMDRS 保持一致
- 目标DMDRS exec.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>Manager管理模块的端口号</mgr_port><!--如:5345-->
<siteid>站点号</siteid><!--如:2-->
</base>
<exec>
<name>EXEC模块的名称</name><!--如:exec_dm8-->
<login>
<dbtype>目标数据库的类型</dbtype><!--如:dm8-->
<server>目标数据库的服务名或IP地址</server><!--如:192.168.20.21-->
<user>目标数据库的用户名</user><!--如:DMDRS-->
<pwd>目标数据库的登录密码</pwd><!--如:DMDRS-->
<port>目标数据库的监听端口号</port><!--如:5236-->
</login>
</exec>
</drs>
借助 DMDRS 服务脚本模版TemplateService进行配置,脚本内容很多,仅需修改如下参数值
INSTALL_HOME=<安装目录>
PROG_DIR=<执行程序目录>
CONF_PATH=<配置文件路径>
EXEC_PROG_NAME=<可执行程序名>
SERVICE_TYPE_NAME=<服务类型名>
拷贝 bin/service_template 目录下的 TemplateService ,为方便区分,分别重命名为Drs_sourceService、 Drs_targetService,并移动到 bin 目录下
对应需要修改的参数值对应下表
服务名 | 服务脚本模板目录 | 安装目录 | 执行程序目录 | 配置文件路径(以默认配置文件名为例) | 默认服务脚本名 | 可执行程序名 | 服务类型名 |
---|---|---|---|---|---|---|---|
源DMDRS | /home/dmdrs/dmdrs5/bin/service_template | /home/dmdrs/dmdrs5 | /home/dmdrs/dmdrs5/bin | /home/dmdrs/dmdrs5/bin/drs.xml | Drs_sourceService | drsvr | “drs server” |
目标DMDRS | /home/dmdrs/dmdrs5/bin/service_template | /home/dmdrs/dmdrs5 | /home/dmdrs/dmdrs5/bin | /home/dmdrs/dmdrs5/bin/drs.xml | Drs_targetService | drsvr | “drs server” |
分别启动 Drs_sourceService、Drs_targetService 服务
bin/Drs_sourceService start
bin/Drs_targetService start
数据迁移
在源端启动控制台
./drcsl cpt.xml
连接DMDRS服务
CSL> connect
迁移源数据库 TEST 模式下的数据到目标数据库
CSL> alter cpt_dm8 cp "sch.name='TEST'"
验证迁移结果
在目的数据库查看 TEST 下是否存在对应的表、数据
迁移可能遇到的问题:
- 目标数据库中不存在 TEST 模式,迁移会失败,需要提前手动创建模式名
- 内存太小导致迁移失败
数据同步
在源端启动控制台
./drcsl cpt.xml
连接DMDRS服务
CSL> connect
设置数据库当前最新的日志LSN作为日志解析的起始位置
CSL> alter cpt_dm8 set lsn
启动源DMDRS服务中的CPT模块
CSL> start
将源数据库中 TEST 模式下所有的表添加同步,并在同步之前把源端表的全量数据装载到目标数据库
CSL> alter cpt_dm8 add table "sch.name='TEST'"
验证同步结果
- 在目的数据库查看 TEST 下是否存在对应的表、数据
- 在源数据库创建新表,插入新记录,查看是否正常同步至目的数据库