1. Oracle 11g PSU补丁安装实战指南
作为Oracle DBA,定期安装PSU补丁是保障数据库安全稳定运行的重要工作。本文将基于Linux 7环境下Oracle 11.2.0.4数据库的33575261 PSU补丁安装过程,分享详细的实战经验和避坑指南。
PSU(Patch Set Update)是Oracle发布的季度补丁集,包含关键安全修复和重要问题修正。与一次性补丁不同,PSU采用累积式发布,每个新版本都包含之前所有PSU的内容。对于生产环境,及时安装PSU补丁可以修复已知漏洞,避免潜在的系统风险。
1.1 环境准备与注意事项
在开始安装前,需要确认以下环境信息:
- 操作系统:Linux 7.x
- Oracle数据库版本:11.2.0.4
- PSU补丁包:33575261(包含DB PSU 33477185)
- OPatch工具版本:11.2.0.3.36或更高
重要提示:安装PSU前必须备份整个ORACLE_HOME目录。我曾遇到过因补丁安装失败导致数据库无法启动的情况,幸好有完整备份才能快速恢复。
2. 已部署数据库的PSU安装流程
2.1 安装前准备工作
2.1.1 系统任务检查与处理
首先检查系统中可能影响安装的定时任务:
bash复制# 检查root用户定时任务
su - root
crontab -l
# 检查oracle用户定时任务
su - oracle
crontab -l
建议临时注释掉与数据库相关的定时任务(如备份脚本),待PSU安装完成后再恢复。
2.1.2 数据库状态检查与处理
连接数据库检查无效对象:
sql复制sqlplus "/as sysdba"
set linesize 200 pagesize 999
select owner,object_name,object_id,data_object_id,object_type,status
from dba_objects where status<> 'VALID';
创建无效对象备份表:
sql复制create table sys.t_invilid_objects
as
select owner,object_name,object_id,data_object_id,object_type,status
from dba_objects where status<> 'VALID';
临时关闭数据库中的job任务:
sql复制alter system set job_queue_processes =0;
2.1.3 数据库备份策略
对于重要生产数据库,建议启用闪回功能创建还原点:
sql复制-- 如果数据库未开启闪回,需要先启用
alter database flashback on;
-- 创建还原点
create restore point before_psu guarantee flashback database;
完整备份ORACLE_HOME目录(使用root用户):
bash复制cd /u01/app/oracle/product/11.2.0/
tar -czvf db_1_$(date +%F).tar.gz ./db_1
2.2 OPatch工具准备
上传并更新OPatch工具:
bash复制cd /u01/psu
unzip -q p6880880_112000_Linux-x86-64-11.2.0.3.36.zip -d $ORACLE_HOME
# 验证OPatch版本
$ORACLE_HOME/OPatch/opatch version
经验分享:OPatch版本必须与PSU补丁要求匹配。我曾因使用旧版OPatch导致补丁安装失败,浪费了大量排查时间。
2.3 PSU补丁安装过程
2.3.1 补丁包解压与检查
解压PSU补丁包:
bash复制cd /u01/psu
unzip -q p33575261_112040_Linux-x86-64.zip
检查补丁冲突:
bash复制cd /u01/psu/33575261/33477185
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
2.3.2 正式安装PSU补丁
执行安装命令:
bash复制opatch apply
安装过程中会提示两次确认,均输入"y"继续。
常见问题处理:
- 如果报错"Prerequisite check 'CheckSystemCommandAvailable' failed",需要安装psmisc包:
bash复制
yum install -y psmisc
2.3.3 安装后验证
检查已安装补丁:
bash复制opatch lsinv
预期输出应包含类似信息:
code复制Patch description: "Database Patch Set Update : 11.2.0.4.220118 (33477185)"
Created on 15 Dec 2021, 07:23:11 hrs UTC
Sub-patch 33128584; "Database Patch Set Update : 11.2.0.4.211019 (33128584)"
2.4 数据字典升级
启动数据库并升级数据字典:
sql复制startup
cd $ORACLE_HOME/rdbms/admin
@catbundle.sql psu apply
@dbmsjdev.sql
exec dbms_java_dev.disable
@utlrp.sql
检查升级日志:
bash复制cat /u01/app/oracle/cfgtoollogs/catbundle/catbundle_PSU_ORCL_APPLY_*.log | grep '^ORA-'
注意:ORA-02303、ORA-00955等错误在PSU安装过程中是常见的,通常可以忽略。但如果出现其他严重错误,需要根据具体情况进行处理。
2.5 安装后验证
检查无效对象变化:
sql复制select owner,object_name
from dba_objects where status<> 'VALID'
minus
select owner,object_name from t_invilid_objects;
验证PSU安装信息:
sql复制set linesize 200
col ACTION_TIME format a30
select * from dba_registry_history;
3. 新建数据库环境的PSU安装方案
对于新安装的Oracle数据库,可以采用更简单的PSU安装流程:
3.1 安装步骤精简版
- 安装Oracle数据库软件(不创建数据库)
- 按照前述方法安装PSU补丁
- 创建数据库
优势:这种方法无需执行数据字典升级步骤,因为创建数据库时会自动使用已打补丁的数据字典。
3.2 具体操作流程
OPatch更新:
bash复制mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_$(date +%F)
unzip -q p6880880_112000_Linux-x86-64-11.2.0.3.36.zip -d $ORACLE_HOME
PSU补丁安装:
bash复制cd /u01/psu/33575261/33477185
opatch apply
4. 常见问题与解决方案
4.1 安装过程中的常见警告
- Linux 7上的链接警告:
code复制/bin/ld: warning: -z lazyload ignored.
这是已知问题,可忽略(参考DOC ID 2071922.1)
- 权限相关警告:
code复制chmod: changing permissions of '.../extjobO': Operation not permitted
这是正常现象,不影响补丁安装
4.2 特定错误处理
问题1:libsqlplus.so权限变更
- 现象:非oracle用户无法使用sqlplus
- 解决方案:
bash复制chmod 644 $ORACLE_HOME/lib/libsqlplus.so
问题2:Oracle Database Vault相关错误
- 参考MOS文档1935120.1处理
问题3:缺少liborasdkbase文件
- 需要先应用补丁24331924,再重新安装PSU
5. 最佳实践建议
- 测试环境验证:生产环境安装前,务必在测试环境验证PSU安装过程
- 维护窗口选择:PSU安装需要停机,选择业务低峰期进行
- 回退计划:准备好完整的回退方案,包括数据库闪回和ORACLE_HOME恢复
- 文档记录:详细记录安装步骤和遇到的问题,便于后续维护
- 补丁策略:制定定期的PSU安装计划,保持数据库处于最新安全状态
我在实际运维中发现,严格按照上述流程操作可以避免90%以上的PSU安装问题。特别是完整的备份和详细的检查步骤,多次帮助我快速解决了安装过程中出现的意外情况。