一、 腳本物理位置與分類體系
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 |
四、 運維實戰建議
- 升級必跑: 手動升級數據庫(非 DBUA)時,需在 `STARTUP UPGRADE` 模式下依次運行 `catalog.sql`、`catproc.sql`,再運行 `utlrp.sql` 重編譯失效對象。
- 只讀原則: 切勿直接修改 這些腳本內容。若需自定義字典視圖,應創建獨立應用視圖而非修改系統基表/視圖。
- 版本對應: 嚴格使用與目標數據庫版本完全一致的腳本(`$ORACLE_HOME` 下的版本),跨版本運行會導致字典不一致。
- 並行重編譯: 大型數據庫執行 `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`(加密)。