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

Oracle 資料字典視圖全景:靜態三大類、動態 V$ 系列與實用查詢

     編輯:Oracle 資料庫基礎

承接上篇,本文深入列舉靜態資料字典視圖的三大前綴(user_/all_/dba_)代表意義,並詳細介紹動態效能視圖(V$ 系列)的分類與高頻使用場景,附贈 15 條實戰查詢腳本。

靜態資料字典視圖三大類(複習)

前綴說明典型查詢
user_*當前 Schema 擁有的物件SELECT * FROM user_tables;
all_*當前用戶可存取的物件(含其他 Schema)SELECT owner, object_name FROM all_objects WHERE object_type='TABLE';
dba_*全資料庫所有物件(需 DBA 權限)SELECT * FROM dba_data_files;

常用靜態視圖速查

-- 物件清單
SELECT * FROM user_tables;        -- 表
SELECT * FROM user_indexes;       -- 索引
SELECT * FROM user_views;         -- 視圖
SELECT * FROM user_objects;       -- 所有物件(含類型)
SELECT * FROM user_users;         -- 當前用戶資訊

-- 跨 Schema 查詢
SELECT owner, object_name, object_type
FROM all_objects
WHERE owner = 'HR';

-- 表空間與檔案(需 DBA)
SELECT * FROM dba_data_files;
SELECT * FROM dba_free_space;

動態效能視圖(V$ 系列)分類

動態視圖反映**記憶體結構**即時狀態,僅供讀取,資料庫重啟即重置。主要分類:

分類代表視圖用途
Session / ProcessV$SESSION, V$PROCESS連線監控、長跑 SQL、鎖等待
SQL / CursorV$SQLAREA, V$SQL, V$SQL_PLAN執行計畫、共享游標、解析統計
Instance / RACV$INSTANCE, V$ACTIVE_INSTANCE實例狀態、RAC 節點存活
Memory / SGAV$SGA, V$SGASTAT, V$PGASTAT記憶體配置、快取命中率
Lock / EnqueueV$LOCK, V$ENQUEUE_STAT阻塞鏈、死鎖分析
Undo / RedoV$UNDOSTAT, V$LOG, V$ARCHIVED_LOGUndo 保留、Redo 切換、歸檔狀態
Wait EventsV$SESSION_WAIT, V$SYSTEM_EVENT等待事件統計、效能瓶頸
Context / ApplicationV$CONTEXTSession 屬性、命名空間

15 條動態視圖實戰查詢

-- 1. 當前所有 Session 詳細資訊
SELECT sid, serial#, username, machine, program, status, logon_time
FROM v$session WHERE type != 'BACKGROUND';

-- 2. 正在執行的 SQL(含執行計畫)
SELECT s.sid, s.sql_id, sq.sql_text, sq.plan_hash_value
FROM v$session s JOIN v$sql sq ON s.sql_id = sq.sql_id
WHERE s.status = 'ACTIVE' AND s.type != 'BACKGROUND';

-- 3. 找出阻塞鏈
SELECT blocking_session, sid, serial#, wait_class, seconds_in_wait
FROM v$session WHERE blocking_session IS NOT NULL;

-- 4. 系統級等待事件 Top 10
SELECT event, total_waits, time_waited_micro/1000000 sec
FROM v$system_event WHERE wait_class != 'Idle'
ORDER BY time_waited_micro DESC FETCH FIRST 10 ROWS ONLY;

-- 5. Shared Pool 佔用前 20 大 SQL
SELECT sql_id, executions, buffer_gets, sql_text
FROM v$sqlarea ORDER BY buffer_gets DESC FETCH FIRST 20 ROWS ONLY;

-- 6. 歸檔日誌產生趨勢(每小時)
SELECT trunc(first_time,'HH24') hr, count(*) cnt, round(sum(blocks*block_size)/1024/1024,2) mb
FROM v$archived_log WHERE first_time > sysdate-7
GROUP BY trunc(first_time,'HH24') ORDER BY hr;

-- 7. Undo 保留時間檢查
SELECT max(tuned_undoretention) max_retention FROM v$undostat;

-- 8. PGA 記憶體使用狀況
SELECT name, value/1024/1024 mb FROM v$pgastat WHERE name IN ('aggregate PGA target parameter','total PGA allocated');

-- 9. 檢查 RAC 節點狀態
SELECT instance_number, instance_name, host_name, status FROM v$active_instance;

-- 10. 當前 Session 的 Client Info / Module / Action
SELECT sid, module, action, client_info FROM v$session WHERE sid = SYS_CONTEXT('USERENV','SID');

-- 11. 物件鎖定詳情
SELECT o.object_name, l.locked_mode, s.sid, s.serial#, s.username
FROM v$locked_object l
JOIN v$session s ON l.session_id = s.sid
JOIN dba_objects o ON l.object_id = o.object_id;

-- 12. 表空間使用率
SELECT tablespace_name,
       round(used_space*block_size/1024/1024,2) used_mb,
       round(tablespace_size*block_size/1024/1024,2) total_mb,
       round(used_percent,2) pct_used
FROM dba_tablespace_usage_metrics;

-- 13. 參數目前值
SELECT name, value FROM v$parameter WHERE name IN ('sga_target','pga_aggregate_target','processes','open_cursors');

-- 14. 當前資料庫版本與補丁
SELECT * FROM v$version;

-- 15. 彈性查詢:任意 V$ 視圖結構
SELECT * FROM v$fixed_table WHERE name LIKE 'V$%SESSION%';

使用建議

  • 建立專屬監控帳號:GRANT SELECT_CATALOG_ROLE TO monitor_user; 避免給 DBA 角色。
  • 生產環境查詢 V$ 視圖影響極小,但避免在高峰期跑全表掃描的複雜聯結。
  • 善用 V$FIXED_TABLE 發現新視圖:SELECT name FROM v$fixed_table WHERE name LIKE 'V$%WAIT%';

靜態字典管「結構」,動態視圖管「運行」。兩手都要抓、兩手都要硬,才是合格的 Oracle DBA。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved