首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料字典完整指南:靜態與動態視圖、權限層級與常用查詢

     編輯:Oracle 資料庫基礎

什麼是 Oracle 資料字典

Oracle 資料字典是一組儲存在 SYSTEM 表空間中的表與視圖集合,記錄資料庫的所有中繼資料。當使用者對資料庫操作遇到問題時,可查詢資料字典獲取詳細資訊。所有資料字典皆可透過標準 SQL 存取。

資料字典核心內容

  • 所有綱要物件資訊:表、視圖、叢集、索引等
  • 空間分配與使用狀況
  • 欄位預設值
  • 完整性約束資訊
  • Oracle 使用者名稱
  • 使用者與角色權限
  • 存取與使用稽核資訊
  • 其他資料庫產生的資訊

靜態 vs 動態資料字典

靜態資料字典視圖三大權限前綴

靜態字典視圖分為三類,前綴決定可見範圍與所需權限:

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 等即時狀態:

類型特性典型範例
靜態資料字典使用者存取時不會改變,記錄結構性中繼資料使用者建立的表、視圖定義
動態資料字典隨資料庫運行持續更新,反映效能與運行狀態當前鎖定物件、Session 狀態、實例資訊
視圖用途
V$ACCESS顯示被鎖定的資料庫物件及存取該物件的 Session
V$SESSION列出當前所有 Session 詳細資訊
V$ACTIVE_INSTANCERAC 環境下活躍實例資訊
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 查詢

實務建議

  1. 優先使用 USER_*:效能最好,無需跨綱要掃描
  2. 跨綱要查詢用 ALL_*:開發人員排查權限問題時最實用
  3. DBA_* 僅限 DBA 使用:避免一般帳號持有過高權限
  4. 動態視圖查詢要節制:頻繁查詢 V$ 視圖會增加 Latch 爭用,影響效能
  5. 善用 DICTIONARY 視圖:忘記視圖名稱時,SELECT * FROM DICTIONARY WHERE TABLE_NAME LIKE '%INDEX%' 快速搜尋

總結

Oracle 資料字典是 DBA 與開發人員了解資料庫結構、權限、效能的核心入口。掌握 三大前綴(USER/ALL/DBA)的權限邊界、熟悉常用靜態視圖、善用動態 V$ 視圖排查效能問題,是 Oracle 進階必備技能。

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