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

 更新时间:2025年05月09日 08:40:57   作者:金融业务专家  
这篇文章主要介绍了Oracle数据库查询执行过的SQL语句方法的相关资料,并提供了按时间、操作类型、用户或权限过滤的示例,同时还强调了查询的注意事项,文中给出了详细的代码示例,需要的朋友可以参考下

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

通过系统视图V$SQL和V$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;
  • ‌关键字段‌:sql_text(SQL文本)、executions(执行次数)、last_active_time(最后执行时间)‌16。

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

通过关联V$SESSION和V$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
  • ‌说明‌: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');
  • ‌注意‌: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按时间或用户维度缩小查询范围,再关联会话信息定位问题SQL‌14。

总结

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

相关文章

  • oracle密码过期的彻底解决方案

    oracle密码过期的彻底解决方案

    这篇文章主要为大家详细介绍了oracle密码过期的彻底解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Oracle存储过程的几种调用方式图文详解

    Oracle存储过程的几种调用方式图文详解

    存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次,下面这篇文章主要给大家介绍了关于Oracle存储过程的几种调用方式,需要的朋友可以参考下
    2023-04-04
  • oracle导入导出表时因一个分号引发的惨案

    oracle导入导出表时因一个分号引发的惨案

    这篇文章主要给大家介绍了关于oracle导入导出表时因一个分号引发的惨案,文中通过示例代码介绍的非常详细,对大家学习或者使用oracle具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 将oracle的create语句更改为alter语句使用

    将oracle的create语句更改为alter语句使用

    本文将详细介绍oracle的create语句更改为alter语句使,需要了解更多的朋友可以参考下
    2012-11-11
  • Oracle 函数大全

    Oracle 函数大全

    小编为大家整理了 Oracle 常用的函数,大家可以参考一下,希望对大家有所帮助。
    2016-05-05
  • Oracle字符串拆分实例详解

    Oracle字符串拆分实例详解

    这篇文章主要给大家介绍了关于Oracle字符串拆分的相关资料,Oracle提供了多种分割函数,其中最常用的是REGEXP_SUBSTR函数,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

    PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

    PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等,这篇文章主要给大家介绍了关于PL/SQL Developer15和Oracle Instant Client安装配置的详细图文教程,需要的朋友可以参考下
    2024-04-04
  • EXISTS关键字在Oracle中的简单使用例子

    EXISTS关键字在Oracle中的简单使用例子

    在Oracle中IN和EXISTS都是用于子查询的比较运算符,但它们的使用方式和操作结果有所不同,这篇文章主要给大家介绍了关于EXISTS关键字在Oracle中的简单使用,需要的朋友可以参考下
    2024-04-04
  • Oracle 中检查临时表空间的方法

    Oracle 中检查临时表空间的方法

    这篇文章主要介绍了Oracle 中检查临时表空间的方法,这是一个非常重要的表空间,如果管理不当,可能会出现问题,让我们看看临时表空间管理的各种查询,本文给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • plsql developer修改sql窗口的大小实现

    plsql developer修改sql窗口的大小实现

    本文主要介绍了plsql developer修改sql窗口的大小实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论