连表update,特定条件,出现 invalid numeric

【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.1-8BP
【问题描述】
执行以下语句,出现 invalid numeric。
当时间选择其他日期都正常。 再筛选该日期其他id数据, 仅 <603396061 的数据出现异常。其他都正常执行。 即使将 t2表 id <603396061 的数据删除, 执行sql也报错

update 

sale_trade_detail t2
left JOIN prod_sync_p_ebay t3
ON t2.item_id = t3.item_id
AND t2.store_acct_id = t3.store_acct_id
SET t2.plat_code = ‘xxxx’
WHERE
t3.country NOT IN ( ‘HK’, ‘CN’, ‘TW’ )
AND t2.trade_date BETWEEN ‘2024-11-16’ AND ‘2024-11-17’
AND t2.prod_s_id IS NOT NULL
AND t2.plat_code = ‘ebay’
and t2.id <= 603396061

1、打开调试信息参数
alter system set enable_rich_error_msg=true;
2、语句执行报错 例如:
obclient [test]> select count(*) from t2;
ERROR 1146 (42S02): Table ‘test.t2’ doesn’t exist
[xx.xx.xx.1:2882] [2024-04-13 20:10:20.292087] [YB420BA1CC68-000615A0A8EA5E38-0-0]
3、查看日志信息
[root@x.x.x.1 ~]$ grep “YB420BA1CC68-000615A0A8EA5E38-0-0” rootservice.log
[root@x.x.x.1 ~]$ grep “YB420BA1CC68-000615A0A8EA5E38-0-0” observer.log
4、关闭调试信息参数
alter system set enable_rich_error_msg=false;

1 个赞

set ob_enable_show_trace=1;
执行sql
select last_trace_id();
然后去observer.log grep一下trace id看看。

grep 输出信息都为 空

仅在obproxy中找到这个 traceId的信息

这样排查一下
1)设置trace信息
SET ob_enable_show_trace=‘ON’;

2)执行sql。

3)获取上个命令的trace
select last_trace_id();

4)获取trace对应的节点
select query_sql,svr_ip from gv$ob_sql_audit where trace_id=‘第三步获取的trace信息’;

5)取对应的svr_ip节点 过滤日志
grep “第三步获取的trace信息” observer.log*
grep “第三步获取的trace信息” rootservice.log*

6)提供日志信息即可。

不应该在日志信息查询不到呀 你按照我上面发的在排查一下

我做了标记为 test999,然后去查询GV$OB_SQL_AUDIT
然后去查询机器日志
结果显示如下

只能在obproxy日志中找到这个traceId的记录

整个请求都没到 observer。 直接在obproxy就被拦截了

你把obproxy_error的错误信息 发全一点 看看

obproxy的版本信息 提供一下

4.2.1.0-11

集群 sysLogLevel 我设定的WARN级别。

WDIAG级别日志太多了···

更新的数据类型或者长度 是否匹配 表结构能发一下么?

能临时改一下么?这样方便排查问题 查找到日志 上传一下日志

改WDIAG后, observer筛选日志
wwww.log (15.7 KB)

rootserver 无日志

好的 先分析一下日志

完整的日志observer.log日志还有么?如果没有保存,把日志级别改成WDIAG 把trace_id发一下 重新发一个完整observer.log日志 排查过程发现调用栈日志不够完整