oracle

关注公众号 jb51net

关闭
首页 > 数据库 > oracle > Oracle查询执行过SQL语句

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

作者:金融业务专家

这篇文章主要介绍了Oracle数据库查询执行过的SQL语句方法的相关资料,并提供了按时间、操作类型、用户或权限过滤的示例,同时还强调了查询的注意事项,文中给出了详细的代码示例,需要的朋友可以参考下

‌1. 直接查询V$SQL或V$SQLAREA视图‌

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

-- 查询所有执行过的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;

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

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

-- 查询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

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

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

-- 查询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');

‌4. 按用户或权限过滤‌

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

-- 查询用户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');

‌注意事项‌

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

总结

到此这篇关于Oracle数据库查询执行过的SQL语句方法的文章就介绍到这了,更多相关Oracle查询执行过SQL语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文