Oracle 資料字典 是資料庫的「說明書」,記錄所有物件定義、空間使用、權限、稽核等中繼資料。本文系統整理資料字典用途、靜態/動態分類、三大視圖前綴(user_/all_/dba_)差異,並提供 10 條高頻查詢模板,供 DBA 與開發人員隨查隨用。
| 類型 | 特性 | 範例 | 存放 |
|---|---|---|---|
| 靜態 | 結構定義,不隨運行頻繁變動 | USER_TABLES, DBA_USERS | SYSTEM 表空間,基礎表 + 視圖 |
| 動態 | 運行時狀態,隨活動即時更新 | V$SESSION, V$SQLAREA | SGA 記憶體結構,僅供讀取 |
| 前綴 | 可見範圍 | 典型使用者 | 權限需求 |
|---|---|---|---|
user_* | 當前 Schema 擁有的物件 | 開發人員、應用帳號 | 無特殊權限 |
all_* | 當前用戶有權限存取的物件(含其他 Schema) | 跨 Schema 查詢的開發 | 需物件權限 |
dba_* | 全資料庫所有物件 | DBA、稽核人員 | SELECT ANY DICTIONARY 或 DBA 角色 |
-- 1. 列出所有資料字典視圖名稱
SELECT * FROM dictionary;
-- 2. 當前用戶擁有的表
SELECT table_name, tablespace_name FROM user_tables;
-- 3. 當前用戶擁有的索引
SELECT index_name, table_name FROM user_indexes;
-- 4. 當前用戶擁有的視圖
SELECT view_name FROM user_views;
-- 5. 當前用戶所有物件(含類型)
SELECT object_name, object_type, created, status FROM user_objects;
-- 6. 當前用戶資訊
SELECT * FROM user_users;
-- 7. 可存取的所有表(跨 Schema)
SELECT owner, table_name FROM all_tables WHERE owner = 'SCOTT';
-- 8. 全庫表空間檔案資訊(需 DBA)
SELECT file_name, tablespace_name, bytes/1024/1024 MB FROM dba_data_files;
-- 9. 當前鎖住的物件與 Session
SELECT * FROM v$locked_object lo
JOIN v$session s ON lo.session_id = s.sid
JOIN dba_objects o ON lo.object_id = o.object_id;
-- 10. 當前活躍 Session 及其 SQL
SELECT s.sid, s.serial#, s.username, s.machine, s.program,
sq.sql_text
FROM v$session s
JOIN v$sqlarea sq ON s.sql_hash_value = sq.hash_value
WHERE s.status = 'ACTIVE';
DESC user_tables 先看欄位定義,再決定 SELECT 哪幾欄。ALL_TAB_COLUMNS 搜尋欄位名稱:SELECT * FROM all_tab_columns WHERE column_name LIKE '%ID%';V$ 系列需 SELECT_CATALOG_ROLE,生產環境建議建立監控帳號授予此角色,避免給 DBA 角色。OBJ$, TAB$)**不可直接查詢**,務必透過視圖。熟練資料字典查詢,等於擁有資料庫的「X 光眼」,無論是結構變更影響分析、權限稽核、效能排查,都能在幾秒鐘內拿到精準答案。