[errcode=-5217] resolve table column expr failed

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】ob版本4.3.5.6\驱动version=2.4.14.1
【问题描述】程序触发insert select from dual操作,报错4002,查询 GV$OB_SQL_AUDIT发现PARAMS_VALUE全是null,但是代码中debuger显示有参数绑定
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您的描述,在OceanBase 4.3.5.6版本的测试环境中,当您尝试执行INSERT SELECT FROM DUAL操作时遇到了错误码为4002的问题,并且通过GV$OB_SQL_AUDIT查看到PARAMS_VALUE均为null,尽管实际上有参数绑定。这可能与SQL执行过程中参数处理有关。

推荐使用obdiag工具来采集相关日志信息以及进行根因分析,以便更深入地了解问题发生的根本原因。

根因分析场景: SQL 执行出错
根因分析命令: obdiag rca run --scene=observer.sql_err --env "{db_connect='-h<your_host> -P<your_port> -u<your_username>@<your_tenant> -p<your_password> -D<your_database>', trace_id='<your_trace_id>'}"
请确保替换<your_host><your_port><your_username><your_tenant><your_password><your_database><your_trace_id>为您实际使用的值。
此命令将帮助我们识别导致SQL执行失败的具体原因。

日志采集场景: SQL性能问题
日志采集命令: obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-h<your_host> -P<your_port> -u<your_username>@<your_tenant> -p<your_password> -D<your_database>', trace_id='<your_trace_id>'}"
同样,请按照上述说明替换环境变量中的相应值。这条命令会收集关于影响SQL性能的相关日志和配置文件。

请您运行上述提供的命令,并将得到的日志压缩包发送给我们,这样可以帮助我们进一步定位问题所在。

为了更好地理解您的情况并提供更精确的帮助,请回答以下几个问题:

  1. 您能够提供具体的SQL语句吗?特别是INSERT SELECT FROM DUAL这部分的操作详情。
  2. 错误发生前是否有进行过任何可能导致数据库状态变化的操作(例如,升级、重启或者更改配置等)?
  3. 在其他版本或设置下该查询是否正常工作?如果是的话,请指出哪些版本/设置是正常的。
  4. 是否可以分享一下您观察到的完整错误消息,包括任何可能相关的堆栈跟踪或其他警告信息?
  5. 对于受影响的应用程序部分,您能提供它的简要架构或流程描述吗?尤其是关于如何构造和发送SQL请求的部分。

谢谢您的配合!

附上敏捷诊断工具 obdiag 使用帮助链接

observer.log.20260731173953202:[2026-07-31 17:36:36.711133] INFO [SHARE.SCHEMA] get_database_id (ob_schema_getter_guard.cpp:1704) [42389][T1026_L0_G0][T1026][YB420A042258-0006579357DABBD4-0-0] [lt=19] REACH SYSLOG RATE LIMIT [frequency]
observer.log.20260731173953202:[2026-07-31 17:36:36.711206] WDIAG [SQL.RESV] resolve_table_column_ref (ob_select_resolver.cpp:6078) [42389][T1026_L0_G0][T1026][YB420A042258-0006579357DABBD4-0-0] [lt=0][errcode=-5217] resolve table column expr failed(ret=-5217, q_name={database_name:"", table_name:“SEQU_D_AC_TRADE_IVT”, column:“NEXTVAL”, dblink_name:"", is_star:false, ref_expr:{item_type:“T_REF_COLUMN”, result_type:{meta:{type:"", collation:“binary”, coercibility:“NUMERIC”}, accuracy:{length:-1, precision:-1, scale:-1}, flag:0}, expr_info:[“IS_COLUMN”, “CNT_COLUMN”], rel_id:[], table_id:18446744073709551615, column_id:18446744073709551615, database_name:"", table_name:"", synonym_name:"", synonym_db_name:"", column_name:"", column_flags:0, is_lob_column:false, is_joined_dup_column:false, is_hidden:false, from_alias_table:false, is_rowkey_column:false, is_unique_key_column:false, is_mul_key_column:false, is_strict_json_column:0, srs_id:18446744073709551615, udt_set_id:0, expr_hash:0}, parents_expr_info:[], parent_aggr_level:-1, access_idents:[{access_name:“SEQU_D_AC_TRADE_IVT”, access_index:-1, type:-1, params:[], udf_info:{udf_name:"", udf_package:"", udf_database:"", dblink_name:"", param_names:[], param_exprs:[], udf_param_num:0, is_udt_udf:false, is_contain_self_param:false, is_udt_udf_inside_pkg:false, is_new_keyword_used:false, is_associative_array_with_param_assign_op:false, flag:0}}, {access_name:“NEXTVAL”, access_index:-1, type:-1, params:[], udf_info:{udf_name:"", udf_package:"", udf_database:"", dblink_name:"", param_names:[], param_exprs:[], udf_param_num:0, is_udt_udf:false, is_contain_self_param:false, is_udt_udf_inside_pkg:false, is_new_keyword_used:false, is_associative_array_with_param_assign_op:false, flag:0}}], current_resolve_level:0, is_access_root:true, catalog_name:""}, lbt()=“0x31627244 0x402d7098 0x31912020 0x318f5c70 0x318f4998 0x318f337c 0x318ef620 0x318c6740 0x316b2a58 0x32492594 0x3248f894 0x33685428 0x3361e584 0x32ec64c8 0x32342668 0x3ee6a3e0 0x3ee5be4c 0x3add435c 0x3add0bc8 0x31873dbc 0x31fa0014 0x31f9ead4 0x31f96f40 0xffff8c5788cc 0xffff8c4ba1ec”)
observer.log.20260731173953202:[2026-07-31 17:36:36.711409] INFO [SHARE.SCHEMA] get_database_id (ob_schema_getter_guard.cpp:1704) [42389][T1026_L0_G0][T1026][YB420A042258-0006579357DABBD4-0-0] [lt=0] database not exist(tenant_id=1026, database_name=C_PORT_CODE)
observer.log.20260731173953202:[2026-07-31 17:36:36.711808] WDIAG [SQL.RESV] check_first_node_name (ob_dml_resolver.cpp:1067) [42389][T1026_L0_G0][T1026][YB420A042258-0006579357DABBD4-0-0] [lt=0][errcode=0] node_name input null(ret=0)
observer.log.20260731173953202:[2026-07-31 17:36:36.711943] WDIAG [SQL.RESV] check_first_node_name (ob_dml_resolver.cpp:1067) [42389][T1026_L0_G0][T1026][YB420A042258-0006579357DABBD4-0-0] [lt=0][errcode=0] node_name input null(ret=0)
observer.log.20260731173953202:[2026-07-31 17:36:36.712244] WDIAG [SQL.RESV] get_table_schema (ob_schema_checker.cpp:1141) [42389][T1026_L0_G0][T1026][YB420A042258-0006579357DABBD4-0-0] [lt=10][errcode=-4002] invalid arguments(table_id=18446744073709551615, ret=-4002, lbt()=“0x31627244 0x3eb0c264 0x316a9264 0x316a98ec 0x32ed7120 0x33687df4 0x3361e584 0x32ec64c8 0x32342668 0x3ee6a3e0 0x3ee5be4c 0x3add435c 0x3add0bc8 0x31873dbc 0x31fa0014 0x31f9ead4 0x31f96f40 0xffff8c5788cc 0xffff8c4ba1ec”)

@论坛小助手

从提供的日志信息中,可以发现错误码 -4002 出现了。根据给定的文档列表,虽然没有直接列出错误码 -4002 的具体解释,但结合上下文以及已知的信息,我们可以做出一些推断。\n* 错误原因:此错误似乎与获取表模式(get_table_schema)时遇到的问题相关,可能是因为请求的表不存在或者参数无效导致的。">*</解决方式:请检查执行的SQL语句中引用的表名称和数据库名称是否正确无误,并确保这些对象在当前租户下确实存在。如果问题依然无法解决,请联系技术支持人员协助排查。

检索到的文档如下:

  1. 4000 ~ 4499
  2. 5000 ~ 5999

驱动version=2.4.14.1 这个是哪个驱动 程序上面怎么写的插入 能提供一下 ob是社区版的么?


artifactId=oceanbase-client
groupId=com.oceanbase
version=2.4.14.1
sql是
INSERT INTO T_D_AC_TRADE_IVT (C_IDEN,C_TD_TYPE,C_DV_TYPE_SUB,C_PORT_CODE,C_SEC_CODE,C_SEC_CODE_TAG,C_DT_CODE,C_SEC_VAR_CODE,C_DC_CODE,C_MKT_CODE,C_DTA_CODE,C_DV_ISSUE_MODE,C_DV_VAR_DUR,C_TD_CHAN_CODE,C_DV_INVEST_CLS,C_SH_ACC_CODE,D_TRADE,N_TD_AMOUNT,N_TD_PRICE,N_INCOME,N_TD_MONEY,N_TD_MONEY_PORT,D_SETT_FIRST,C_CA_CODE_SETT_FIRST,N_SETT_MONEY_FIRST,N_SETT_MONEY_DUE,D_SETT_DUE,C_CA_CODE_SETT_DUE,D_SETT_FACT,C_TD_NO,C_CA_CODE_BAIL,C_CA_CODE_OT,C_DV_STATE,C_DATA_IDF,N_CHECK_STATE,C_CFG_CODE,D_DATE,C_DV_PLAT,C_AUX_SIGN,C_UPDATE_BY,C_UPDATE_TIME,C_CHECK_BY,C_CHECK_TIME,C_IDEN_SUB,N_INTEREST,C_BUSI_TYPE,N_RATE,D_TD_BACK,D_INS_BEGIN,N_SETT_MONEY_FACT,C_SETT_ORG,C_ZLLSH,N_PAWN_MONEY,N_PAWN_AMOUNT,C_SETT_MODE,C_OPEN_ADDR,C_OPEN_ACC_NO,C_OPEN_ACC_NAME,C_DESC,C_ORG_CODE,D_GH_SETT,C_HGLL,C_SSTD_WAY,D_APPLY,C_DAY_YEAR,D_EXCHANGE_RATE,C_DEVALUE_STAGE,D_SETT_ORI,C_FX_ORG,C_FX_CODE,C_DC_CODE_FEE,N_SETT_MONEY_DUE_FACT,C_BZ,C_DV_JSJG,C_PAY_CODE,C_PAY_PAT_CODE,C_BANK_ACCOUNT,C_ORG_ACCOUNT,C_CHARGE_STATUS,C_DV_BCK,N_COMP_AMT,C_TD_TYPE_DETAIL,C_BDQPX,C_CT_UNIT_CODE,C_SSMS_CODE) SELECT SEQU_D_AC_TRADE_IVT.NEXTVAL AS C_IDEN,C_TD_TYPE AS C_TD_TYPE,C_DV_TYPE_SUB AS C_DV_TYPE_SUB,C_PORT_CODE AS C_PORT_CODE,C_SEC_CODE AS C_SEC_CODE,’ ’ AS C_SEC_CODE_TAG,C_DT_CODE AS C_DT_CODE,C_SEC_VAR_CODE AS C_SEC_VAR_CODE,C_DC_CODE AS C_DC_CODE,C_MKT_CODE,C_DTA_CODE AS C_DTA_CODE,C_DV_ISSUE_MODE AS C_DV_ISSUE_MODE,’ ’ AS C_DV_VAR_DUR,C_TD_CHAN_CODE AS C_TD_CHAN_CODE,C_DV_INVEST_CLS AS C_DV_INVEST_CLS,C_SH_ACC_CODE AS C_SH_ACC_CODE,D_TRADE AS D_TRADE,N_TD_AMOUNT AS N_TD_AMOUNT,0 AS N_TD_PRICE,N_INCOME AS N_INCOME,N_TD_MONEY AS N_TD_MONEY,0 AS N_TD_MONEY_PORT,D_SETT_FIRST AS D_SETT_FIRST,C_CA_CODE_SETT_FIRST AS C_CA_CODE_SETT_FIRST,N_SETT_MONEY_FIRST AS N_SETT_MONEY_FIRST,N_TD_MONEY + N_INCOME AS N_SETT_MONEY_DUE,CASE WHEN C_CFG_CODE IN (‘INFI_JY_GH_SH’,‘INFI_JY_XJJGH_SH’,‘INFI_JY_GHQY_SH’,‘INFI_JY_ZQGH_SH’,‘INFI_JY_JJJY_GF’) THEN D_GH_SETT ELSE D_SETT_DUE END AS D_SETT_DUE,C_CA_CODE_SETT_DUE AS C_CA_CODE_SETT_DUE,CASE WHEN C_CFG_CODE IN (‘INFI_JY_GH_SH’,‘INFI_JY_XJJGH_SH’,‘INFI_JY_GHQY_SH’,‘INFI_JY_ZQGH_SH’,‘INFI_JY_JJJY_GF’) THEN D_GH_SETT ELSE D_SETT_FACT END AS D_SETT_FACT,C_TD_NO AS C_TD_NO,’ ’ AS C_CA_CODE_BAIL,’ ’ AS C_CA_CODE_OT,‘C’ AS C_DV_STATE,‘Z’ AS C_DATA_IDF,? AS N_CHECK_STATE,? AS C_CFG_CODE,? AS D_DATE,C_DV_PLAT AS C_DV_PLAT,C_AUX_SIGN AS C_AUX_SIGN,? AS C_UPDATE_BY,? AS C_UPDATE_TIME,? AS C_CHECK_BY,? AS C_CHECK_TIME,C_IDEN_SUB AS C_IDEN_SUB,0 AS N_INTEREST,’ ’ AS C_BUSI_TYPE,0 AS N_RATE,TO_DATE(‘1900-01-01’,‘yyyy-MM-dd’) AS D_TD_BACK,D_TRADE AS D_INS_BEGIN,0 AS N_SETT_MONEY_FACT,C_SETT_ORG AS C_SETT_ORG,’ ’ AS C_ZLLSH,0 AS N_PAWN_MONEY,0 AS N_PAWN_AMOUNT,’ ’ AS C_SETT_MODE,’ ’ AS C_OPEN_ADDR,’ ’ AS C_OPEN_ACC_NO,’ ’ AS C_OPEN_ACC_NAME,’ ’ AS C_DESC,C_ORG_CODE AS C_ORG_CODE, CASE WHEN C_CFG_CODE IN (‘INFI_JY_GH_SH’,‘INFI_JY_XJJGH_SH’,‘INFI_JY_GHQY_SH’,‘INFI_JY_ZQGH_SH’) THEN D_GH_SETT ELSE D_SETT_FACT END AS D_GH_SETT,C_HGLL AS C_HGLL,’ ’ AS C_SSTD_WAY,TO_DATE(‘1900-01-01’,‘yyyy-MM-dd’) AS D_APPLY,’ ’ AS C_DAY_YEAR,’’ AS D_EXCHANGE_RATE,’ ’ AS C_DEVALUE_STAGE,’’ AS D_SETT_ORI,’ ’ AS C_FX_ORG,’ ’ AS C_FX_CODE,’ ’ AS C_DC_CODE_FEE,0 AS N_SETT_MONEY_DUE_FACT,’ ’ AS C_BZ,’ ’ AS C_DV_JSJG,’ ’ AS C_PAY_CODE,’ ’ AS C_PAY_PAT_CODE,’ ’ AS C_BANK_ACCOUNT,’ ’ AS C_ORG_ACCOUNT,’ ’ AS C_CHARGE_STATUS,’ ’ AS C_DV_BCK,0 AS N_COMP_AMT,’ ’ AS C_TD_TYPE_DETAIL,’ ’ AS C_BDQPX,’ ’ AS C_CT_UNIT_CODE,’ ’ AS C_SSMS_CODE FROM ( SELECT ? as C_TD_TYPE,? as C_DV_TYPE_SUB,? as C_PORT_CODE,? as C_SEC_CODE,? as C_DT_CODE ,? as C_SEC_VAR_CODE,? as C_DC_CODE,? as C_MKT_CODE,? as C_DTA_CODE,? as C_DV_ISSUE_MODE ,? as C_DV_VAR_DUR,? as C_TD_CHAN_CODE,? as C_DV_INVEST_CLS,? as C_SH_ACC_CODE,? as D_TRADE ,? as N_TD_AMOUNT,? as N_TD_PRICE,? as C_HGLL,? as N_INCOME,? as N_TD_MONEY ,? as D_SETT_FIRST,? as C_CA_CODE_SETT_FIRST,? as N_SETT_MONEY_FIRST,? as N_SETT_MONEY_DUE,? as D_SETT_DUE ,? as C_CA_CODE_SETT_DUE,? as D_SETT_FACT,? as C_CFG_CODE,? as D_GH_SETT,? as C_TD_NO ,? as C_CA_CODE_BAIL,? as C_CA_CODE_OT,? as C_DV_STATE,? as C_DATA_IDF,? as C_DV_PLAT ,? as C_AUX_SIGN,? as C_SETT_ORG,? as C_ORG_CODE,? as C_IDEN_SUB,? as HGLL FROM dual )

类似的sql不支持rewriteBatchedStatements吗,实际走的是:useArrayBinding和useServerPrepStmts模式

你这个使用的是mysql模式么?是社区版么?

Oracle模式,企业版

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节;针对此类问题,建议你通过以下方式寻求帮助:

  1. 如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;

  2. 如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。