首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 查詢語句審計:利用 V$SQLAREA 追蹤使用者執行歷史

     編輯:Oracle 資料庫基礎

前言

共享池中的 V$SQLAREA 保留最近執行過的 SQL 文本與統計資訊,是事後審計、效能分析、異常 SQL 追蹤的首選視圖。本文提供實用查詢範本。

核心查詢範本

1. 查詢特定使用者最近執行的 SQL (按最後執行時間倒序)


SELECT sql_id, sql_text, executions, elapsed_time/1e6 AS elapsed_sec,
       cpu_time/1e6 AS cpu_sec, buffer_gets, disk_reads, last_active_time
FROM   v$sqlarea
WHERE  parsing_schema_name = UPPER('APP_USER')
ORDER BY last_active_time DESC;

2. 全庫最近活躍 SQL (不限使用者)


SELECT sql_id, parsing_schema_name, sql_text, executions,
       ROUND(elapsed_time/1e6, 3) AS elapsed_sec,
       last_active_time
FROM   v$sqlarea
ORDER BY last_active_time DESC;

3. 關鍵欄位說明

欄位含義
SQL_IDSQL 文本唯一識別碼 (可關聯 V$SQL, V$SQL_PLAN)
SQL_TEXT前 1000 字元 SQL 文本 (完整文本見 V$SQL_FULLTEXT)
PARSING_SCHEMA_NAME解析該 SQL 的 Schema (即登入用戶)
EXECUTIONS執行次數 (游標共用時累計)
ELAPSED_TIME累計經過時間 (微秒)
CPU_TIME累計 CPU 時間 (微秒)
BUFFER_GETS邏輯讀次數 (Consistent Gets)
DISK_READS物理讀次數
LAST_ACTIVE_TIME最後一次執行結束時間

進階:找出高消耗 SQL


-- 總耗時最高 Top 10
SELECT * FROM (
  SELECT sql_id, sql_text, elapsed_time/1e6 AS total_sec, executions,
         ROUND(elapsed_time/NULLIF(executions,0)/1e6, 4) AS avg_sec
  FROM   v$sqlarea
  WHERE  parsing_schema_name != 'SYS'
  ORDER BY elapsed_time DESC
) WHERE ROWNUM <= 10;

-- 平均耗時最高 (可能為未優化的報表查詢)
SELECT * FROM (
  SELECT sql_id, sql_text, ROUND(elapsed_time/NULLIF(executions,0)/1e6, 4) AS avg_sec, executions
  FROM   v$sqlarea
  WHERE  executions > 10
  ORDER BY avg_sec DESC
) WHERE ROWNUM <= 10;

權限需求與注意事項

  • 查詢 V$SQLAREA 需 **SELECT_CATALOG_ROLE** 或 **DBA** 權限 (或具備 SELECT ANY DICTIONARY 系統權限)。
  • 共享池有限,舊 SQL 會被老化淘汰,**無法保留完整歷史**;長期審計請啟用 **AWR (Automatic Workload Repository)** 或 **SQL Plan Baseline** 捕捉。
  • V$SQLAREA 為 **Library Cache** 層面統計,**不包含** 未共用游標 (如字面值不同未啟用 Cursor Sharing) 的每次執行細節。

相關實用視圖

視圖用途
V$SESSION當前會話狀態、正在執行 SQL_ID、等待事件
DBA_ROLE_PRIVS使用者/角色被授予的角色
DBA_SYS_PRIVS系統權限授予清單
DBA_TAB_PRIVS物件權限授予清單
USER_ROLE_PRIVS當前使用者擁有的角色
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved