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

Oracle數據字典腳本架構深度解析:catalog.sql、catproc.sql 及命名規範全覽

     編輯:Oracle 資料庫基礎

一、 腳本物理位置與分類體系

Oracle 安裝後,所有核心管理腳本集中存放於:

  • Linux/Unix: `$ORACLE_HOME/rdbms/admin/
  • Windows: `%ORACLE_HOME%\rdbms\admin\`

該目錄下數百個腳本遵循嚴格前綴命名規範,按功能劃分為四大類:

前綴模式功能域典型代表
cat*.sql數據字典視圖、同義詞、核心 PL/SQL 環境構建catalog.sql, catproc.sql, catadt.sql
dbms*.sql內建包規範與主體定義(DBMS_ 系列)dbms_output.sql, dbms_stats.sql
prvt*.plb加密包主體(PL/SQL Wrapped),僅供內部實現prvtadvi.plb, prvtstas.plb
utl*.sql工具類表、視圖、包(UTL_ 系列)utl_file.sql, utl_http.sql, utl_raw.sql

二、 兩大基石腳本:catalog.sql 與 catproc.sql

數據庫創建後(或手動升級時),必須按順序執行這兩個腳本以構建完整數據字典:

1. catalog.sql — 數據字典視圖與同義詞的「建築師」

  • 創建所有靜態數據字典視圖(`DBA_*`、`ALL_*`、`USER_*`)及公共同義詞。
  • 構建動態性能視圖(`V$*` / `GV$*`)的基礎結構。
  • 初始化核心 PL/SQL 運行時環境:數據類型、預定義異常、內建函數/過程、SQL 引擎組件。
  • 級聯調用子腳本:審計、導入導出、SQL*Loader、安裝選項等專項視圖創建。

2. catproc.sql — PL/SQL 功能擴展的「引擎室」

  • 建立標準 PL/SQL 包體(`STANDARD`、`DBMS_STANDARD` 等)。
  • 部署擴展 RDBMS 能力的核心包與視圖,覆蓋:
    • 異步通知(`DBMS_ALERT` / `DBMS_PIPE`)
    • 日志挖掘
    • 大對象操作(`DBMS_LOB`)
    • 物件類型與集合
    • 高級隊列(AQ)
    • 數據復制
    • 其他內建包與選項

三、 進階擴展腳本:按需加載

除核心兩大腳本外,`admin` 目錄提供大量功能模組腳本,典型場景:

腳本用途反向操作
catadt.sql創建物件類型/集合相關字典視圖catnoadt.sql (刪除)
catqm.sql創建高級隊列(AQ)字典視圖catnoqm.sql
catrep.sql創建復制相關字典視圖catnorep.sql
catjava.sql安裝 JVM 及 Java 類加載支持catnojav.sql
catxml.sql安裝 XML DB 組件catnoxml.sql

四、 運維實戰建議

  1. 升級必跑: 手動升級數據庫(非 DBUA)時,需在 `STARTUP UPGRADE` 模式下依次運行 `catalog.sql`、`catproc.sql`,再運行 `utlrp.sql` 重編譯失效對象。
  2. 只讀原則: 切勿直接修改 這些腳本內容。若需自定義字典視圖,應創建獨立應用視圖而非修改系統基表/視圖。
  3. 版本對應: 嚴格使用與目標數據庫版本完全一致的腳本(`$ORACLE_HOME` 下的版本),跨版本運行會導致字典不一致。
  4. 並行重編譯: 大型數據庫執行 `utlrp.sql` 時可設置並行度:`SQL> @utlrp.sql 4`(4 線程並行),顯著縮短重編譯時間。

五、 核心視圖來源追溯

理解腳本分層有助於排查「視圖缺失」或「權限不足」問題:

  • 基表(`OBJ$`、`TAB$`、`COL$`...)→ 由 `sql.bsq` 創建(數據庫創建階段)。
  • 靜態字典視圖(`DBA_TABLES` 等)→ 由 `catalog.sql` 基於基表定義。
  • 動態性能視圖(`V$SESSION` 等)→ 由 `catalog.sql` 映射 SGA 固定表(`X$` 表)。
  • PL/SQL 包規範 → `catproc.sql` / `dbms*.sql`;包主體 → `prvt*.plb`(加密)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved