注册
DRS配置建议与常见问题
专栏/技术分享/ 文章详情 /

DRS配置建议与常见问题

小肥兔￿ 2026/07/23 91 0 0
摘要

一、环境配置

现场分别部署一套3节点DSC+DW集群和一套主备集群,需通过DRS将DSC+DW中数据迁移数据至主备集群中。
image.png

二、DRS部署

详细部署过程可参考《DMDRS搭建手册》。本环境由于业务表较多且不需要全部同步,为避免归档量增加过大,仅开启同步表的逻辑附加日志,方式如下:

1.修改参数

   设置逻辑日志开关(RLOG_APPEND_LOGIC=2 支持完整逻辑日志记录)
SP_SET_PARA_VALUE(1, 'RLOG_APPEND_LOGIC', 2);
仅记录指定表的物理逻辑日志(RLOG_IGNORE_TABLE_SET=0)
SP_SET_PARA_VALUE(1, 'RLOG_IGNORE_TABLE_SET', 0);

2.对同步表开启表级附加日志

alter  table 用户名.表名 add logic log;
若需迁移表较多,则可通过如下sql进行拼写:
select 'alter  table "'||OWNER||'"."'||TABLE_NAME||'" add logic log;'  from  dba_tables where owner='用户名';

注意:建议在业务空闲期开启表级附加日志,否则容易锁表失败,报错”锁超时”

三、参数配置

为提升数据同步及装载性能,现场验证后参数配置如下;

1.源端(DSC集群非控制节点)

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>15515</mgr_port>   
        <siteid>55</siteid>
        <lang>ch-utf8</lang>
        <mem_size>32</mem_size>
    </base>
    <cpt>
        <name>DRS_CPT_XX</name>
        <ddl_mask>OBJ:OP:ddl_rec</ddl_mask>

        <!--提升源端解析速度-->
        <parse_thr>8</parse_thr>               #日志解析的线程数
        <parse_queue>2000</parse_queue>         #日志解析队列的大小,占用内存大小=parse_queue * 2MB
        <sel_ddl_convert>1</sel_ddl_convert>    #启用查询建表操作同步转换功能,查询建表操作同步时不再缓存同步操作数据,查询建表会转换为同步建表操作和对该表的数据插入操作。
        <calc_md5_col_num>0</calc_md5_col_num>   #源端ORACLE或DM,建议设置为0
        <send_queue>2000</send_queue>            #日志发送队列的大小
        <log_buf_size>4096</log_buf_size>        #读取日志缓冲区大小,如果缓冲区较小,可能存在等待读日志的情况
        <op_dml_size>4096</op_dml_size>          #CPT模块DML操作的初始heap大小
        <!--end-->
        
        <login>
            <dbtype>dm8</dbtype>
            <server>dm_dsc_XX_drs</server>    #源端DSC时必须配置为服务名,否则装载报错“ DRS-5279 DSC存在节点故障,不支持当前操作”
            <user>DRS</user>
            <pwd>Drs_XXXXXXXXX</pwd>
        <port>5236</port>
        <local>dm_dsc_XX_drs</local>    #源端DSC时必须配置,服务名,否则源端启动报错未配置local
        </login>
        <send>

            <ip>xx.xx.XXX.XX</ip>
            <port>15516</port>
            <target_name>DRS_EXEC_XXX</target_name>
            <map>
                <item>DRS.*==DRS.*</item>
            </map>
        </send>
        <rac>
            <nodes>3</nodes>
            <rac_type>ASM</rac_type>
            <login>
                <server>xx.xx.XXX.X</server>
                <port>31276</port>
                <user>ASMSYS</user>
                <pwd>XXXXXX</pwd>
            </login>
            <arch_dir>
                <item>0#+DMARCH/LOCAL_ARCH_DSC_XX_0</item>
                <item>1#+DMARCH/LOCAL_ARCH_DSC_XX_1</item>
                <item>2#+DMARCH/LOCAL_ARCH_DSC_XX_2</item>
            </arch_dir>
        </rac>
            <load>
                <enable>1</enable>
                <nets>2</nets>
            </load>
    </cpt>
</drs>

2.目的端(主备集群中的主节点)

<?xml version="1.0" encoding="GB18030"?>
<drs>
    <base>
        <mgr_port>15516</mgr_port>
        <siteid>56</siteid>
        <lang>ch-utf8</lang>
    </base>
    <exec>
        <name>DRS_EXEC_XX</name>
        <login>
            <dbtype>dm8</dbtype>
            <server>xx.xx.XX.XX</server>
            <user>DRS</user>
            <pwd>Drs_XXXXXXXXX</pwd>
            <port>5236</port>
        </login>
        <group>
            <item>
                <id>0</id>
                <error_policy>1</error_policy>
            </item>
        </group>
        <char_code>GB18030</char_code>
        <ckpt_limit>204800</ckpt_limit>
    </exec>
</drs>

四、常用命令

1.在源端查看正在装载表和装载过程中存在报错的表

若源端按用户进行批量装载表,日志刷新较快无法快速分辨装载异常表,使用如下命令可查看装载表进度及报错信息;

查看正在装载的表:
show load table running
查看装载过程中存在报错的表:
show load table error

2.动态装载数据

由于源端归档量保留时间较短,因此采用动态装载数据方式,先装载结构化数据,再更新LOB数据;执行start cpt命令后,装载完成的表可正常进行增量同步,新装载表完成后,可自动进行增量同步,避免因归档断档导致同步失败;

1)装载指定用户下所有表:
ALTER DRS_CPT_BG ADD TABLE "SCH.NAME='XXX'" DICT|DROP|CREATE|INSERT|INDEX|TABLE|CHECK|GROUPS|16
2)装载指定表的结构化数据:
ALTER DRS_CPT_BG ADD TABLE "SCH.NAME='XXX' AND TAB.NAME='TEST'" DICT|DROP|CREATE|INSERT|INDEX|TABLE|CHECK|GROUPS|16|NOLOB
2)更新指定表的大字段数据:
CP DRS_CPT_BG  "SCH.NAME='PFBCA' AND TAB.NAME='TEST'" UPDATE|LOB|GROUPS|16
3)更新指定列数据不加锁:
由于加锁可能会影响到源端业务,有些重要系统可能不允许装载时上锁,这时可以用NOLOCK掩码不加锁装载数据。但是要注意不加锁装载无法保证源端和目的端数据一致性,后续必须要通过对比来验证数据,将不一致数据修复后,再次校验,确认数据的完整性。
CP DRS_CPT_BG  "SCH.NAME='PFBCA' AND TAB.NAME='TEST'" UPDATE|"C0,C1"|GROUPS|16|NOLOCK
4)不加锁更新指定条件列的数据:
CP DRS_CPT_BG  "SCH.NAME='PFBCA' AND TAB.NAME='TEST'" UPDATE|"C0,C1"|GROUPS|16|NOLOCK|where|"C0=1"

五、问题汇总

1.AGENT在DSC节点上启动卡住

在3节点DSC+DW集群的非控制节点上部署agent服务,启动时agent日志卡住,等待30分钟左右agent服务会自动退出。经分析,oshi老版本默认会调用操作系统udev库扫描所有设备,当映射磁盘很多时,会存在卡住或者性能问题。

解决方法:升级oshi到6.9.3版本,此版本可通过-Doshi.os.linux.allowudev=false jvm参数跳过udev扫描。
启动脚本中需添加如下参数:
-Doshi.os.linux.allowudev=false:禁用 udev 工具。这会强制 OSHI 不使用 udev 来获取硬件信息,从而避免其潜在的性能开销或兼容性问题
-Doshi.os.linux.sysfsonly=true:强制仅从 sysfs 读取数据
-Doshi.util.Util.sleepBetweenTries=50:设置内部重试机制的休眠间隔为 50 毫秒
 将上述参数配置在启动脚本的JAVA_OPT参数后面。经测试现场配置后启动速度非常快。

image.png
注意:由于DMDFM程序测试key仅支持5个AGENT监控,在web页面上多余agent服务无法删除,只能在元数据表AGENT_MAINFRAME中删掉不用的代理。

2.执行端告警"检查点占用空间达上限

报错信息:CHECKPOINT SITEID:55 LSN:1732488043956 USED:51356M LIMIT:51200M SKIP"

如果执行端检查点空间上限确实不高的话,可以登录执行端控制台通过set DRS_EXEC_107_BG ckpt_limit 102400 命令动态调整。但若执行端存在大量报错未处理的话,会影响检查点推进和空间释放,建议先处理执行端报错。

3.DRS源端为DSC+DW的注意事项

1)改drs.xml再重启DRS服务时,需删除drs.xml.bak文件,否则会读取到drs.xml.bak参数配置;
2) DM数据库的辅助表和触发器必须放置在SYSDBA用户下;
3)非全库开启附加日志如果要同步DDL,需要开启辅助表的附加日志(初始化脚本默认带了add logic log);
4)不支持同步DMHS开头的表,强制装载会报错“本次装载没有添加任何同步”;

4.KEY影响性能

   测试DVS的时候发现没有临时KEY对性能影响非常大,并行不生效,对比速度及其缓慢,须放KEY才可以提升速度。目前DRS、DVS、DIS、DFM的KEY不通用,需分开单独申请。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服