ORACLE升級PSU&OJVM遇到問題
【環境介紹】
系統環境:Solaris + Oracle 11R2 + OGG + 腳本定時任務統計信息收集
【背景描述】
基於集團的安全檢查,需要對數據庫版本進行漏洞掃描,漏洞掃描中存在RBDMS和JVM類型的漏洞,需要通過升級小版本的PSU和OJVM來修復漏洞。下面大概說明一下升級的註意部分和出現問題的解決。
【問題處理】
升級時一般在晚上操作,在升級數據庫前註意的問題(由於腳本較多,這裏貼腳本,如果有需要腳本可以留言):
提前進行數據庫軟件備份(可排除aud小文件,備份小文件多導致備份時間很長,建議可以提前一天備份),數據備份(數據庫全備);
數據庫參數備份,工程完成後參數對比(歷史原因導致啟動數據庫pfile文件參數不同導致主機資源耗盡或者其他問題);
停止涉及數據庫定時任務(防止大事務導致數據庫停止有問題);
停止數據庫自動統計信息或者手動腳本的統計信息收集(導致升級後編譯時不能進行);
停止其他軟件對數據庫的操作(OGG等,OGG進程卡主);
操作系統空間需要大於35G(如果空間不足可能觸發BUG:
10131946 GRID PATCHES REQUIRE 22GB OF FREE SPACE
12791141 PATCH 12311357: WITH 35GB FREE SPACE : ERROR: REQUIRED AMOUNT OF SPACE
1088455.1 opatch CheckSystemSpace Fails With Error Code 73 While Applying GI PSU
操作系統LANG字符問題(可觸發BUG,導致升級報錯),建議默認使用英文字符;
補丁沖突(DB,有些針對one of patch沖突需要在升級前回退,GI),平臺檢測。
操作數據庫升級前,再次進行檢查數據庫補丁沖突,平臺檢測,但是補丁需要特殊.so文件驗證是在停止數據庫實例後進行檢查,也是經常出現的文件占用的問題。
檢查信息:
grid@XXXDB01:/opt/oracle/app/oracle_base/patch/26636028$ $ORACLE_HOME/OPatch/opatch prereq CheckActiveFilesAndExecutables -phBaseDir ./26635745
Oracle Interim Patch Installer version 11.2.0.3.18
Copyright (c) 2018, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /opt/oracle/app/grid_home
Central Inventory : /opt/oracle/app/oraInventory
from : /opt/oracle/app/grid_home/oraInst.loc
OPatch version : 11.2.0.3.18
OUI version : 11.2.0.4.0
Log file location : /opt/oracle/app/grid_home/cfgtoollogs/opatch/opatch2018-04-27_01-50-50AM_1.log
Invoking prereq "checkactivefilesandexecutables"
......
Prereq "checkActiveFilesAndExecutables" for patch 17478514 failed.
The details are:
Following executables are active :
/opt/oracle/app/grid_home/bin/oracle
/opt/oracle/app/grid_home/lib/libclntsh.so.11.1
Prereq "checkActiveFilesAndExecutables" for patch 18031668 passed.
.......
Prereq "checkActiveFilesAndExecutables" for patch 26392168 passed.
OPatch succeeded.
省略部分內容,可以看到對特殊文件檢查時發現被占用。查看是哪個進程占用:
grid@xxxxDB01:/opt/oracle/app/oracle_base/patch/26636028$ fuser /opt/oracle/app/grid_home/lib/libclntsh.so.11.1
/opt/oracle/app/grid_home/lib/libclntsh.so.11.1: 9465m 9447m 9331m 9210m 8889m 8750m 8578m 8498m 8496m 8494m 8417m 8416m 8395m 21708m 8361m 8286m 8164m 14225m 14198m 14186m
但是存在一個進程,且是root用戶占用,集群不能停止該進程:
root@xxxDB01:/opt/oracle/app/oracle_base/patch/26636028# ps -ef |grep /opt/oracle/app/grid_home/jdk/bin/sparcv9/java
root 21708 4111 0 02:37:17 pts/1 0:00 grep /opt/oracle/app/grid_home/jdk/bin/sparcv9/java
正常情況下,占用該文件的位grid用戶,在升級數據庫時會停止這些進程。
[grid@xxxx01 ~]$ fuser /u01/app/11.2.0/grid/lib/libclntsh.so.11.1
/u01/app/11.2.0/grid/lib/libclntsh.so.11.1: 2400m 2411m 2422m 2432m 2491m 2623m 2837m 2885m 2887m 2984m 2985m 3029m 3046m
[grid@xxxx01 ~]$ ps -ef |egrep ‘2400|2411|2422|2432|2491|2623|2837|2885|2887|2984|2985|3029|3046‘
grid 2400 1 0 10:48 ? 00:00:00 /u01/app/11.2.0/grid/bin/oraagent.bin
grid 2411 1 0 10:48 ? 00:00:00 /u01/app/11.2.0/grid/bin/mdnsd.bin
grid 2422 1 0 10:48 ? 00:00:00 /u01/app/11.2.0/grid/bin/gpnpd.bin
grid 2432 1 0 10:48 ? 00:00:00 /u01/app/11.2.0/grid/bin/gipcd.bin
grid 2491 1 0 10:48 ? 00:00:00 /u01/app/11.2.0/grid/bin/ocssd.bin
grid 2623 1 0 10:49 ? 00:00:00 /u01/app/11.2.0/grid/bin/evmd.bin
grid 2837 2623 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/bin/evmlogger.bin -o /u01/app/11.2.0/grid/evm/log/evmlogger.info -l /u01/app/11.2.0/grid/evm/log/evmlogger.log
grid 2885 1 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/bin/scriptagent.bin
grid 2887 1 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/bin/oraagent.bin
grid 2984 1 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/opmn/bin/ons -d
grid 2985 2984 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/opmn/bin/ons -d
grid 3029 1 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
grid 3046 1 0 10:50 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
【解決辦法】
關於特殊.so文件驗證發現文件被占用時,使用以下方法確認:
若有文件被占用,把占用進程殺掉:
opatch error code 73: Prerequisite check "CheckActiveFilesAndExecutables" failed. (文檔 ID 1942237.1)
通過核查為OC4J資源online導致特殊文件被該進程占用,使用crsctl stat res -t查看OC4J資源狀態,該資源會導致8888漏洞,建議停止該資源,關於修改OC4J可查看官方文檔
Security Vulnerability Scan detects Exposed Port on ora.oc4j Resource (文檔 ID 1922349.1)
Oracle Containers for J2EE端口8888,Oracle Remote Method Invocation端口23792,23943,是ora.oc4j Resource產生的漏洞。該漏洞在Grid PSU 11.2.0.3.4及更高版本中得到解決。 建議修復方法:一:停止OC4J資源:srvctl stop oc4j,禁用OC4J服務:srvctl disable oc4j。二:修改OC4J資源的配置文件禁止該端口 如果停止資源後還存在該進程,可以使用kill方式殺掉該進程。 升級PSU完成之後該版本觸發BUG 22730454修改文件$ORACLE_HOME/lib/libsqlplus.so權限640為644。 Permission Of $OH/LIB/LIBSQLPLUS.SO changes from 644 TO 640 on applying 11.2.0.4/12.1.0.2 DBPSU (文檔 ID 2201729.1)
【總結】
在工程中,一定確保工程前環境已經檢查完成,這樣才能使過程中遇到更多的問題。
在升級中遇到問題,仔細查看升級日誌中的報錯信息,才能準確判斷產生問題的原因。
方案準備一定要充分,方案審核一定要仔細,遇到問題後一定要在方案中添加內容,防止下次工程遇到同樣的問題。
ORACLE升級PSU&OJVM遇到問題