Oracle SQL Developer连接DB2报-204/42704错误问题咨询
问题根因
你连接的是DB2 for z/OS V12版本(你执行的版本查询返回DSN12015就是该版本的标识),Oracle SQL Developer默认的DB2元数据查询逻辑是针对DB2 LUW(Linux/Unix/Windows)版本设计的:
- DB2 LUW的系统目录表存放在
SYSCAT模式下,Oracle SQL Developer默认查询SYSCAT.SCHEMATA获取schema列表,你测试执行的select * from sysibm.sysversions报错也是同理,SYSIBM.SYSVERSIONS是DB2 LUW专属的系统表 - DB2 for z/OS没有
SYSCAT模式,也不存在LUW专属的系统表,因此触发对象不存在的-204报错,同时schema查看器加载不到数据。
可行解决方案
方案1:修改Oracle SQL Developer的DB2连接配置适配z/OS版本
- 打开Oracle SQL Developer,依次进入
工具->首选项->数据库->第三方JDBC驱动,确认已添加的db2jcc4.jar、db2jcc_license_cisuz.jar配置正常 - 右键你创建的DB2连接,选择
属性,进入高级参数配置区域,新增两条自定义连接属性:- 第一条:名称填
ConfigureDatabaseMetaData,值填true - 第二条:名称填
DatabaseMetaDataUseDb2ForZos,值填true
- 第一条:名称填
- 保存配置后断开现有连接重新连接,测试schema查看器是否能正常加载数据。
方案2:使用适配z/OS DB2的自定义SQL查询元数据
如果方案1不生效,你可以直接执行自定义SQL获取需要的元数据信息:
- 查询所有schema列表:
SELECT SCHEMANAME FROM SYSIBM.SYSSCHEMATA - 查询指定schema下的所有表:
SELECT NAME FROM SYSIBM.SYSTABLES WHERE CREATOR = '替换为你的SCHEMA名称' AND TYPE = 'T' - 查询指定表的字段信息:
SELECT NAME, COLTYPE, LENGTH FROM SYSIBM.SYSCOLUMNS WHERE TBCREATOR = '替换为你的SCHEMA名称' AND TBNAME = '替换为你的表名'
方案3:确认账号系统表查询权限
如果执行上述SYSIBM模式下的查询仍然报-204错误,联系数据库管理员确认你的账号拥有系统目录表的查询权限:
- 需授予的权限:
SYSIBM.SYSSCHEMATA、SYSIBM.SYSTABLES、SYSIBM.SYSCOLUMNS等常用系统目录表的SELECT权限 - 权限测试语句:
SELECT COUNT(*) FROM SYSIBM.SYSSCHEMATA,如果返回权限不足或对象不存在,需要管理员补充授权或确认对象存在性。
内容的提问来源于stack exchange,提问作者Ned
相关产品推荐
相关产品推荐

