Oracle-11g升級PSU補丁


Oracle 11g 數據庫軟件PSU升級

1. PSU補丁升級過程

1.1 升級opatch工具

1.1.1 GI環境

# GI HOME
su - root
# 配置環境
export GI_HOME=$(grep '^+ASM' /etc/oratab |awk -F: '{ print $2 }') && echo ${GI_HOME}
# 備份和解壓
[[ -d "${GI_HOME}/OPatch" ]] && mv ${GI_HOME}/OPatch ${GI_HOME}/OPatch_$(date +%Y%m%d) && [[ -f "$(ls p6880880_*_Linux-x86-64.zip)" ]] && unzip -qo p6880880_*_Linux-x86-64.zip -d ${GI_HOME}
# 檢查確認
ls -ld ${GI_HOME}/OPatch*
chown -R grid:oinstall ${GI_HOME}/OPatch
chmod -R +x ${GI_HOME}/OPatch
ls -ld ${GI_HOME}/OPatch*
su - grid -c "opatch version"

# --創建響應文件(2161861.1, 從11.2.0.3.14開始靜默應用補丁不再需要響應文件)
su - grid
[[ -f "${ORACLE_HOME}/OPatch/ocm/bin/emocmrsp" ]] && (sleep 3;echo -e '\n';sleep 3;echo -e 'Y\n')|${ORACLE_HOME}/OPatch/ocm/bin/emocmrsp -no_banner -output /tmp/ocm.rsp

1.1.2 DB 環境

# DB HOME
su - oracle
# 備份
[[ -d "${ORACLE_HOME}/OPatch" ]] && mv ${ORACLE_HOME}/OPatch ${ORACLE_HOME}/OPatch_$(date +%Y%m%d)
ls -ld ${ORACLE_HOME}/OPatch*
# 解壓
unzip -oq p6880880_*_Linux-x86-64.zip -d ${ORACLE_HOME}
# 檢查
ls -ld ${ORACLE_HOME}/OPatch*
${ORACLE_HOME}/OPatch/opatch version

1.2 應用PSU二進制文件

1.2.1 opatch auto方式(適用RAC)

su - root
. /home/grid/.bash_profile
export GI_HOME=$(grep '^+ASM' /etc/oratab |awk -F: '{ print $2 }')
export DB_HOME=$(grep -Ev '^#|^$|+ASM' /etc/oratab |awk -F: '{ print $2 }')
# su - grid -c "(sleep 3;echo -e '\n';sleep 3;echo -e 'Y\n')|${GI_HOME}/OPatch/ocm/bin/emocmrsp -no_banner -output /tmp/ocm.rsp"
su - grid -c "unzip -oq p28317141_112040_Linux-x86-64.zip -d /apps/soft"
export UNZIPPED_PATCH_LOCATION=/apps/soft/28317141
export LANG=C
${GI_HOME}/OPatch/opatch auto ${UNZIPPED_PATCH_LOCATION}/27967757 -ocmrf /tmp/ocm.rsp

# 檢查確認
su - grid -c "${GI_HOME}/bin/crsctl status res -t"
su - grid -c "${GI_HOME}/OPatch/opatch lspatches;${GI_HOME}/OPatch/opatch lsinventory"
su - oracle -c "${DB_HOME}/OPatch/opatch lspatches;${DB_HOME}/OPatch/opatch lsinventory"

1.2.2 opatch(適用僅更新執行oracle home)

-- 單實例環境

su - [grid|oracle]
export PATH=${ORACLE_HOME}/OPatch:${PATH}
export PATCH_PATH=/tmp/27870645
# 解壓
unzip p27870645_112040_<platform>.zip -C /tmp/
# 沖突檢測
cd ${PATCH_PATH}
opatch prereq CheckConflictAgainstOHWithDetail -ph ./

# 安裝補丁
opatch apply

# 結果檢查
opatch lsinventory

# 啟動服務
sqlplus "/ as sysdba" <<-EOF
startup;
quit;
EOF

1.2.3 手工應用補丁

# 1. 關閉DB服務
su - oracle
${ORACLE_HOME}/bin/srvctl stop home -o ${ORACLE_HOME} -s <status file location> -n <node name>

# 2. 關閉集群
su - root
. /home/grid/.bash_profile
${ORACLE_HOME}/crs/install/rootcrs.pl -unlock

# 3. 應用補丁 GI HOME (可能需要 -ocmrf 選項)
su - grid
${ORACLE_HOME}/OPatch/opatch napply -oh ${ORACLE_HOME} -local <UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<OCW Components_number>

${ORACLE_HOME}/OPatch/opatch napply -oh ${ORACLE_HOME} -local <UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<ACFS Components_number>

${ORACLE_HOME}/OPatch/opatch apply -oh ${ORACLE_HOME} -local <UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<DB_PSU_number>

# 4. 應用補丁 DB HOME
su - oracle
<UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<OCW Components_number>/custom/server/<OCW Components_number>/custom/scripts/prepatch.sh -dbhome <ORACLE_HOME>

${ORACLE_HOME}/OPatch/opatch napply -oh ${ORACLE_HOME} -local <UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<OCW Components_number>/custom/server/<OCW Components_number>
${ORACLE_HOME}/OPatch/opatch apply -oh ${ORACLE_HOME} -local <UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<DB_PSU_number>

<UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<OCW Components_number>/custom/server/<OCW Components_number>/custom/scripts/postpatch.sh -dbhome <ORACLE_HOME>

# 5. 啟動集群服務
su - root
. /home/grid/.bash_profile
${ORACLE_HOME}/rdbms/install/rootadd_rdbms.sh
${ORACLE_HOME}/crs/install/rootcrs.pl -patch

# 6. 啟動DB服務
su - oracle
${ORACLE_HOME}/bin/srvctl start home -o <ORACLE_HOME> -s <status file location> -n <node name>

1.3 更新數據字典

su - oracle
sqlplus /nolog << EOF
connect / as sysdba
@?/rdbms/admin/catbundle.sql psu apply
@?/rdbms/admin/utlrp.sql
set lines 168 pages 99
col action_time for a20
col action for a15
col namespace for a12
col version for a18
col id for 99999999
col bundle_series for a15
col comments for a28
prompt db version
select to_char(t1.action_time,'yyyy-mm-dd hh24:mi:ss') action_time,t1.action,t1.namespace,t1.version,id,t1.bundle_series,t1.comments from dba_registry_history t1 order by t1.action_time;
prompt 
prompt comp info
col comp_name for a48
col comp_id for a12
col version for a16
col status for a12
col modified for a20
select t2.comp_id, t2.comp_name, t2.version, t2.status, to_char(to_date(t2.modified,'dd-mm-yyyy hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') modified from dba_registry t2 order by t2.modified,t2.comp_id;
quit;
EOF

1.4 應用OJVM補丁

su - oracle

# 關閉db home的所有服務
srvctl stop database -d orcl

# 沖突檢查
PATCH_TOP_DIR=/apps/soft/28317141
cd ${PATCH_TOP_DIR}/27923163
opatch prereq CheckConflictAgainstOHWithDetail -ph ./

# 安裝補丁
(sleep 3;echo -e 'Y\n';sleep 3;echo -e '\n';sleep 3;echo -e 'Y\n';sleep 3;echo -e 'Y\n')|${ORACLE_HOME}/OPatch/opatch apply

# 結果檢查確認
${ORACLE_HOME}/OPatch/opatch lspatches;${ORACLE_HOME}/OPatch/opatch lsinventory

# 更新數據字典
sqlplus /nolog << EOF
host srvctl start instance -d orcl -i orcl1
connect / as sysdba
alter system set cluster_database=false scope=spfile;
host srvctl stop instance -d orcl -i orcl1
connect / as sysdba
startup upgrade
set lines 200
@?/sqlpatch/27923163/postinstall.sql
alter system set cluster_database=true scope=spfile;
host srvctl stop instance -d orcl -i orcl1
host srvctl start database -d orcl
connect / as sysdba
@?/rdbms/admin/utlrp.sql
set lines 168 pages 99
col action_time for a20
col action for a15
col namespace for a12
col version for a24
col id for 99999999
col bundle_series for a15
col comments for a28
prompt db version
select to_char(t1.action_time,'yyyy-mm-dd hh24:mi:ss') action_time,t1.action,t1.namespace,t1.version,id,t1.bundle_series,t1.comments from dba_registry_history t1 order by t1.action_time;
prompt 
prompt comp info
col comp_name for a48
col comp_id for a12
col version for a16
col status for a12
col modified for a20
select t2.comp_id, t2.comp_name, t2.version, t2.status, to_char(to_date(t2.modified,'dd-mm-yyyy hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') modified from dba_registry t2 order by t2.modified,t2.comp_id;
quit;
EOF

1.5 回退步驟

1.5.1 opatch auto回滾補丁

# 回退二進制文件
export GI_HOME=$(grep '^+ASM' /etc/oratab |awk -F: '{ print $2 }')
export UNZIPPED_PATCH_LOCATION=/apps/soft/28317141
export LANG=C
${GI_HOME}/OPatch/opatch auto ${UNZIPPED_PATCH_LOCATION}/27967757 -rollback -ocmrf /tmp/ocm.rsp

# 回退數據字典
su - oracle
sqlplus /nolog << EOF
connect / as sysdba
COLUMN db_name NEW_VALUE dbname NOPRINT
SELECT name dbname FROM v\$database;
@?/rdbms/admin/catbundle_PSU_&dbname_ROLLBACK.sql
@?/rdbms/admin/utlrp.sql
set lines 168 pages 99
col action_time for a20
col action for a15
col namespace for a12
col version for a18
col id for 99999999
col bundle_series for a15
col comments for a28
prompt db version
select to_char(t1.action_time,'yyyy-mm-dd hh24:mi:ss') action_time,t1.action,t1.namespace,t1.version,id,t1.bundle_series,t1.comments from dba_registry_history t1 order by t1.action_time;
prompt 
prompt comp info
col comp_name for a48
col comp_id for a12
col version for a16
col status for a12
col modified for a20
select t2.comp_id, t2.comp_name, t2.version, t2.status, to_char(to_date(t2.modified,'dd-mm-yyyy hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') modified from dba_registry t2 order by t2.modified,t2.comp_id;
quit;
EOF

1.5.2 opatch回滾補丁

cd ${PATCH_PATH}
opatch rollback -id 27870645

1.5.3 手動回滾補丁

# 1. 關閉DB服務
su - oracle
${ORACLE_HOME}/bin/srvctl stop home -o ${ORACLE_HOME} -s <status file location> -n <node name>

# 2. 關閉集群
su - root
. /home/grid/.bash_profile
${ORACLE_HOME}/crs/install/rootcrs.pl -unlock

# 3. 回滾補丁 GI HOME (可能需要 -ocmrf 選項)
su - grid
${ORACLE_HOME}/OPatch/opatch rollback -local -id <OCW Components_number> -oh ${ORACLE_HOME}

${ORACLE_HOME}/OPatch/opatch rollback -local -id <ACFS Components_number> -oh ${ORACLE_HOME}

${ORACLE_HOME}/OPatch/opatch rollback -local -id <DB_PSU_number> -oh ${ORACLE_HOME}

# 4. 回滾補丁 DB HOME
su - oracle
<UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<OCW Components_number>/custom/server/<OCW Components_number>/custom/scripts/prepatch.sh -dbhome <ORACLE_HOME>

${ORACLE_HOME}/OPatch/opatch rollback -local -id <OCW Components_number> -oh ${ORACLE_HOME} 
${ORACLE_HOME}/OPatch/opatch rollback -local -id <DB_PSU_number> -oh ${ORACLE_HOME}

<UNZIPPED_PATCH_LOCATION>/<GI_PSU_number>/<OCW Components_number>/custom/server/<OCW Components_number>/custom/scripts/postpatch.sh -dbhome <ORACLE_HOME>

# 5. 啟動集群服務
su - root
. /home/grid/.bash_profile
${ORACLE_HOME}/rdbms/install/rootadd_rdbms.sh
${ORACLE_HOME}/crs/install/rootcrs.pl -patch

# 6. 啟動DB服務
su - oracle
${ORACLE_HOME}/bin/srvctl start home -o <ORACLE_HOME> -s <status file location> -n <node name>

1.5.4 更新數據字典

export dbid=$(echo ${ORACLE_SID} | tr '[a-z]' '[A-Z]')
sqlplus -S "/ as sysdba" <<EOF
-- SELECT '/ups/app/oracle/db11g/cfgtoollogs/catbundle/' || 'catbundle_PSU_' || name || '_ROLLBACK_' || TO_CHAR(SYSDATE, 'YYYYMonDD_hh24_mi_ss', 'NLS_DATE_LANGUAGE=''AMERICAN''') || '.log' AS spool_file FROM v$database;
@?/rdbms/admin/catbundle_PSU_${dbid}_ROLLBACK.sql
@?/rdbms/admin/utlrp.sql
EOF

2. 常見問題及處理方案

2.1 在RAC中升級PSU(11.2.0.4.181016)后HAIP發生改變

1) 問題信息

在DB 實例的alert log中,發現升級補丁后重啟實例時,提示gpnp獲取HAIP的警告信息

2)解決方案

原因:在RAC環境中,OCW PSU未應用到DB ORACLE_HOME引起

# 方案1 應用OCW PSU 到DB HOME
su - oracle
export UNZIPPED_PATCH_LOCATION='/apps/soft/28429134'
${UNZIPPED_PATCH_LOCATION}/27735020/custom/server/27735020/custom/scripts/prepatch.sh -dbhome ${ORACLE_HOME}
${ORACLE_HOME}/OPatch/opatch napply -oh ${ORACLE_HOME} -local ${UNZIPPED_PATCH_LOCATION}/27735020/custom/server/27735020
${UNZIPPED_PATCH_LOCATION}/27735020/custom/server/27735020/custom/scripts/postpatch.sh -dbhome ${ORACLE_HOME}

# 方案2 登錄DB 實例並修改 cluster_interconnects 參數
alter system set cluster_interconnects='169.254.111.210' scope=spfile sid='orcl1';
alter system set cluster_interconnects='169.254.58.170' scope=spfile sid='orcl2';

3) 參考文檔

11.2.0.4 RAC Database Instance Fails to Start with "No connectivity to other instances in the cluster during startup" After Applying 11.2.0.4 OCT 2018 DB PSU (11.2.0.4.181016 DB PSU) (Patch# 28204707) (文檔 ID 2471441.1)

img

總結建議

在RAC環境中僅僅安裝DB PSU累積補丁集的數據庫器上依然存在此隱患。建議在RAC環境上升級GI PSU(gi home and db home都應用PSU補丁)

2.2 DB HOME二進制文件未應用問題

1)問題信息

部署RAC環境時,先應用GI PSU補丁后DBCA建庫,出現DB HOME軟件未能應用。

2)可能原因

  • 數據庫服務器上有多個不同版本的GI 軟件目錄,GI補丁只會應用相同版本補丁到DB HOME

  • 在OCR中沒有注冊成功的數據庫

    • 查找OCR中已注冊DB HOME

      $GRID_HOME/bin/crsctl stat res -p -w "TYPE = ora.database.type" | egrep '^NAME|^ORACLE_HOME'

3) 處理方案

# 重新運行 opatch auto 命令應用指定的軟件目錄
su - root
opatch auto <UNZIPPED_PATCH_LOCATION> -oh <RAC_HOME> -ocmrf <ocm response file>


# 檢查確認
$GRID_HOME/bin/crsctl stat res -p -w "TYPE = ora.database.type" | egrep '^NAME|^ORACLE_HOME'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM