首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 資料字典完全指南:靜態視圖 (USER/ALL/DBA) 與動態效能視圖 (V$) 深度解析

     編輯:Oracle 資料庫相關知識

什麼是資料字典?

資料字典是 Oracle 存放「關於資料庫的資料」的核心區域:使用者、表、索引、權限、儲存參數、運行統計等。所有 DDL 操作最終皆反映於字典中。

一、靜態資料字典

內容相對穩定,僅 DDL 變更時更新。由 SYS 擁有,透過三組前綴視圖公開:

前綴可見範圍權限需求典型用途
USER_*當前使用者**擁有**的物件無特殊權限開發者日常查詢、應用程式自省
ALL_*當前使用者**有權限存取**的物件無特殊權限跨 Schema 開發、權限驗證
DBA_*資料庫中**所有**物件SELECT ANY DICTIONARY 或 DBA 角色DBA 管理、稽核、全庫報表

關係:USER_* ⊆ ALL_* ⊆ DBA_* (同名視圖欄位結構相同,僅資料範圍不同)

常用 USER_* 視圖速查

視圖用途關鍵欄位
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_SOURCEPL/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:DBMS_METADATA.GET_DDL('TABLE','EMP') 直接取得建表語句 (參見文章 125383)。

二、動態效能視圖 (V$ / GV$)

記憶體中即時統計,反映資料庫**運行時狀態**。唯讀,持續更新。所有視圖以 V$ (單實例) 或 GV$ (RAC 全域) 開頭。

核心 V$ 視圖分類

領域代表視圖用途
Session/ProcessV$SESSION, V$PROCESS, V$SESSION_WAIT當前連線、等待事件、SQL 執行狀態
SQL 執行V$SQL, V$SQLAREA, V$SQL_PLAN, V$SQL_MONITOR共用游標、執行計畫、實時監控
記憶體/SGAV$SGA, V$SGASTAT, V$LIBRARYCACHE, V$ROWCACHESGA 元件大小、命中率、快取統計
I/O 與檔案V$DATAFILE, V$TEMPFILE, V$FILESTAT, V$TEMPSTAT資料/暫存檔 I/O 統計
鎖/EnqueueV$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_STATUSRedo Log 狀態、歸檔進度、Gap 偵測
參數/實例V$PARAMETER, V$SYSTEM_PARAMETER, V$INSTANCE, V$VERSION初始化參數、實例資訊、版本
ASMV$ASM_DISKGROUP, V$ASM_DISK, V$ASM_FILEASM 儲存管理

實戰查詢範例

  1. 找出阻塞鏈:
    SELECT blocking_session, sid, serial#, wait_class, seconds_in_wait, sql_id
    FROM v$session
    WHERE blocking_session IS NOT NULL;
  2. Top 10 耗 CPU SQL:
    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;
  3. 檢查 Undo 保留風險:
    SELECT maxquery_len_sec, maxquery_sql_id, tuned_undoretention
    FROM v$undostat
    ORDER BY begin_time DESC
    FETCH FIRST 1 ROW ONLY;

三、字典存取最佳實務

  1. 權限最小化:開發帳號僅授 SELECT_CATALOG_ROLE 或特定 USER_* 視圖,嚴禁給 DBA 角色。
  2. 統計資訊同步:DBMS_STATS.GATHER_DICTIONARY_STATS 定期收集字典統計,優化字典查詢計畫。
  3. 避免在高頻程式碼查詢 V$:V$ 視圖無索引、全掃 X$ 基表,改用 DBMS_MONITOR、DBMS_APPLICATION_INFO 記錄關鍵資訊供事後分析。
  4. 善用 OEM/Cloud Control:圖形化儀表板已封裝大多數 V$ 查詢邏輯。

結語

靜態字典 (USER/ALL/DBA_*) 是開發與管理的「地圖」,動態視圖 (V$) 是運行時的「儀表盤」。熟練駕馭兩者,能從結構與效能雙維度全面掌控 Oracle 資料庫。

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