Oracle获取SQL执行日志

Oracle获取SQL执行日志

在Oracle中,可以通过查询数据库的系统视图来获取已执行的 SQL 语句的日志,示例如下:

sql 复制代码
-- 获取最近执行的 10 条 SQL 语句
SELECT SQL_ID, SQL_TEXT FROM V$SQL WHERE ROWNUM <= 10; 

-- 通过 SQL_ID 获取完整 SQL 文本
SELECT SQL_TEXT FROM V$SQLTEXT WHERE SQL_ID = 'your_sql_id'; 

-- 根据 SQL 文本查找相关信息
SELECT SQL_TEXT, EXECUTIONS, ELAPSED_TIME FROM V$SQLAREA WHERE SQL_TEXT LIKE '%your_query%'; 

每个视图的作用有所不同,针对每个视图做单独分析。

V$SQL

数据库中当前正在执行或已执行过的 SQL 语句的信息。

可以从中获得 SQL 语句的文本、执行计划、执行次数等信息。

对于了解当前会话中的 SQL 活动非常有用。

sql 复制代码
SELECT SQL_ID, SQL_TEXT, EXECUTIONS, ELAPSED_TIME
FROM V$SQL
WHERE ROWNUM <= 10;

V$SQLTEXT

包含了已编译 SQL 语句的文本。

可以从中获取 SQL 语句的详细文本,用于分析和诊断 SQL 查询。

sql 复制代码
SELECT SQL_ID, SQL_TEXT
FROM V$SQLTEXT
WHERE SQL_ID = 'your_sql_id';

由于内存管理和性能考虑,Oracle 可能只保留一部分 SQL 语句文本,而不是全部文本。

因此,查询可能会返回部分或全部 NULL 值。

V$SQLAREA

包含正在执行或已执行过的 SQL 语句的聚合信息,如执行次数、总执行时间等。

对于查看 SQL 语句在整个数据库中的性能表现很有帮助。

sql 复制代码
SELECT LAST_ACTIVE_TIME,PARSING_SCHEMA_NAME,SQL_TEXT,SQL_FULLTEXT 
FROM v$sql 
WHERE ROWNUM <= 10
and SQL_TEXT like 'SELECT%'
ORDER BY LAST_ACTIVE_TIME DESC

V$SQL_PLAN

包含了已编译的 SQL 语句的执行计划信息。

可以从中获得 SQL 语句的执行计划,以便分析查询优化和性能。

sql 复制代码
SELECT SQL_ID, PLAN_HASH_VALUE, OPERATION, OBJECT_NAME, OPTIONS
FROM V$SQL_PLAN
WHERE SQL_ID = '0kvg9h5gs0000';

常见问题

针对部分常见的问题,尝试提出解决方案

查不到数据

如果刚执行的SQL在视图中查不到,那应该考虑以下几方面问题:

  1. 查询已经从共享池中移除: Oracle 数据库会维护共享池,用于存储已编译的 SQL 语句。如果一个 SQL 语句在执行后很长时间没有被使用,可能会从共享池中移除,从而导致在 V$SQLAREA 中无法找到对应的记录。
  2. 语句文本过长: V$SQLAREA 视图中的 SQL_TEXT 列有一定的长度限制。如果您的查询语句非常长,可能会被截断,从而无法在此视图中完整显示。
  3. 查询的 SQL_ID 不正确: 确保您查询的是正确的 SQL_ID 。在执行查询后,您可以在 Navicat 或其他工具中查看查询的详细信息,其中通常会显示 SQL_ID
  4. 查询未被提交: 如果您在 Navicat 中执行了一个事务,并且查询还没有被提交,那么查询的信息可能还没有被完全记录到 V$SQLAREA 视图中。
  5. 权限问题: 某些情况下,用户可能没有足够的权限来访问 V$SQLAREA 视图,这可能导致查询不到相应的记录。
  6. 数据库版本问题: 不同版本的 Oracle 数据库可能在监视 SQL 语句方面有一些变化,可能会影响查询的显示。

针对这几点问题,在下面做单独的处理。

语句过长被截断

如果SQL语句过长,会被ORACLE进行截断。

如果出现截断,应当获取SQL_ID,再去V$SQLTEXT视图中进行查询

没有权限

管理员执行以下SQL赋予用户权限

sql 复制代码
GRANT SELECT ON V$SQL TO your_user;
相关推荐
尚学教辅学习资料9 小时前
SSM从入门到实战:2.5 SQL映射文件与动态SQL
数据库·sql·动态sql·sql映射
WayneJoon.H9 小时前
CTFSHOW | 其他篇题解(一)web396-web416
sql·安全·web安全·网络安全·php
阿里云大数据AI技术14 小时前
ODPS 十五周年实录 | Data + AI,MaxCompute 下一个15年的新增长引擎
大数据·python·sql
mask哥16 小时前
详解flink SQL基础(四)
java·大数据·数据库·sql·微服务·flink
左灯右行的爱情17 小时前
分库分表系列-基础内容
网络·数据库·oracle
小戈爱学习18 小时前
OpenLDAP 服务搭建与配置全流程指南
服务器·数据库·oracle
携欢21 小时前
Portswigger靶场之 Blind SQL injection with time delays通关秘籍
数据库·sql
怕浪猫1 天前
MySQL 多表查询的应用
sql·mysql
烟雨归来1 天前
升级openssh后ORACLE RAC EM 安装失败处理
数据库·oracle
DONG9132 天前
《三驾马车:MySQL、MongoDB、Redis对比与融合实战》
数据库·redis·sql·mysql·mongodb·database