Oracle数据库查询执行过的SQL语句方法汇总
目录
- 1. 直接查询V$SQL或V$SQLAREA视图
- 2. 结合会话信息关联查询
- 3. 按时间或操作类型过滤
- 4. 按用户或权限过滤
- 注意事项
- 总结
1. 直接查询V$SQL或V$SQLAREA视图
通过系统视图V$SQL
和V$SQLAREA
可直接获取共享池中缓存的SQL执行记录,包括历史SQL文本、执行次数、CPU/耗时等统计信息:
-- 查询所有执行过的SQL(按python总耗时降序) 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文本)、ehttp://www.devze.comxecutions
(执行次数)、last_active_time
(最后执行时间)16。
2. 结合会话信息关联查询
通过关联V$SESSION
和V$SQL
视图,可追溯SQL执行者及会话信息:
-- 查询SQL执行者及会话详情 SELECT s.sid, s.username, s.osuser, s.MACandroidhine, 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. 按时间或操作类型过滤
针对特定时间段或操作类型(如DELETE
、UPDATE
)进行精确筛选:
-- 查询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');
- &zwn编程客栈j;注意:
v$sqlarea
视图包含完整的SQL文本,但需注意LIKE
模糊匹配的性能影响47。
4. 按用户或权限过滤
通过parsing_user_id
或parsing_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');
- 依赖权限:需具备
DBA_USERS
和V$SQL
的查询权限57。
注意事项
- 数据保留周期:
V$SQL
和V$SQLAREA
存储的是共享池中的缓存SQL,若实例重启或SQL被淘汰,历史记录可能丢失16。 - 权限要求:查询系统视图需授予
SELECT_CATALOG_ROLE
或直接授权(如GRANT SELECT ON v_$sql TO user;
)78。 - 性能影响:高频查询系统视图可能对数据库性能产生轻微影响,建议在非高峰时段操作23。
以上方法可综合使用,建议优先通过V$SQL
按时间或用户维度缩小查询范围,再关联会话信息定位问题SQL14。
总结
到此这篇关于oracle数据库查询执行过的SQL语句方法的文章就介绍到这了,更多相关Oracle查询执行过SQL语句内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论