请问OceanBase数据库怎么查trace_id?
方式一:
在SQL执行完成之后,通过select last_trace_id();获取
方式二:
通过查询 GV$OB_SQL_AUDIT 审计视图查询获取,根据query_sql字段过滤查询的关键字,获取对应的trace_id。
obclient [test]> select SVR_IP,SVR_PORT,TRACE_ID,,TENANT_NAME,SQL_ID,QUERY_SQL
-> from oceanbase.gv$ob_sql_audit
-> where query_sql like "%right(tb.a_time,5)%"\G;
*************************** 1. row ***************************
SVR_IP: 172.24.255.17
SVR_PORT: 2882
TRACE_ID: YB42AC18FF11-0005FE3D398CC982-0-0
TENANT_NAME: obtest
SQL_ID: D8F4A48653895C3AAACE903CA04EDD21
QUERY_SQL: insert into t2 select a_id, a_name,cast(concat('2022-10-10 ', right(tb.a_time,5), ':00') as datetime) from t1 tb
1 rows in set (0.224 sec)
方式三:
开启enable_rich_error_msg参数,不过这个是集群级别的,需要在sys租户下开启
开启方式:
alter system set enable_rich_error_msg=true;
在开启之后,如果SQL执行报错,会自动返回trace_id和ip信息
obclient [test]> insert into t2 select a_id, a_name,cast(concat('2022-10-10 ', right(tb.a_time,5), ':00') as datetime) from t1 tb;
ERROR 1292 (22007): Incorrect value
[172.24.255.17:2882] [2023-08-03 20:42:36.361996] [YB42AC18FF11-0005FE3D398CC986-0-0]
以上三种方式,我们一般会采用第二种方式,方式一只能获取到trace_id,但是获取不到OBServer的IP信息,因为OceanBase为分布式数据库,一套集群一般会有多个OBServer节点,如果没有IP信息,我们很难得知这条SQL是在哪个OBServer节点上执行的。所以是需要这个IP信息方便我们拿着trace_id直接去机器上过滤日志。方式三需要开启集群级别的参数,有的租户并不一定需要这个,并且展示信息相对较少。
——参考链接。
OceanBase数据库的trace_id可以通过OCP(OceanBase Cloud Platform)进行查询。具体步骤如下:
SELECT last_trace_id() FROM DUAL;
可以看这个https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507871 —此回答来自钉群“[社区]技术答疑群OceanBase”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。