【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】 4.2.1
【问题描述】用户自行执行的query,从oceanbase.gv$ob_sql_audit 中查不到。但是该租户的该用户账号刚刚执行过的其他很多sql语句都是能查到的(可能是系统后台调用自动执行的吧)。
【复现路径】已经执行过CALL DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(NULL,3,1,‘ALL’);
SELECT SVR_IP, TENANT, DB, USER, ID, STATE, LEVEL, SAMPLE_PERCENTAGE,
RECORD_POLICY FROM GV$OB_PROCESSLIST WHERE ID=CONNECTION_ID();
“SVR_IP”,“TENANT”,“DB”,“USER”,“ID”,“STATE”,“LEVEL”,“SAMPLE_PERCENTAGE”,“RECORD_POLICY”
“10.3.16.38”,tenantz,oceanbase,root,3222128899,ACTIVE,3,100,ALL
也执行过show variables like ‘%ob_enable_show_trace%’
“Variable_name”,“Value”
ob_enable_show_trace,ON
show parameters like ‘%enable_sql_audit%’
显示是True的。
但是像这样的query,尝试执行再多遍,返回结果都是0行:
select USEC_TO_TIME(REQUEST_TIME) AS request_time,query_sql from oceanbase.GV$OB_SQL_AUDIT
where query_sql like ‘select USEC%’
order by request_time desc;
知道原因了,需要把where条件中select 前面也加上%,形成前后都是模糊匹配。
因为有些客户端如dbeaver回在query_sql增加内容:
比如:这个字段内容变成:
/* ApplicationName=DBeaver 24.2.4 - SQLEditor <Script-2.sql> */ select USEC_TO_TIME(REQUEST_TIME) AS request_time,query_sql from oceanbase.GV$OB_SQL_AUDIT
where query_sql like ‘%select USEC%’
order by request_time desc