| 類型 | 特性 | 典型範例 |
| 靜態資料字典 | 使用者存取時不會改變,記錄結構性中繼資料 | 使用者建立的表、視圖定義 |
| 動態資料字典 | 隨資料庫運行持續更新,反映效能與運行狀態 | 當前鎖定物件、Session 狀態、實例資訊 |
靜態資料字典視圖三大權限前綴
靜態字典視圖分為三類,前綴決定可見範圍與所需權限:
1. USER_* —— 當前使用者擁有的物件
- 僅顯示當前綱要下的物件
- 無需特殊權限,一般使用者即可查詢
- 常用視圖:
USER_TABLES、USER_INDEXES、USER_VIEWS、USER_OBJECTS、USER_USERS
2. ALL_* —— 當前使用者可存取的物件
- 包含擁有權 + 被授權存取的物件
- 不需擁有物件,僅需有權限即可見
- 常用視圖:
ALL_TABLES、ALL_OBJECTS(含 OWNER 欄位)
3. DBA_* —— 全資料庫所有物件(需 DBA 權限)
- 需具備
DBA 角色或 SELECT ANY DICTIONARY 權限
- 涵蓋所有綱要、所有物件
- 常用視圖:
DBA_DATA_FILES、DBA_TABLES、DBA_USERS、DBA_SEGMENTS
常用查詢範例速查表
查看所有字典視圖清單
SELECT * FROM DICTIONARY;
當前使用者擁有的表
DESC USER_TABLES;
SELECT TABLE_NAME FROM USER_TABLES;
SELECT * FROM USER_TABLES;
當前使用者擁有的索引
SELECT INDEX_NAME FROM USER_INDEXES;
當前使用者擁有的視圖
SELECT VIEW_NAME FROM USER_VIEWS;
當前使用者所有資料庫物件
SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS;
當前使用者資訊
SELECT * FROM USER_USERS;
可存取的所有物件(跨綱要)
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS;
表空間資訊(需 DBA 權限)
SELECT * FROM DBA_DATA_FILES;
動態效能視圖(V$ 視圖)
動態視圖以 V$ 開頭,由 SYS 維護,僅支援唯讀查詢,反映記憶體、磁碟、Session 等即時狀態:
| 視圖 | 用途 |
| V$ACCESS | 顯示被鎖定的資料庫物件及存取該物件的 Session |
| V$SESSION | 列出當前所有 Session 詳細資訊 |
| V$ACTIVE_INSTANCE | RAC 環境下活躍實例資訊 |
| V$CONTEXT | 當前 Session 屬性(命名空間、屬性值) |
| V$LOCK | 當前鎖定狀況 |
| V$SQL / V$SQLAREA | 共用池中 SQL 執行統計 |
| V$SYSSTAT / V$SESSTAT | 系統/Session 級統計指標 |
| V$PARAMETER | 實例參數當前值 |
動態視圖常用查詢範例
-- 查看當前被鎖定物件
SELECT * FROM V$ACCESS;
-- 查看當前 Session 詳細資訊
SELECT SID, SERIAL#, USERNAME, STATUS, PROGRAM, MACHINE, LOGON_TIME
FROM V$SESSION WHERE USERNAME IS NOT NULL;
-- 查看資源消耗大的 SQL
SELECT SQL_TEXT, EXECUTIONS, DISK_READS, BUFFER_GETS
FROM V$SQLAREA ORDER BY DISK_READS DESC FETCH FIRST 10 ROWS ONLY;
資料字典表 vs 視圖
- 字典基表(如
OBJ$、TAB$、COL$)儲存原始資料,不可直接存取
- 所有操作必須透過視圖進行,Oracle 保證視圖介面穩定
- 視圖定義可透過
DBA_VIEWS 或 ALL_VIEWS 查詢
實務建議
- 優先使用 USER_*:效能最好,無需跨綱要掃描
- 跨綱要查詢用 ALL_*:開發人員排查權限問題時最實用
- DBA_* 僅限 DBA 使用:避免一般帳號持有過高權限
- 動態視圖查詢要節制:頻繁查詢 V$ 視圖會增加 Latch 爭用,影響效能
- 善用 DICTIONARY 視圖:忘記視圖名稱時,
SELECT * FROM DICTIONARY WHERE TABLE_NAME LIKE '%INDEX%' 快速搜尋
總結
Oracle 資料字典是 DBA 與開發人員了解資料庫結構、權限、效能的核心入口。掌握 三大前綴(USER/ALL/DBA)的權限邊界、熟悉常用靜態視圖、善用動態 V$ 視圖排查效能問題,是 Oracle 進階必備技能。
- 上一篇文章: Struts 2 日期格式化輸出完整解決方案:標籤、參數與國際化三種方式
- 下一篇文章: Oracle 資料庫設計規範化核心原則:避免空值與重複欄位的實戰策略
Copyright ©
程式碼之家 All Rights Reserved