資料字典是 Oracle 存放「關於資料庫的資料」的核心區域:使用者、表、索引、權限、儲存參數、運行統計等。所有 DDL 操作最終皆反映於字典中。
內容相對穩定,僅 DDL 變更時更新。由 SYS 擁有,透過三組前綴視圖公開:
| 前綴 | 可見範圍 | 權限需求 | 典型用途 |
|---|---|---|---|
USER_* | 當前使用者**擁有**的物件 | 無特殊權限 | 開發者日常查詢、應用程式自省 |
ALL_* | 當前使用者**有權限存取**的物件 | 無特殊權限 | 跨 Schema 開發、權限驗證 |
DBA_* | 資料庫中**所有**物件 | SELECT ANY DICTIONARY 或 DBA 角色 | DBA 管理、稽核、全庫報表 |
關係:USER_* ⊆ ALL_* ⊆ DBA_* (同名視圖欄位結構相同,僅資料範圍不同)
| 視圖 | 用途 | 關鍵欄位 |
|---|---|---|
USER_USERS | 當前使用者資訊 | USERNAME, USER_ID, ACCOUNT_STATUS, DEFAULT_TABLESPACE, CREATED |
USER_TABLES | 擁有的表 | TABLE_NAME, TABLESPACE_NAME, CLUSTER_NAME, NUM_ROWS, LAST_ANALYZED |
USER_OBJECTS | 所有物件 (表、視圖、Procedure、Index、Sequence...) | OBJECT_NAME, OBJECT_TYPE, STATUS, CREATED, LAST_DDL_TIME |
USER_TAB_PRIVS | 表權限 (授出/被授予) | GRANTEE, TABLE_NAME, GRANTOR, PRIVILEGE, GRANTABLE |
USER_TAB_COLUMNS | 欄位定義 | TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE, DATA_DEFAULT |
USER_CONSTRAINTS | 約束條件 | CONSTRAINT_NAME, CONSTRAINT_TYPE (P/R/U/C), TABLE_NAME, SEARCH_CONDITION |
USER_CONS_COLUMNS | 約束包含欄位 | CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, POSITION |
USER_INDEXES | 索引定義 | INDEX_NAME, TABLE_NAME, UNIQUENESS, TABLESPACE_NAME, STATUS |
USER_IND_COLUMNS | 索引欄位順序 | INDEX_NAME, TABLE_NAME, COLUMN_NAME, COLUMN_POSITION |
USER_SOURCE | PL/SQL 原始碼 | NAME, TYPE, LINE, TEXT |
USER_DEPENDENCIES | 物件相依關係 | NAME, TYPE, REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE |
UPPER() 或 WHERE object_name = UPPER('pkg1')。USER_TABLES + USER_INDEXES + USER_CONSTRAINTS 可重建完整 DDL。DBMS_METADATA.GET_DDL('TABLE','EMP') 直接取得建表語句 (參見文章 125383)。記憶體中即時統計,反映資料庫**運行時狀態**。唯讀,持續更新。所有視圖以 V$ (單實例) 或 GV$ (RAC 全域) 開頭。
| 領域 | 代表視圖 | 用途 |
|---|---|---|
| Session/Process | V$SESSION, V$PROCESS, V$SESSION_WAIT | 當前連線、等待事件、SQL 執行狀態 |
| SQL 執行 | V$SQL, V$SQLAREA, V$SQL_PLAN, V$SQL_MONITOR | 共用游標、執行計畫、實時監控 |
| 記憶體/SGA | V$SGA, V$SGASTAT, V$LIBRARYCACHE, V$ROWCACHE | SGA 元件大小、命中率、快取統計 |
| I/O 與檔案 | V$DATAFILE, V$TEMPFILE, V$FILESTAT, V$TEMPSTAT | 資料/暫存檔 I/O 統計 |
| 鎖/Enqueue | V$LOCK, V$ENQUEUE_STAT, V$SESSION_BLOCKERS | 阻塞鏈、死鎖分析 |
| Undo/交易 | V$TRANSACTION, V$ROLLSTAT, V$UNDOSTAT | 作用中交易、Undo 使用量、Snapshot Too Old 風險 |
| Redo/歸檔 | V$LOG, V$LOG_HISTORY, V$ARCHIVED_LOG, V$ARCHIVE_DEST_STATUS | Redo Log 狀態、歸檔進度、Gap 偵測 |
| 參數/實例 | V$PARAMETER, V$SYSTEM_PARAMETER, V$INSTANCE, V$VERSION | 初始化參數、實例資訊、版本 |
| ASM | V$ASM_DISKGROUP, V$ASM_DISK, V$ASM_FILE | ASM 儲存管理 |
SELECT blocking_session, sid, serial#, wait_class, seconds_in_wait, sql_id
FROM v$session
WHERE blocking_session IS NOT NULL;
SELECT sql_id, sql_text, cpu_time/1e6 sec, executions, elapsed_time/1e6 avg_sec
FROM v$sqlarea
ORDER BY cpu_time DESC
FETCH FIRST 10 ROWS ONLY;
SELECT maxquery_len_sec, maxquery_sql_id, tuned_undoretention
FROM v$undostat
ORDER BY begin_time DESC
FETCH FIRST 1 ROW ONLY;
SELECT_CATALOG_ROLE 或特定 USER_* 視圖,嚴禁給 DBA 角色。DBMS_STATS.GATHER_DICTIONARY_STATS 定期收集字典統計,優化字典查詢計畫。DBMS_MONITOR、DBMS_APPLICATION_INFO 記錄關鍵資訊供事後分析。靜態字典 (USER/ALL/DBA_*) 是開發與管理的「地圖」,動態視圖 (V$) 是運行時的「儀表盤」。熟練駕馭兩者,能從結構與效能雙維度全面掌控 Oracle 資料庫。