iPaaS文档库 iPaaS文档库
00 概述
01 产品安装指南
02 快速入门指南
03 Studio使用指南
04 iPaaS使用指南
05 高级配置指南
06 接口服务说明
07 升级&数据迁移指南
08 产品集成指南
09 FAQ
10 iPaaS上线指南
运维指南
  • DB数据源注册接口时无法选到存储过程或者表的问题排查与解决
  • 问题现象
  • 问题分析
  • 第一种情况:数据源账户下存储过程数量过多(上万个)
  • 第二种情况:数据源账户仅拥有其他用户存储过程的执行权限,无所属权限
  • 第三种情况:注册操作时,注册接口时无法选择具体的表,表选择下拉框中无数据展示。
  • 解决方案
  • 针对第一种情况:存储过程数量过多导致加载缓慢
  • 针对第二种情况:权限不足导致存储过程不可见
  • 针对第三种情况:达梦数据库在存储对象(如表、模式、用户等)名称时,默认会将其转换为大写形式存储。
  • 总结
  • 遇到存储过程无法选中的问题时,应从两方面排查:

# DB数据源注册接口时无法选到存储过程或者表的问题排查与解决

# 问题现象

在 iPaaS 中配置 Oracle 数据源后,尝试将该数据源下的存储过程或表发布为接口。在注册接口选择存储过程时,页面一直加载,最终无存储过程列表返回,或列表为空,无法选择目标存储过程。

# 问题分析

出现此问题的原因可能有三种,分别对应不同的场景。

# 第一种情况:数据源账户下存储过程数量过多(上万个)

  • 当配置的数据库账户所属的存储过程数量极大(例如超过一万个)时,iPaaS 在加载存储过程列表时需要查询数据库元数据。Oracle 在检索大量对象时会消耗较多时间,导致接口请求超时或前端长时间无响应,用户误以为没有数据。
  • 根本原因:元数据查询 SQL 执行缓慢,加上网络延迟或前端页面等待超时,导致无法正常返回存储过程列表。

# 第二种情况:数据源账户仅拥有其他用户存储过程的执行权限,无所属权限

  • 用户新建了一个数据库账户(例如 NEW_USER),并将需要发布的存储过程(属于另一个用户 OLD_USER)授予了 EXECUTE 权限给 NEW_USER。
  • 在配置 ESB 数据源时,使用的是 NEW_USER 账户。此时,通过数据库工具(如 PL/SQL Developer)查询 NEW_USER 的对象列表,也无法看到该存储过程,因为存储过程的所有者仍是 OLD_USER,而 NEW_USER 仅拥有执行权限,没有查询元数据的权限(例如 ALL_PROCEDURES 视图的查询权限)。
  • ESB 在获取存储过程列表时,通常查询的是当前用户可见的存储过程(即所属对象或通过某些角色可见的对象)。由于权限不足,导致列表为空。

# 第三种情况:注册操作时,注册接口时无法选择具体的表,表选择下拉框中无数据展示。

  • 达梦数据库在存储对象(如表、模式、用户等)名称时,默认会将其转换为大写形式存储。
  • 而在配置数据源时,如果填写的账户、schema、账号等信息使用了小写,会导致系统在查询表信息时无法匹配到实际存储的大写对象名称,从而无法获取到表列表。

# 解决方案

# 针对第一种情况:存储过程数量过多导致加载缓慢

  1. 优化查询性能
    • 在 Oracle 中为 ALL_PROCEDURES、ALL_OBJECTS 等视图的相关字段建立索引(通常需要 DBA 协助)。
  2. 分批处理或升级硬件
    • 如果业务允许,考虑拆分数据源或迁移部分存储过程到其他账户,减少单个账户下的对象数量。
    • 提升数据库服务器性能或网络带宽。

# 针对第二种情况:权限不足导致存储过程不可见

  • 方法一:在新账户下创建同名的存储过程
    在新建的账户(如 NEW_USER)下创建一个同名的存储过程,内容与原存储过程相同(或通过同义词实现)。这样 NEW_USER 就拥有了该存储过程的所属权,ESB 即可在列表中看到。
    -- 在 NEW_USER 下创建同名的存储过程
    CREATE OR REPLACE PROCEDURE new_user.procedure_name AS
    BEGIN
        old_user.procedure_name;  -- 直接调用原存储过程
    END;
    
    -- 或者使用同义词
    CREATE SYNONYM new_user.procedure_name FOR old_user.procedure_name;
    
  • 方法二:授予元数据查询权限 由 DBA 授予 NEW_USER 查询 ALL_PROCEDURES 等视图的权限,并确保其能通过角色或直接授权看到 OLD_USER 的存储过程。
    GRANT SELECT ON ALL_PROCEDURES TO NEW_USER;
    GRANT EXECUTE ON old_user.procedure_name TO NEW_USER; -- 已授予
    

# 针对第三种情况:达梦数据库在存储对象(如表、模式、用户等)名称时,默认会将其转换为大写形式存储。

  • 将数据源配置中的以下信息修改为大写形式:
  • 数据库账号 、schema 名称 、其他相关账号信息

# 总结

# 遇到存储过程无法选中的问题时,应从两方面排查:

  • 性能方面:检查存储过程数量是否过大,导致加载超时。

  • 权限方面:确认数据源账户是否拥有被存储过程的所属权,或是否有足够的元数据查看权限。

  • 数据源配置时,配置信息是否大写。

← 复杂结构的webservice接口注册问题 iPaaS代理调用报错:PKIX path building failed问题 →