AS400中查找使用MYLIB库自定义命令的程序及原生工具咨询
查找IBM i中引用自定义命令的程序
IBM i(原AS400)自带原生工具可以满足你的需求,以下是几种高效的实现方式:
方法1:使用DSPPGMREF命令生成引用清单
DSPPGMREF是专门用于查询程序引用对象的原生命令,你可以一次性查询MYLIB库中所有命令的引用情况:
DSPPGMREF OBJ(MYLIB/*ALL) OBJTYPE(*CMD) OUTPUT(*OUTFILE) OUTFILE(QTEMP/PGMREF)
执行后,系统会在QTEMP库中生成名为PGMREF的物理文件,你可以通过DSPPFM QTEMP/PGMREF或SQL查询该文件,筛选出引用这些命令的程序对象。
方法2:用SQL查询系统视图直接获取结果
利用IBM i的系统视图可以更灵活地筛选数据,推荐使用QSYS2.OBJECT_REFERENCES视图:
SELECT DISTINCT REFERENCING_OBJECT_LIBRARY AS 程序库, REFERENCING_OBJECT_NAME AS 程序名, REFERENCING_OBJECT_TYPE AS 对象类型 FROM QSYS2.OBJECT_REFERENCES WHERE REFERENCED_OBJECT_LIBRARY = 'MYLIB' AND REFERENCED_OBJECT_TYPE = 'CMD' AND REFERENCING_OBJECT_TYPE IN ('*PGM', '*SRVPGM'); -- 可按需筛选程序类型
执行这条SQL就能直接得到所有引用MYLIB库中命令的程序、服务程序清单。
方法3:交互式查看引用关系(WRKOBJREF)
如果需要交互式操作,可以使用WRKOBJREF命令:
WRKOBJREF OBJ(MYLIB/*ALL) OBJTYPE(*CMD)
进入界面后,按F11切换显示列,再按F4设置筛选条件,就能找出类型为*PGM的引用对象,直观查看哪些程序用到了目标命令。
注意事项
- 以上方法仅能检测静态引用的命令,如果程序是通过
QCMDEXC等方式动态调用命令的,原生工具无法通过静态分析捕获这类引用,这种场景可能需要你结合运行时日志编写工具排查。
内容的提问来源于stack exchange,提问作者Santhosh Appusamy
相关产品推荐
相关产品推荐

