首批通过分布式安全可靠测评,为关键业务系统打造
SQL 为 set NCHARACTER_SET_CONNECTION='UTF16' 日志报错 -5044 的原因和解决方法
更新时间:2026-05-18 09:11
问题现象
OCP 界面发现报错次数达到 36w 次的 SQL 语句,SQL 文本内容为 set NCHARACTER_SET_CONNECTION='UTF16',同时 OBServer 日志中打印 ORA-00600: internal error code, arguments: -5044 报错信息,之后检查发现是 Oracle 模式下 OceanBase JDBC V2.4.7.1 版本的驱动自动发出的 SQL。
OCP 界面报错信息:

OBServer 日志报错信息:
通过查询性能视图
GV$OB_SQL_AUDIT获取 TRACE_ID。-- V3.x 版本视图为 GV$SQL_AUDIT,V4.x 版本视图为 GV$OB_SQL_AUDIT。 obclient> SELECT /*+ PARALLEL (8) */ * FROM GV$OB_SQL_AUDIT WHERE SQL_ID='XXXXXXXXXXXX' AND ROWNUM < 100;通过获取的 TRACE_ID 过滤 OBServer 日志信息。
## -- 此处 $TRACE_ID 为 xxxxx-xxxxx-xxxxx-xxxxx。 grep 'xxxxx-xxxxx-xxxxx-xxxxx' observer.log输出结果如下:
[2024-03-18 15:13:40.568318] WDIAG [SQL.SESSION] find_sys_var_id_by_name (ob_system_variable_factory.cpp:874) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=7][errcode=-4182] sys var name not found(sys_var_name=ncharacter_set_connection, lower_idx=92, ObSysVarFactory::ALL_SYS_VARS_COUNT=234, lbt()="0x10dc8800 0xe6dd864 0xafaf5d4 0xc8605d4 0xc86738c 0xc081698 0xa377a2c 0xaf05554 0xadffba8 0xadfd9ac 0xaf9744c 0xad5b594 0xad55a34 0xad4d14c 0xad490f8 0x87a7820 0x11049914 0xfffc590587ac 0xfffc58ee60fc") [2024-03-18 15:13:40.568355] WDIAG [SQL.SESSION] inner_get_sys_var (ob_basic_session_info.cpp:1196) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=20][errcode=-5044] fail to find sys var id by name(ret=-5044, sys_var_name=ncharacter_set_connection, lbt()="0x10dc8800 0xc8607a4 0xc8606a8 0xc86738c 0xc081698 0xa377a2c 0xaf05554 0xadffba8 0xadfd9ac 0xaf9744c 0xad5b594 0xad55a34 0xad4d14c 0xad490f8 0x87a7820 0x11049914 0xfffc590587ac 0xfffc58ee60fc") [2024-03-18 15:13:40.568366] WDIAG [SQL.SESSION] get_sys_variable_by_name (ob_basic_session_info.cpp:1917) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=10][errcode=-5044] fail to inner get sys var(var=ncharacter_set_connection, ret=-5044) [2024-03-18 15:13:40.569018] WDIAG execute (ob_variable_set_executor.cpp:181) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=50][errcode=-5044] ORA-00600: internal error code, arguments: -5044, Unknown system variable 'ncharacter_set_connection' [2024-03-18 15:13:40.569078] WDIAG [SQL] open_cmd (ob_result_set.cpp:98) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=12][errcode=-5044] execute cmd failed(ret=-5044) [2024-03-18 15:13:40.569089] WDIAG [SQL] open (ob_result_set.cpp:157) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=11][errcode=-5044] execute plan failed(ret=-5044) [2024-03-18 15:13:40.569316] WDIAG [SERVER] response_result (ob_sync_cmd_driver.cpp:145) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=224][errcode=-5044] close result set fail(cret=-5044) [2024-03-18 15:13:40.569377] WDIAG [SERVER] after_func (ob_query_retry_ctrl.cpp:932) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=58][errcode=-5044] [RETRY] check if need retry(v={force_local_retry:false, stmt_retry_times:0, local_retry_times:0, err_:-5044, err_:"OB_ERR_SYS_VARIABLE_UNKNOWN", retry_type:0, client_ret:-5044}, need_retry=false, THIS_WORKER.can_retry()=true, v.ctx_.multi_stmt_item_={is_part_of_multi_stmt:false, seq_num:0, sql:"set NCHARACTER_SET_CONNECTION = 'UTF16'", batched_queries:NULL, is_ps_mode:false, ab_cnt:0}) [2024-03-18 15:13:40.569394] WDIAG [SERVER] response_result (ob_sync_cmd_driver.cpp:151) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=16][errcode=-5044] result set open failed, check if need retry(ret=-5044, cli_ret=-5044, retry_ctrl_.need_retry()=0) [2024-03-18 15:13:40.569458] INFO [SERVER] send_error_packet (obmp_packet_sender.cpp:315) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=44] sending error packet(ob_error=-5044, client error=600, extra_err_info=NULL, lbt()="0x10dc8800 0x88ce1a0 0x887dc84 0xaf97984 0xad5b594 0xad55a34 0xad4d14c 0xad490f8 0x87a7820 0x11049914 0xfffc590587ac 0xfffc58ee60fc") [2024-03-18 15:13:40.569489] INFO [SERVER] send_error_packet (obmp_packet_sender.cpp:498) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=9] dump txn free route audit_record(value=5, session->get_sessid()=3221502091, session->get_proxy_sessid()=789316784766577871) [2024-03-18 15:13:40.569501] WDIAG [SERVER] do_process (obmp_query.cpp:808) [4034385][T1004_L0_G0][T1004][xxxxx-xxxxx-xxxxx-xxxxx] [lt=10][errcode=-5044] execute query fail(ret=-5044, timeout_timestamp=1710749620567951)使用 $TRACE_ID 过滤 OBServer 日志其中有报错信息
ORA-00600: internal error code, arguments: -5044, Unknown system variable 'ncharacter_set_connection'。
问题原因
Oracle 模式下 OceanBase JDBC 版本的驱动自动发出的 SQL(该字符集兼容命令),执行失败不影响业务逻辑。
问题的风险及影响
无业务影响。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响。
适用版本
OceanBase 数据库 V4.2.1 BP2(oceanbase-4.2.1.2-102010012023120119)之前版本。
解决方法及规避方式
解决方法:
无需干预,不影响业务,统计数据时可忽略该 SQL 的执行失败。
规避方式:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP2(oceanbase-4.2.1.2-102010012023120119)及之后版本。