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

Oracle 資料字典完全指南:用途、分類與常用查詢速查表

     編輯:Oracle 資料庫基礎

Oracle 資料字典 是資料庫的「說明書」,記錄所有物件定義、空間使用、權限、稽核等中繼資料。本文系統整理資料字典用途、靜態/動態分類、三大視圖前綴(user_/all_/dba_)差異,並提供 10 條高頻查詢模板,供 DBA 與開發人員隨查隨用。

資料字典用途

  • 物件定義:表、視圖、索引、序列、程序、觸發器等結構資訊。
  • 空間管理:表空間配置、區段程度、高水位線。
  • 權限稽核:用戶權限、角色授予、物件授權、登入審計。
  • 效能調優:鎖等待、執行計畫、統計資訊、快取命中率。

靜態 vs 動態資料字典

類型特性範例存放
靜態結構定義,不隨運行頻繁變動USER_TABLES, DBA_USERSSYSTEM 表空間,基礎表 + 視圖
動態運行時狀態,隨活動即時更新V$SESSION, V$SQLAREASGA 記憶體結構,僅供讀取

靜態視圖三大前綴差異

前綴可見範圍典型使用者權限需求
user_*當前 Schema 擁有的物件開發人員、應用帳號無特殊權限
all_*當前用戶有權限存取的物件(含其他 Schema)跨 Schema 查詢的開發需物件權限
dba_*全資料庫所有物件DBA、稽核人員SELECT ANY DICTIONARY 或 DBA 角色

10 條高頻查詢模板

-- 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 光眼」,無論是結構變更影響分析、權限稽核、效能排查,都能在幾秒鐘內拿到精準答案。

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