首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 Oracle 租户使用 ALTER 语句预编译函数报错 -4016, Internal error 的原因及解决方法
更新时间:2026-05-19 08:21
问题现象
OceanBase 数据库 V4.2.1 版本 Oracle 租户下,使用 ALTER 语句预编译函数报错 -4016, Internal error。
obclient> alter function function_name compile;
ORA-00600: internal error code, arguments: -4016, Internal error
关键日志信息。
[2024-12-20 12:20:18.058932] WDIAG [SQL.RESV] resolve_routine (ob_alter_routine_resolver.cpp:345) [58316][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=5][errcode=-4016] invalid arguments(T_SP_SOURCE == source_tree->type_ || T_SF_SOURCE == source_tree->type_=false)
[2024-12-20 12:20:18.058939] WDIAG [SQL.RESV] resolve_compile_clause (ob_alter_routine_resolver.cpp:217) [58316][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=7][errcode=-4016] fail to exec resolve_routine(crt_routine_arg, routine_info, need_recreate, parse_tree)(ret=-4016)
[2024-12-20 12:20:18.058946] WDIAG [SQL.RESV] resolve_impl (ob_alter_routine_resolver.cpp:157) [58316][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=6][errcode=-4016] fail to exec resolve_compile_clause(crt_routine_arg, routine_info, alter_clause_node)(ret=-4016)
[2024-12-20 12:20:18.058949] WDIAG [SQL.RESV] resolve (ob_alter_routine_resolver.cpp:92) [58316][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=3][errcode=-4016] fail to exec resolve_impl( alter_routine_stmt->get_routine_arg(), *routine_info, *(parse_tree.children_[1]))(ret=-4016)
[2024-12-20 12:20:18.058955] WDIAG [SQL.RESV] stmt_resolver_func (ob_resolver.cpp:168) [58316][T1002_L0_G0][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=6][errcode=-4016] execute stmt_resolver failed(ret=-4016, parse_tree.type_=3914)
触发条件
对自定义聚集函数使用 ALTER 语法。
问题原因
内核缺陷,当前版本下自定义聚集函数不支持使用 ALTER 语句预编译。
问题的风险及影响
函数预编译报错 4016。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法及规避方式
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.4(oceanbase-4.2.4.0-100000252024070621)版本。
不使用 ALTER 语句预编译函数,调用一次函数会自动编译函数。