1. 環境檢查
操作過程做好記錄,所有節點均檢查
1.1 當前補丁情況檢查
opatch version
opatch lspatches
1.2 集羣狀態檢查
crsctl stat res -t
2.OPatch
替換oraclehome和gridhome的OPatch(OPatch版本高於12.2.0.1.17 or later.)
mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch.bak
unzip p6880880_xxxxxx_Linux-x86-64.zip -d $ORACLE_HOME
確認OPatch版本,所有節點的oracle和grid用戶都需要確認
$ORACLE_HOME/OPatch/opatch version
3.備份軟件
root用戶tar /oracle/app即可 (grid和oracle軟件不在同一目錄下都需要備份)
cd /oracle/
tar -zcf app.tar.gz app
4.軟件解壓和權限
解壓psu包並更改權限,包放在單獨的目錄下
4.1 gi補丁
grid解壓補丁
cd <UNZIPPED_PATCH_LOCATION>
unzip p30116789_xxxxx_Linux-x86-64.zip
chmod 777 30116789
chmod -R 777 <UNZIPPED_PATCH_LOCATION>
4.2 jvm
oracle解壓ojvm補丁
cd <UNZIPPED_PATCH_LOCATION>
unzip p30116789_xxxxx_Linux-x86-64.zip
5.補丁衝突檢測
5.1 grid空間檢查
grid執行:
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/30125133
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/30122149
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/30122167
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/29401763
5.2 oracle空間檢查
oracle用戶執行:
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/30125133
% $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <UNZIPPED_PATCH_LOCATION>/30116789/30122149
5.3 如果有衝突,執行回滾
$ORACLE_HOME/OPatch/opatch rollback -id <補丁號>
6.檢測空間是否充足
6.1 grid用戶執行,創建txt文件並寫入patch路徑
cat /tmp/patch_list_gihome.txt
<UNZIPPED_PATCH_LOCATION>/30116789/30125133
<UNZIPPED_PATCH_LOCATION>/30116789/30122149
<UNZIPPED_PATCH_LOCATION>/30116789/30122167
<UNZIPPED_PATCH_LOCATION>/30116789/
<UNZIPPED_PATCH_LOCATION>/30116789/29401763
6.2 grid用戶執行,空間檢查命令
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_gihome.txt
6.3 oracle用戶執行,創建txt文件並寫入patch路徑
cat /tmp/patch_list_dbhome.txt
<UNZIPPED_PATCH_LOCATION>/30116789/30125133
<UNZIPPED_PATCH_LOCATION>/30116789/30122149
6.4 oracle用戶執行,空間檢查命令
$ORACLE_HOME/OPatch/opatch prereq CheckSystemSpace -phBaseFile /tmp/patch_list_dbhome.txt
7.關閉數據庫和監聽
srvctl stop database -d xxx
srvctl stop listener
srvctl stop scan_listener
8.打gi補丁
1個節點打完才能打另一個節點
root用戶執行:
<GRIDHOME_DIR>/opatchauto apply <UNZIPPED_PATCH_LOCATION>/30116789
9.打jvm補丁
1個節點打完才能打另一個
oracle用戶執行:
cd <SOFT_DIR>/xxx
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
$ORACLE_HOME/OPatch/opatch apply
10.運行jvm腳本
跑jvm腳本,數據庫打開到update狀態
sqlplus / as sysdba
SQL> startup upgrade
SQL> alter pluggable database all open upgrade;
SQL> quit
cd $ORACLE_HOME/OPatch
./datapatch -verbose
sqlplus / as sysdba
SQL> shutdown immediate
11.運行gi腳本
srvctl start database -d xxx
sqlplus / as sysdba
SQL> alter pluggable database all open;
SQL> exit
cd $ORACLE_HOME/OPatch
./datapatch -verbose
編譯無效存儲對象
sqlplus / as sysdba
@?/rdbms/admin/utlrp.sql
12.檢查
集羣狀態檢查
crsctl stat res -t
檢查大頁
檢查監聽、服務
軟件補丁版本
opatch lsinv
opatch lspatches
數據庫裏補丁註冊版本
set lin 200
col action_time for a30
col namespace for a10
col BUNDLE_SERIES for a10
col action for a10
col version for a25
col comments for a40
select * from dba_registry_history;