要满足哪些条件,刚执行过的SQL语句才能从oceanbase.gv$ob_sql_audit 中查到?

【 使用环境 】测试环境
【 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;

用户执行的query是否记录到oceanbase.gv$ob_sql_audit中,还跟哪些因素有关系?
[@论坛小助手]

根因分析场景: SQL 执行出错
根因分析命令: obdiag rca run --scene=sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
日志采集场景: SQL性能问题
日志采集命令: obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

推荐使用 obdiag 工具进行根因分析和日志采集,并且将采集到的日志提供给我们以便确认问题所在。

为了更好地帮助您解决问题,请您提供以下信息:

  1. 您是否开启了 SQL 审计功能?
  2. 您是否有设置特定的审计策略或过滤条件?
  3. 您执行的 SQL 语句的具体内容是什么?
  4. 您执行 SQL 语句时使用的用户名和权限是什么?
  5. 您是否有配置过 SQL 跟踪的相关参数,例如 OB_TRACE_ID
  6. 您是否有在系统中查看到其他与 SQL 相关的错误日志或警告信息?
  7. 您能否提供 oceanbase.gv$ob_sql_audit 表的结构定义?

感谢您的配合,我们将尽快为您解决这个问题。

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

请见回答如上

知道原因了,需要把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

1 个赞