OPatch 是 Oracle 官方提供的補丁工具,用於套用 CPU (Critical Patch Update) 與 PSU (Patch Set Update)。本文詳細記錄從準備、安裝、驗證到回滾的完整操作流程,適用於 Windows 與 Linux 環境。
SQL> SELECT * FROM v$version;
記錄完整版本號 (如 10.2.0.5.0),作為補丁篩選依據。
SQL> SELECT * FROM dba_registry_history;
-- 或 OS 層
$ opatch lsinventory
SQL> SELECT COUNT(*) AS N1 FROM dba_objects WHERE status = 'INVALID';
-- 建議先編譯
SQL> @?/rdbms/admin/utlrp.sql
-- 再次統計
SQL> SELECT COUNT(*) AS N2 FROM dba_objects WHERE status = 'INVALID';
-- 匯出失效物件清單備查
SQL> SELECT object_name, object_type, owner FROM dba_objects WHERE status = 'INVALID';
| 類型 | 全稱 | 特性 | 適用場景 |
|---|---|---|---|
| CPU | Critical Patch Update | 累積性安全修補,含歷次安全修復 | 安全弱點修補 |
| PSU | Patch Set Update | 季度釋出,含 Bug 修復 + 最新 CPU,增量式 | 一般穩定性修補 |
13460968)E:\13460968)expdp 邏輯備份確認適用版本、前置條件、已知問題、特殊指令。
| 平台 | 設定方式 |
|---|---|
| Windows | 系統屬性 → 環境變數 → 編輯 PATH,附加 %ORACLE_HOME%\OPatch或 CMD 下: set PATH=%PATH%;%ORACLE_HOME%\OPatch |
| Linux | export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1export PATH=$ORACLE_HOME/OPatch:$PATH |
驗證:opatch -help 顯示說明即成功。
sqlplus / as sysdba → SHUTDOWN IMMEDIATE;lsnrctl stop;停止 GI/Grid 相關進程。cd E:\13460968
opatch apply
常見阻擋處理:若提示 oci.dll 被佔用 (Windows) 或進程殘留 (Linux),可暫時重命名該檔案 (如 oci.dll.bak),安裝完成後改回。
STARTUP、lsnrctl startSQL> @E:\13460968\files\Bundle\Patch14\catcpu.sql
路徑視補丁而定,通常在 files/Bundle/Patch* 下。
SQL> @?/rdbms/admin/utlrp.sql
SQL> SELECT COUNT(*) AS N3 FROM dba_objects WHERE status = 'INVALID';
-- 比對 N3 vs N2,若新增失效需逐一排查
SQL> SELECT * FROM dba_registry_history;
$ opatch lsinventory
# 1. 停止服務 (同上)
# 2. 設定環境變數
# 3. 執行回滾
opatch rollback -id 13460968
# 4. 啟動服務 (Windows 需將重命名的 dll 改回)
# 5. 執行回滾腳本
SQL> @E:\13460968\files\Bundle\Patch14\catcpu_rollback.sql
# 6. 驗證資料庫正常
oci.dll 佔用問題高發,善用重命名大法。