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

Oracle 資料字典全景指南:靜態視圖三大前綴與動態效能視圖實戰查詢

     編輯:Oracle 資料庫基礎

資料字典是 Oracle 的「元資料中樞」,記錄物件定義、空間分配、安全權限、運行統計等核心資訊。善用資料字典,能讓開發與管理事半功倍。本文系統梳理靜態資料字典(USER_/ALL_/DBA_ 三大前綴)與動態效能視圖(V$ 視圖),並提供高頻查詢範例。

一、靜態資料字典:三大前綴權限模型

所有字典表由 SYS 擁有,儲於 SYSTEM 表空間。表不可直接查詢,需透過視圖。

前綴可見範圍前提條件典型使用者
USER_*當前使用者擁有的物件無特殊權限一般開發人員
ALL_*當前使用者有權限存取的物件需被授予物件權限跨 Schema 開發
DBA_*資料庫所有物件需 DBA 權限或 SELECT ANY DICTIONARYDBA、審計

三者資料結構一致,僅可見範圍不同。DBA_* 視圖對非 DBA 不可見。

高頻 USER_* 視圖速查

視圖用途範例查詢
USER_USERS當前使用者屬性SELECT * FROM user_users;
USER_TABLES擁有的表資訊SELECT table_name, tablespace_name FROM user_tables;
USER_OBJECTS所有物件(表、視圖、程序、索引、序列...)SELECT object_type, status FROM user_objects WHERE object_name = UPPER('package1');
USER_TAB_PRIVS表權限授予情況SELECT * FROM user_tab_privs WHERE table_name = UPPER('table1');
USER_TAB_COLUMNS欄位定義SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = UPPER('EMP');
USER_CONSTRAINTS約束條件SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name = UPPER('EMP');
USER_INDEXES索引定義SELECT index_name, uniqueness FROM user_indexes WHERE table_name = UPPER('EMP');
USER_SEQUENCES序列屬性SELECT * FROM user_sequences;
USER_SOURCEPL/SQL 原始碼SELECT text FROM user_source WHERE name = UPPER('MY_PROC') ORDER BY line;
USER_DEPENDENCIES物件相依關係SELECT * FROM user_dependencies WHERE name = UPPER('MY_VIEW');

關鍵提醒:字典視圖中物件名均為大寫,查詢時務必用 UPPER() 或直接寫大寫字串。

二、動態效能視圖:V$ 視圖即時洞察

由系統維護,反映記憶體、進程、鎖、I/O 等運行時狀態,唯讀、持續更新,前綴 V$(或 GV$ RAC 環境)。

核心 V$ 視圖速查

視圖用途關鍵欄位
V$SESSION當前 Session 詳細資訊SID, SERIAL#, USERNAME, MACHINE, SQL_ID, STATUS, LOGON_TIME
V$SQL / V$SQLAREA共用池 SQL 文本與統計SQL_ID, SQL_TEXT, EXECUTIONS, BUFFER_GETS, DISK_READS, ELAPSED_TIME
V$PROCESS背景/前台進程對應PID, SPID, PNAME, PROGRAM
V$INSTANCE執行個體狀態INSTANCE_NAME, STATUS, STARTUP_TIME, HOST_NAME
V$DATABASE資料庫屬性NAME, LOG_MODE, OPEN_MODE, DBID, CREATED
V$SGA / V$SGASTATSGA 記憶體分配細目POOL, NAME, BYTES
V$SYSTEM_EVENT / V$SESSION_EVENT等待事件統計EVENT, TOTAL_WAITS, TIME_WAITED_MICRO
V$ACTIVE_SESSION_HISTORY活躍 Session 採樣(ASH)SESSION_ID, SQL_ID, EVENT, WAIT_CLASS, SAMPLE_TIME
V$ACCESS鎖定物件與存取 SessionSID, OWNER, OBJECT, TYPE
V$CONTEXTSession 上下文屬性NAMESPACE, ATTRIBUTE, VALUE

實戰查詢範例

-- 1. 找出耗資源 Top 10 SQL
SELECT sql_id, sql_text, executions, buffer_gets, elapsed_time/1e6 sec
FROM v$sqlarea
ORDER BY buffer_gets DESC
FETCH FIRST 10 ROWS ONLY;

-- 2. 當前阻塞會話
SELECT s.sid, s.serial#, s.username, s.machine, s.sql_id,
       w.event, w.seconds_in_wait
FROM v$session s, v$session_wait w
WHERE s.sid = w.sid
  AND s.blocking_session IS NOT NULL;

-- 3. SGA 元件大小
SELECT pool, name, round(bytes/1024/1024,2) mb
FROM v$sgastat
WHERE pool IS NOT NULL
ORDER BY pool, bytes DESC;

三、資料字典存取最佳實踐

  • 權限最小化:開發帳號僅授 SELECT_CATALOG_ROLE 或特定 USER_* 視圖
  • 善用同義詞:建立公用同義詞簡化跨 Schema 查詢
  • 避免全表掃描字典:DBA_OBJECTS 等大視圖需加過濾條件
  • 定期匯出字典快照:支援變更追蹤、合規稽核
  • 工具輔助:SQL Developer、TOAD、DBeaver 內建字典瀏覽器

結語

靜態字典解決「結構是什麼」,動態視圖解決「運行怎麼樣」。DBA 腦中應建立字典視圖地圖:遇問題先想哪個視圖有答案,再寫 SQL 驗證。熟練 V$SESSION、V$SQL、V$SYSTEM_EVENT 三大核心視圖,已能解決 80% 效能與並發問題。

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