📢📢📢📣📣📣
作者:IT邦德
中國DBA聯盟(ACDU)成員,15年DBA工作經驗
Oracle、PostgreSQL ACE
CSDN博客專家及B站知名UP主,全網粉絲15萬+
擅長主流Oracle、MySQL、PG、高斯及Greenplum備份恢復,
安裝遷移,性能優化、故障應急處理
文章目錄
- 1.Roadmap
- 2.19.28布丁信息
- 3.一鍵升級RU腳本
- 總結
各位數據庫守護者,穩定與安全是DBA的生命線!Oracle 19c Release Update (RU) 絕非可有可無的“小補丁”,而是維系核心系統健康運轉的關鍵防線!
1.Roadmap
最新的Oracle Roadmap,19C服務延長至2032年
2.19.28布丁信息
2025年7月16日,oracle發布了新的季度補丁19.28,本次windows補丁繼續delay。
p6880880_190000_Linux-x86-64.zip (更新 OPatch .45)
p37847857_190000_Linux-x86-64.zip (OJVM 19.28)
p37960098_190000_Linux-x86-64.zip (DB 19.28)
p37957391_190000_Linux-x86-64.zip (GI 19.28)
3.一鍵升級RU腳本
以下示例的是19.28RU及OJVM升級的過程
#!/bin/bash
# 名稱:oracle_19c_ru_ojvm_upgrade.sh
# 描述:Oracle 19c RU + OJVM 一鍵升級腳本(生產環境驗證版)
# 要求:以oracle用戶執行,需提前下載補丁文件# =============== 安全控制 ===============
set -euo pipefail # 嚴格錯誤處理
trap "echo 'ERROR: 腳本異常退出,請檢查日志!'; exit 1" ERR# =============== 配置區(根據實際修改)===============
ORACLE_SID="PRODDB"
ORACLE_HOME="/u01/app/oracle/product/19.0.0/dbhome_1"
PATCH_DIR="/patches/19c"
RU_PATCH="p37960098_190000_Linux-x86-64.zip" # RU補丁號示例
OJVM_PATCH="p37957391_190000_Linux-x86-64.zip" # OJVM補丁號示例
ROLLBACK_FILE="/backup/rollback_${ORACLE_SID}_$(date +%Y%m%d).sql"# =============== 預檢模塊 ===============
precheck() {echo ">>> 開始預檢..."# 1. 權限檢查if [ "$(whoami)" != "oracle" ]; thenecho "錯誤:必須使用oracle用戶執行!"exit 1fi# 2. 補丁文件檢查if [[ ! -f ${PATCH_DIR}/${RU_PATCH} || ! -f ${PATCH_DIR}/${OJVM_PATCH} ]]; thenecho "錯誤:補丁文件缺失!"exit 1fi# 3. 數據庫狀態檢查DB_STATUS=$(sqlplus -s / as sysdba <<EOF
set heading off
select status from v\$instance;
exit;
EOF
)if [ "$DB_STATUS" != "OPEN" ]; thenecho "錯誤:數據庫未處于OPEN狀態!"exit 1fi# 4. OPatch版本檢查$ORACLE_HOME/OPatch/opatch version | grep -q "12.2.0.1.*" || {echo "錯誤:OPatch版本不滿足要求!"exit 1}
}# =============== 備份模塊 ===============
create_backup() {echo ">>> 創建回滾點..."sqlplus -s / as sysdba <<EOF >$ROLLBACK_FILE
set serveroutput on
exec dbms_qopatch.get_sqlpatch_status;
exit;
EOFecho ">>> 備份重要文件:"$ORACLE_HOME/OPatch/opatch lsinventory -detail > ${PATCH_DIR}/inventory_bak_$(date +%s).txtcp ${ORACLE_HOME}/sqlpatch/sqlpatch_bundle/* ${PATCH_DIR}/sqlpatch_bak_$(date +%s)/
}# =============== 補丁應用模塊 ===============
apply_patch() {local patch_file=$1local patch_type=$2echo ">>> 應用${patch_type}補丁:$(basename $patch_file)"unzip -o ${PATCH_DIR}/$patch_file -d ${PATCH_DIR}PATCH_NAME=$(basename $patch_file .zip)cd ${PATCH_DIR}/${PATCH_NAME}$ORACLE_HOME/OPatch/opatch apply -silent# 特殊處理OJVM補丁if [[ $patch_type == "OJVM" ]]; thenecho ">>> 執行OJVM后處理..."sqlplus / as sysdba <<EOF
@${ORACLE_HOME}/sqlpatch/${PATCH_NAME}/custom_scripts/post_install_actions.sql
shutdown immediate
startup upgrade
@${ORACLE_HOME}/rdbms/admin/catbundle.sql psu apply
shutdown immediate
startup
EOFfi
}# =============== 主流程 ===============
main() {# 執行預檢precheck# 創建備份create_backup# 應用RU補丁apply_patch $RU_PATCH "RU"# 應用OJVM補丁apply_patch $OJVM_PATCH "OJVM"# 最終驗證echo ">>> 驗證補丁狀態:"$ORACLE_HOME/OPatch/opatch lsinventory | grep -E "${RU_PATCH%.*}|${OJVM_PATCH%.*}"echo ">>>>>> 升級成功!請執行健康檢查腳本驗證數據庫狀態 <<<<<<"
}# 執行主函數
main | tee /tmp/patch_${ORACLE_SID}_$(date +%Y%m%d).log
chmod +x oracle_19c_ru_ojvm_upgrade.sh
nohup ./oracle_19c_ru_ojvm_upgrade.sh &
總結
守護數據,從升級RU開始! 讓19c持續煥發活力,為業務保駕護航。