基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
merge into 临时表时在计划执行阶段触发报错-4016 问题排查
更新时间:2026-08-18 03:21
问题现象
在执行包含 MERGE INTO 语句的存储过程时,如果满足以下所有条件,SQL 执行会报错 -4016:
- 目标表为临时表。
MERGE INTO语句同时包含INSERT和UPDATE子句。- 源表(
USING子句中的表)为复杂视图。
错误信息示例如下:
ORA-00600: internal error code, arguments: -4016, Internal error
问题原因
该问题是 OceanBase 数据库内核中的一个 Bug。
在 SQL 计划生成阶段,当 MERGE INTO 语句的目标表为临时表且源表为复杂视图时,优化器在解析表别名时出现逻辑错误,导致后续优化阶段依赖的表信息缺失,最终导致 SQL 执行报错。
关键信息
关键日志
当问题发生时,OBServer 日志中会出现 get unexpected null(target_table_scan=NULL)错误记录,可据此快速识别该问题。
问题的风险及影响
- SQL 执行直接失败,返回
-4016错误。 - 可能导致 SQL 结果不正确。
- 存在潜在的 OBServer 进程崩溃(Core Dump)风险。
适用版本
OceanBase 数据库 OBServer 4.x 版本。
解决方法
- 业务侧修改:将存在问题的
MERGE INTO语句拆分为独立的INSERT和UPDATE语句来执行。 - 升级修复:升级 OceanBase 数据库至已修复该问题的版本。
规避方式
在升级到修复版本之前,可通过以下方式规避此问题:
- 将涉及临时表与复杂视图的
MERGE INTO语句,拆分为独立的INSERT和UPDATE语句来执行。