DB2中使用SYSPROC.ADMIN_GET_MSGS遭遇SQL0443N错误如何处理?
DB2 10.1.3中ADMIN_GET_MSGS调用返回SQL0443N(空诊断文本)的问题
问题描述
- 执行DB2导入/导出操作时,遵循IBM文档步骤:
- 调用
call sysproc.admin_cmd(import...messages on server...) - 使用返回的
msg_retrival字段中的SQL语句检索消息:SELECT SQLCODE, MSG FROM TABLE (SYSPROC.ADMIN_GET_MSGS ('xxxx_xxxx_user')) AS MSG - 最后用
msg_removal清除消息
- 调用
- 执行第二步SQL时抛出错误:
SQL0443N Routine "SYSPROC.ADMIN_GET_MSGS"(specific name "ADMIN_GET_MSGS") has returned an error SQLSTATE with diagnostic text "". - 环境与测试情况:
- DB2版本:10.1.3
- 测试场景:不同Java应用、服务器CLP;使用DB2应用用户、实例用户、fence用户均报错
- 特殊现象:仅当导入/导出命令中指定错误表名时,该查询语句才可正常运行
- 已在6个不同服务器环境测试,结果一致
可能原因及解决方案
1. 版本已知缺陷
DB2 10.1 Fix Pack 3版本中,ADMIN_GET_MSGS例程存在逻辑漏洞:当启用messages on server但未指定错误表时,例程无法正确定位服务器端存储的消息元数据,导致返回空诊断文本的SQL0443N错误。
2. 临时规避方案
既然指定错误表后可正常运行,可在admin_cmd的导入/导出命令中强制添加错误表参数,即使不需要捕获错误记录:
call sysproc.admin_cmd('import from ... of del messages on server error table your_schema.your_error_table')
注:错误表无需预先创建,DB2会自动生成;若不需要保留,后续可手动删除该表。
3. 长期解决方案
升级DB2版本至10.1的更高Fix Pack(如FP6及以上),或直接升级至DB2 10.5/11.1版本——IBM在后续版本中修复了该例程的逻辑漏洞,完善了无错误表场景下的消息检索处理。
4. 额外排查点
- 确认执行
ADMIN_GET_MSGS的用户拥有该例程的执行权限,可通过以下SQL验证:SELECT EXECUTE FROM SYSCAT.ROUTINEAUTH WHERE ROUTINENAME = 'ADMIN_GET_MSGS' AND ROUTINESCHEMA = 'SYSPROC' - 检查DB2实例的fenced进程状态:确保db2fmp进程正常运行,异常的fenced进程可能导致外部例程执行失败,可通过
db2fm -i <instance_name> status查看状态。
内容的提问来源于stack exchange,提问作者Moron9645
相关产品推荐
相关产品推荐

