You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM i环境下CDC Engine TCP监听器启动失败求助(附错误日志)

解决DB2 for i CDC Engine TCP监听器启动失败的问题

根据你描述的错误日志(QUSPTRUS调用失败、系统域对象DMCREG操作无效、CMN_JOBD密钥获取失败),这里是针对性的解决思路:

1. 确认DMCREG对象的域属性

首先检查*CURLIB/DMCREG文件的域类型,这是问题的核心:

DSPOBJD OBJ(*CURLIB/DMCREG) OBJTYPE(*FILE)

在输出中找到Domain字段,如果显示为*SYSTEM,则说明该对象是系统域对象,而CDC的TCP监听器需要用户域对象才能正常调用QUSPTRUS接口。

2. 配置QALWUSRDMN系统值允许用户域对象

IBM i的QALWUSRDMN系统值控制哪些库可以包含用户域对象。先查看当前配置:

DSPSYSVAL SYSVAL(QALWUSRDMN)

如果你的CDC安装库(即*CURLIB指向的库)不在允许列表中,需要添加它:

CHGSYSVAL SYSVAL(QALWUSRDMN) VALUE('你的CDC库名')

如果需要允许所有库(不推荐生产环境),可以用VALUE('*ALL')。修改后无需重启系统,立即生效。

3. 将DMCREG对象转换为用户域

如果DMCREG是系统域对象,需要重新创建为用户域对象:

  1. 先停止DMIRROR子系统避免锁:
    ENDSBS SBS(DMIRROR) OPTION(*IMMED)
    
  2. 删除原系统域文件:
    DLTF FILE(*CURLIB/DMCREG)
    
  3. 重新创建用户域的DMCREG文件。最稳妥的方式是运行CDC的配置工具重新生成该对象,或者用复制对象命令指定域:
    CRTDUPOBJ OBJ(DMCREG) FROMLIB(CDC_INSTALL_LIB) OBJTYPE(*FILE) TOLIB(*CURLIB) NEWOBJ(DMCREG) DOMAIN(*USER)
    
    注意替换CDC_INSTALL_LIB为实际的CDC安装库(如果原对象来自安装介质的话)。

4. 检查CMN_JOBD作业描述的权限

错误中提到的Failure to obtain a key value for key CMN_JOBD(错误码2)通常是权限问题:

  • 先确认CMN_JOBD存在:
    DSPOBJD OBJ(*LIBL/CMN_JOBD) OBJTYPE(*JOBD)
    
  • 检查QSECOFR对该作业描述的权限:
    DSPAUT OBJ(*LIBL/CMN_JOBD) USER(QSECOFR)
    

确保QSECOFR拥有*ALL权限,至少要有*USE和*CHANGE权限。如果权限不足,用以下命令添加:

GRTOBJAUT OBJ(*LIBL/CMN_JOBD) OBJTYPE(*JOBD) USER(QSECOFR) AUT(*ALL)

5. 重新启动CDC服务

完成上述步骤后,重新启动DMIRROR子系统并尝试启动TCP监听器:

STRSBS SBS(DMIRROR)
STRDMTCP

此时应该能正常初始化TCP监听器了。

内容的提问来源于stack exchange,提问作者Gudsok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:58:15