DB2中MON_GET_DATABASE函数跨库访问及多库信息获取咨询
DB2 MON_GET_DATABASE 跨数据库访问问题解答
MON_GET_DATABASE 不支持像已弃用的 SNAP_GET_DB 那样的跨数据库访问,它的设计逻辑只能返回当前连接的数据库的监控信息,哪怕传入 -2 参数也无法获取实例下所有可连接数据库的数据。
核心差异
SNAP_GET_DB 属于旧版快照监控框架,本身具备遍历实例下所有可访问数据库的能力;而 MON_GET_DATABASE 是新版监控表函数体系的一部分,其运行依赖当前连接的上下文,无法脱离当前连接去读取其他数据库的监控数据。
替代实现方案
如果需要获取实例下所有数据库的监控信息,可以通过以下方式实现:
- 逐个连接查询:
- 先获取实例内的数据库列表:执行
LIST DATABASES命令,或查询SYSIBMADM.DATABASES视图获取所有数据库名称 - 对每个数据库,执行
CONNECT TO <数据库名>切换连接后,再调用SELECT * FROM TABLE(MON_GET_DATABASE(-2))收集数据
- 先获取实例内的数据库列表:执行
- 结合ADMIN_CMD批量处理:
通过ADMIN_CMD('LIST DATABASES')获取数据库列表,再借助动态SQL循环完成跨库连接与查询操作
注意事项
执行上述操作需要具备实例级权限(如 SYSADM、SYSCTRL 或 SYSMAINT),否则无法访问实例下所有数据库的信息。
内容的提问来源于stack exchange,提问作者hellokk
相关产品推荐
相关产品推荐

