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

Oracle 11.2.0.4.6 PSU 升級實戰:.patch_storage 目錄誤刪災難與手工修復全記錄

     編輯:DB2 教學

Oracle 11.2.0.4.6 PSU 升級實戰:.patch_storage 目錄誤刪災難與手工修復全記錄

Oracle PSU(Patch Set Update)升級是 DBA 核心技能。本文記錄一次真實的 .patch_storage 目錄誤刪導致 opatch apply 失敗,通過備份節點拷貝目錄成功修復的完整過程,並總結官方修復方案與手工打補丁最佳實踐。

一、事故現場

  • 環境:2 節點 RAC,GI Home 與 DB Home 均為 11.2.0.4.5,目標升級至 .6。
  • 操作:節點 1 執行 opatch apply 時發現之前備份的 .patch_storage 目錄被誤刪除。
  • 現象:opatch 報錯無法繼續,提示缺少元數據目錄。
  • 關鍵教訓:$GRID_HOME 和 $ORACLE_HOME 下的 .patch_storage 目錄絕對不能刪除! 它存儲補丁元數據、回滾信息、庫存上下文,是 opatch 正常運行的「大腦」。

二、修復方案對比

官方 MOS 文檔 (Doc ID 1641136.1) 給出三種方案:

方案操作優點缺點
1. 還原備份從備份介質恢復完整 .patch_storage 目錄最快、最完美、無風險需有效備份
2. 重裝 ORACLE_HOME完全重新安裝 Oracle Home 並重新應用所有補丁徹底乾淨耗時極長、業務停機久、風險大
3. 克隆同環境 Home從完全一樣的環境(同版本、同補丁)克隆 ORACLE_HOME比重裝快極難找到 100% 一致環境、克隆後仍需驗證

三、實戰修復:跨節點 SCP 拷貝大法

幸運的是節點 2 未動過目錄。採用方案 1 變體:從節點 2 拷貝目錄到節點 1。

# 節點 2 上打包
tar -czf patch_storage.tgz -C $GRID_HOME .patch_storage
tar -czf patch_storage_db.tgz -C $ORACLE_HOME .patch_storage

# 傳輸到節點 1
scp patch_storage.tgz node1:$GRID_HOME/
scp patch_storage_db.tgz node1:$ORACLE_HOME/

# 節點 1 解壓還原
cd $GRID_HOME && tar -xzf patch_storage.tgz
cd $ORACLE_HOME && tar -xzf patch_storage_db.tgz

關鍵點: 保持目錄結構、權限、屬主完全一致。解壓後無需任何修改,直接執行 opatch apply 即可成功。

四、手工分步打補丁流程(拒絕 opatch auto)

作者習慣手工逐節點打補丁,避免 opatch auto 環境變量、權限、SSH 等不可控因素導致失敗。

# 1. 解壓補丁包
unzip p20420937_112040_Linux-x86-64.zip  # 含 3 個子補丁

# 2. 停止目標 Home 服務(DB Home 需停數據庫實例,GI Home 需停 CRS)
# 3. 進入各子補丁目錄依次應用
cd 20420937  # OCW PSU
opatch apply

cd ../20299019  # ACFS PSU
opatch apply

cd ../20299013  # Database PSU
opatch apply

# 4. 驗證清單
opatch lsinventory  # 確認三個補丁均顯示 applied
sqlplus / as sysdba
SELECT * FROM dba_registry_history;  # 確認數據庫級別記錄

五、升級成功驗證輸出

OPatch succeeded.

Interim patches (3) :
Patch 20420937 : applied on Sun Apr 19 14:36:44 CST 2015  -- OCW PSU 11.2.0.4.6
Patch 20299019 : applied on Sun Apr 19 14:30:46 CST 2015  -- ACFS PSU 11.2.0.4.6
Patch 20299013 : applied on Sun Apr 19 14:24:45 CST 2015  -- Database PSU 11.2.0.4.6
  Sub-patch 19769489 (PSU 11.2.0.4.5) ...
  Sub-patch 19121551 (PSU 11.2.0.4.4) ...
  ...

Rac system comprising of multiple nodes
Local node = elvis111
Remote node = elvis112

dba_registry_history 顯示歷史遞進:11.2.0.4.5 -> 11.2.0.4.6。

六、最佳實踐總結

  1. 視 .patch_storage 為核心資產:納入備份策略,嚴禁手動清理。
  2. 預留充足磁盤空間:建議 GI Home 和 DB Home 各預留 50GB+,避免空間壓力誤刪。
  3. 堅持手工分步打補丁:可控、可驗證、易排查,拒絕 opatch auto 黑盒。
  4. 雙節點互備:RAC 環境下,另一節點是最佳的「熱備份源」。
  5. 升級前必讀 MOS 1641136.1:掌握最新已知問題、前置條件、回滾流程。

此次事件雖驚險,但通過冷靜分析、利用 RAC 多節點冗余特性,零代價完成修復。再次驗證:備份是容錯的基石,熟悉工具原理是化險為夷的關鍵。

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