確認 Oracle 資料庫已套用的 CPU (Critical Patch Update) 與 PSU (Patch Set Update) 版本,是資安稽核與維運的基本功。本文介紹兩種標準查詢方法:資料庫視圖查詢與 OPatch 工具指令,並說明關鍵注意事項。
以 SYSDBA 登入資料庫,設定顯示格式後查詢歷史紀錄:
SQL> SET PAGES 100 LINES 120
SQL> COL ACTION FORMAT A6
SQL> COL NAMESPACE FORMAT A10
SQL> COL VERSION FORMAT A10
SQL> COL COMMENTS FORMAT A15
SQL> COL ACTION_TIME FORMAT A30
SQL> COL BUNDLE_SERIES FORMAT A15
SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
SQL> SELECT * FROM DBA_REGISTRY_HISTORY;
| ACTION_TIME | ACTION | NAMESPACE | VERSION | ID | BUNDLE_SERIES | COMMENTS |
|---|---|---|---|---|---|---|
| 2011-06-02 16:54:21.301023 | APPLY | SERVER | 10.2.0.4 | 4 | PSU | PSU 10.2.0.4.4 |
| 2011-06-02 16:54:42.711877 | APPLY | SERVER | 10.2.0.4 | 1 | OPSU | PSU 10.2.0.4.5 |
BUNDLE_SERIES 欄位標示 PSU 即為 Patch Set Update,CPU 則為 Critical Patch Update。
在作業系統層級執行:
$ opatch lsinventory
Installed Top-level Products (2):
Oracle Database 10g 10.2.0.1.0
Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0
Interim patches (4):
Patch 6367097 : applied on Tue Sep 14 22:08:15 GMT+08:00 2010
Bugs fixed: 6367097
...
Patch 9294403 : applied on ...
Bugs fixed: 9294403
Interim patches 區塊列出已套用的單一修補程式,包含補丁編號、套用時間與修復的 Bug 編號。
CPU/PSU 補丁分兩階段:先以
opatch apply套用二進位檔案,再執行cat_bundle.sql更新資料庫內部物件。若僅執行 OPatch 而未跑 SQL 腳本,DBA_REGISTRY_HISTORY將查無紀錄,補丁實際上未完整生效。
DBA_REGISTRY_HISTORY 確認 cat_bundle.sql 執行紀錄opatch lsinventory 確認二進位補丁套用狀態