Oracle查询执行过的SQL语句方法汇总

1. 直接查询V$SQLV$SQLAREA视图

通过系统视图V$SQLV$SQLAREA可直接获取共享池中缓存的SQL执行记录,包括历史SQL文本、执行次数、CPU/耗时等统计信息:


sqlCopy Code

-- 查询所有执行过的SQL(按总耗时降序) SELECT sql_id, sql_text, executions, ROUND(elapsed_time/1000, 2) AS total_elapsed_time_s, ROUND(cpu_time/1000, 2) AS cpu_time_s, first_load_time, last_active_time FROM v$sql ORDER BY elapsed_time DESC;

  • 关键字段‌:sql_text(SQL文本)、executions(执行次数)、last_active_time(最后执行时间)‌16。

2. 结合会话信息关联查询

通过关联V$SESSIONV$SQL视图,可追溯SQL执行者及会话信息:


sqlCopy Code

-- 查询SQL执行者及会话详情 SELECT s.sid, s.username, s.osuser, s.machine, q.sql_text, q.executions, q.last_load_time FROM v$session s JOIN v$sql q ON s.sql_id = q.sql_id WHERE q.last_active_time > SYSDATE - 7; -- 近7天执行的SQL

  • 说明‌:v$session提供会话的登录用户、操作系统信息,v$sql关联具体SQL内容‌23。

3. 按时间或操作类型过滤

针对特定时间段或操作类型(如DELETEUPDATE)进行精确筛选:


sqlCopy Code

-- 查询2025年3月1日后的DELETE操作记录 SELECT sql_text, parsing_user_id, last_active_time FROM v$sqlarea WHERE sql_text LIKE 'DELETE%' AND last_active_time >= TO_DATE('2025-03-01', 'YYYY-MM-DD');

  • 注意‌:v$sqlarea视图包含完整的SQL文本,但需注意LIKE模糊匹配的性能影响‌47。

4. 按用户或权限过滤

通过parsing_user_idparsing_schema_name字段追踪特定用户的SQL执行记录:


sqlCopy Code

-- 查询用户SCOTT执行过的SQL SELECT sql_text, executions, last_active_time FROM v$sql WHERE parsing_user_id = (SELECT user_id FROM dba_users WHERE username = 'SCOTT');

  • 依赖权限‌:需具备DBA_USERSV$SQL的查询权限‌57。

注意事项

  1. 数据保留周期‌:V$SQLV$SQLAREA存储的是共享池中的缓存SQL,若实例重启或SQL被淘汰,历史记录可能丢失‌16。
  2. 权限要求‌:查询系统视图需授予SELECT_CATALOG_ROLE或直接授权(如GRANT SELECT ON v_$sql TO user;)‌78。
  3. 性能影响‌:高频查询系统视图可能对数据库性能产生轻微影响,建议在非高峰时段操作‌23。

以上方法可综合使用,建议优先通过V$SQL按时间或用户维度缩小查询范围,再关联会话信息定位问题SQL‌14。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金融业务专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值