數據字典存放於 SYSTEM 表空間,包含靜態視圖(結構元數據)與動態視圖(運行時性能數據,V$/GV$)。靜態視圖分三大前綴體系:
| 前綴 | 作用域 | 前提條件 | 典型用戶 |
|---|---|---|---|
USER_* | 當前用戶擁有的對象 | 無特殊權限 | 開發人員、應用賬號 |
ALL_* | 當前用戶可訪問的對象(含授權) | 需對象權限 | 跨 Schema 查詢、審計 |
DBA_* | 資料庫所有對象 | 需 DBA 權限或 SELECT_CATALOG_ROLE | DBA、監控腳本 |
-- 當前用戶表
SELECT table_name, tablespace_name FROM user_tables;
SELECT * FROM user_tables WHERE table_name = 'TEST_TEMP';
-- 可訪問表
SELECT owner, table_name FROM all_tables;
-- 所有表
SELECT owner, table_name FROM dba_tables;
SELECT index_name, table_name FROM user_indexes;
SELECT * FROM user_indexes WHERE table_name = 'EMP';
SELECT view_name FROM user_views;
SELECT object_name, object_type, created, status FROM user_objects;
SELECT * FROM user_users;
SELECT * FROM user_sys_privs; -- 系統權限
SELECT * FROM user_tab_privs; -- 對象權限
SELECT * FROM user_role_privs; -- 角色
SELECT * FROM user_constraints WHERE table_name = 'EMP';
SELECT * FROM user_cons_columns WHERE table_name = 'EMP';
SELECT * FROM user_tab_columns WHERE table_name = 'EMP';
-- 會話/鎖/等待
SELECT * FROM v$session WHERE status = 'ACTIVE';
SELECT * FROM v$locked_object;
SELECT * FROM v$session_wait WHERE event NOT LIKE 'SQL*Net%';
-- 空間/段
SELECT * FROM v$tablespace;
SELECT * FROM v$datafile;
-- SQL 統計
SELECT sql_text, executions, elapsed_time/1e6 sec FROM v$sql ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
SELECT * FROM dictionary; -- 列出所有字典視圖名與註釋
SELECT * FROM dict_columns WHERE table_name = 'USER_TABLES'; -- 視圖欄位定義
USER_*,性能最好(無權限檢查開銷)。ALL_*,注意 ALL_TABLES 含 OWNER 欄位。DBA_*,授予 SELECT_CATALOG_ROLE 而非 DBA 角色。V$ 讀取內存結構,高頻查詢可能增加 Latch 競爭,生產監控建議間隔 ≥ 30 秒。