基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
存储过程游标执行超时导致 ORA-00600 -4067 RPC session not found
更新时间:2026-08-25 02:41
问题现象
在 Oracle 模式租户中,执行业务存储过程时任务中断,并稳定报错:
ORA-00600: internal error code, arguments: -4067, RPC session not found
触发场景:
- 存储过程内部包含 FOR 游标遍历及 INSERT 等操作。
- 通过任务或批处理方式调用存储过程时复现,手动执行单条 SQL 不报错。
例如,以下写法中,FOR 游标对应的 SELECT 会走远程流式 RPC:
BEGIN
FOR X IN (SELECT * FROM schema_name.table) LOOP
...
END LOOP;
COMMIT;
END;
问题原因
该问题为 By Design 行为,并非业务 SQL 语法错误。
存储过程中 FOR 游标在远程执行时采用流式 RPC 拉取数据。当游标处理单批数据耗时过长时,两次 get_more 请求之间的间隔会超过内部参数 _stream_rpc_max_wait_timeout 的默认值(30 秒)。
超时后的链路如下:
- 服务端:等待下一个数据包超时,内部触发 -4208,提前结束远程执行任务并清理 RPC Session。
- 客户端:后续
get_more请求到达时,远端已找不到对应 Session,最终抛出 -4067(RPC session not found)。
因此,根因是游标单批处理时间过长,导致流式 RPC 会话因等待超时被服务端主动断开。
关键信息
报错信息:ORA-00600: internal error code, arguments: -4067, RPC session not found
问题的风险及影响
依赖该存储过程的批处理或定时任务无法完成,导致业务数据处理中断。
适用版本
OBServer 4.x 版本
解决方法
问题触发后,可调大租户级流式 RPC 最大等待超时参数,避免游标单批处理耗时较长导致会话被断开。
ALTER SYSTEM SET _stream_rpc_max_wait_timeout ='2h' TENANT '对应的租户名';
规避方式
无。