Oracle 11gR2打PSU补丁详细教程

news2024/11/23 12:41:48

1 说明

Oracle的PSU(Patch Set Update)补丁是Oracle公司为了其数据库产品定期发布的更新包,通常每季度发布一次。PSU包含了该季度内收集的一系列安全更新(CPU:Critical Patch Update)以及一些重要的错误修复。PSU旨在提供一个简单的方法来应用一系列已经被验证过的、重要的更新,从而减少单独安装多个补丁所带来的复杂性和潜在风险。

此次打的补丁集是201020,步骤大致如下:

  1. 备份 ORACLE_HOME
  2. 更新OPatch
  3. 冲突检查
  4. 应用GI PSU
  5. 应用DB PSU
  6. 应用OJVM PSU
  7. SQL文件加载

2 准备阶段

2.1 收集环境信息

参数参数值
数据库版本11.2.0.4.0 - 64bit
GI home/u01/app/11.2.0/grid
DB home/u01/app/oracle/product/11.2/db_1
One-off Patch
PSU

2.2 PSU补丁下载

从MOS上下载所需的PSU补丁文件。

一、登录MOS网站 My Oracle Support

二、查找文档 Oracle Support Document 2118136.2

三、选择下载类型

image.png

四、版本号

image.png

五、下载最新的PSU补丁

可以看到,11gR2最新的补丁于2020年10月发布的,可以将数据库升级到11.2.0.4.201020版本,后续已经没有更新。

image.png

2.3 备份数据库

打PSU补丁之前最好备份一下GI home和DB home。防止打补丁失败,没有备份的话,就需要重建集群了。

一、备份DB home

$ cd /u01/app/oracle/product/11.2
$ tar -pcvf oracle_home_bkup.tar db_1

恢复操作(参考 Note 565017.1):

$ cd /u01/app/oracle/product/11.2
$ mv db_1 db_1_bkup
$ tar -pxvf oracle_home_bkup.tar

二、备份GI home

$ cd /u01/app/11.2.0
$ tar -pcvf gi_home_bkup.tar grid

恢复参考db home。

2.4 熟悉升级步骤

打补丁前,应该先看一遍补丁包里的README.html文件,熟悉操作过程和步骤。

image.png

3 更新OPatch

OPatch工具是一个补丁的应用程序,主要用于安装、移除或回滚补丁包。

3.1 下载

当前PSU补丁要求OPatch版本在11.2.0.3.23或更高才能被应用。当前版本不满足要求:

image.png

在MOS中下载最新版本的OPatch工具:Patch 6880880

image.png

3.2 GI更新OPatch

在集群的每个节点上,滚动进行以下操作,完成GI更新OPatch。

一、移除$ORACLE_HOME/OPatch

root用户执行,也相当于做了备份。

[root@r11gn1 patchs]# cd /u01/app/11.2.0/grid/
[root@r11gn1 grid]# mv OPatch OPatch.240911.bak
[root@r11gn1 grid]# ll | grep OPatch
drwxr-xr-x  8 grid oinstall  4096 Apr  3 00:33 OPatch.240911.bak

二、解压缩并赋权

[root@r11gn1 patchs]# unzip -q p6880880_112000_Linux-x86-64.zip -d /u01/app/11.2.0/grid/
[root@r11gn1 patchs]# cd /u01/app/11.2.0/grid
[root@r11gn1 grid]# chown -R grid:oinstall OPatch

三、版本检查

image.png

3.3 DB更新OPatch

与刚刚的操作类似,在集群的每个节点上,滚动进行以下操作,完成DB更新OPatch。

一、移除$ORACLE_HOME/OPatch

root用户执行,也相当于做了备份。

[root@r11gn1 grid]# su - oracle
[oracle@r11gn1 ~]$ cd $ORACLE_HOME
[oracle@r11gn1 db_1]$ mv OPatch OPatch.240911.bak

二、解压缩并赋权

[root@r11gn1 patchs]# unzip -q p6880880_112000_Linux-x86-64.zip -d /u01/app/oracle/product/11.2/db_1/
[root@r11gn1 patchs]# cd /u01/app/oracle/product/11.2/db_1/
[root@r11gn1 db_1]# chown -R oracle:oinstall OPatch

三、版本检查

image.png

4 检查Inventory信息

在开始补丁应用程序之前,检查GI和DB的Inventory信息的一致性。

一、GI检查Inventory信息

[root@r11gn1 db_1]# su - grid
[grid@r11gn1 ~]$ $ORACLE_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE_HOME

二、DB检查Inventory信息

[root@r11gn1 db_1]# su - oracle
[oracle@r11gn1 ~]$ $ORACLE_HOME/OPatch/opatch lsinventory -detail -oh $ORACLE_HOME

如果成功,会列出安装在主目录下的Oracle组件。可以将输出结果保存下来,做应用补丁之前的状态的留存。

5 应用补丁

以下操作,每个节点不要并行执行,采用轮询的方式执行。

5.1 解压缩补丁包

官方建议,解压缩的目录必须为空,不能为/tmp,具有oinstall组的读权限。使用grid用户unzip解压:

[grid@r11gn1 ~]$ cd /u01/app/patchs
[grid@r11gn1 patchs]$ ls
lost+found  p31718723_112040_Linux-x86-64(GI).zip  p6880880_112000_Linux-x86-64.zip
[grid@r11gn1 patchs]$ unzip -q p31718723_112040_Linux-x86-64\(GI\).zip

image.png

5.2 停止EM Agent进程

在打补丁前和回滚补丁前停止EM Agent进程。oracle用户执行:

$ $ORACLE_HOME/bin/emctl stop dbconsolename.

5.3 一次性补丁冲突检测

检查要安装的补丁和已经安装的一次性补丁是否存在冲突。

[grid@r11gn2 patchs]$ /u01/app/11.2.0/grid/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u01/app/patchs/31718723/

Oracle Interim Patch Installer version 11.2.0.3.47
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/11.2.0/grid
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/11.2.0/grid/oraInst.loc
OPatch version    : 11.2.0.3.47
OUI version       : 11.2.0.4.0
Log file location : /u01/app/11.2.0/grid/cfgtoollogs/opatch/opatch2024-09-11_01-59-15AM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

5.4 打GI补丁

在其中一个节点,用root用户执行下列命令,使用GI home的OPatch:

[root@r11gn1 ~]# /u01/app/11.2.0/grid/OPatch/opatch auto /u01/app/patchs/31718723 -oh /u01/app/11.2.0/grid

image.png

5.5 检查GI补丁应用情况

节点1的GI补丁已经打上。其他节点重复5.1 - 5.5操作。

image.png

5.6 打DB补丁

root用户轮询执行此命令,使用DB home的OPatch:

[root@r11gn1 ~]# /u01/app/oracle/product/11.2/db_1/OPatch/opatch auto /u01/app/patchs/31718723 -oh /u01/app/oracle/product/11.2/db_1

image.png

5.7 检查DB补丁应用情况

成功应用,其他节点滚动执行5.6和5.7操作打DB补丁

image.png

6 打OJVM PSU

6.1 说明

在2014年10月之前,OJVM包含在PSU里面,用于防止9.2.0.8以后任何数据库版本中的Oracle JavaVM漏洞。在2014年10月后,独立出去,需要各自打补丁,依赖于同版本的DB PSU。如果只装了PSU,漏洞扫描就会出现警告。

6.2 下载

下载响应版本的OJVM PSU。

image.png

6.3 上传解压并赋权

[root@r11gn2 patchs]# unzip -q p31668908_112040_Linux-x86-64\(OJVM\).zip
[root@r11gn2 patchs]# chown -R oracle:oinstall 31668908

6.4 冲突检查

[oracle@r11gn2 ~]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /u01/app/patchs/31668908
Oracle Interim Patch Installer version 11.2.0.3.47
Copyright (c) 2024, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/11.2/db_1
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/11.2/db_1/oraInst.loc
OPatch version    : 11.2.0.3.47
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/product/11.2/db_1/cfgtoollogs/opatch/opatch2024-09-11_09-16-38AM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

6.5 应用OJVM补丁

2017以后的OJVM PSU包含以下情况,可以滚动升级:

image.png

6.5.1 停库和服务

关闭当前节点的实例和服务,rong用户执行停当前节点crs:

[root@r11gn1 patchs]# /u01/app/11.2.0/grid/bin/crsctl stop crs

6.5.2 应用

oracle用户执行,输入2次“y”:

[root@r11gn1 ~]# su - oracle
[oracle@r11gn1 ~]$ $ORACLE_HOME/OPatch/opatch apply /u01/app/patchs/31668908

image.png

6.5.3 检查补丁

[oracle@r11gn1 ~]$ $ORACLE_HOME/OPatch/opatch lspatches | grep 31668908
31668908;OJVM PATCH SET UPDATE 11.2.0.4.201020

6.5.4 启动集群

[root@r11gn1 ~]# /u01/app/11.2.0/grid/bin/crsctl start crs

检查服务状态:

image.png

其他节点重复以上操作。

7 SQL文件加载

一、以下步骤将修改后的SQL文件加载到数据库中。在Oracle RAC环境中,仅在一个节点上执行这些步骤就行

cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @catbundle.sql psu apply
SQL> QUIT

二、关闭所有实例后(如果其他实例未关闭,则STARTUP UPGRADE不成功),在其中一个节点用oracle用户执行

$ srvctl stop instance -d rac
$ cd $ORACLE_HOME/sqlpatch/31668908
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> alter system set cluster_database=false scope=spfile;
SQL> SHUTDOWN
SQL> STARTUP UPGRADE
SQL> @postinstall.sql
SQL> alter system set cluster_database=true scope=spfile;
SQL> SHUTDOWN
SQL> STARTUP

三、在安装补丁的SQL部分之后,一些包可能会变为INVALID。这将在访问时重新编译,或者您可以运行utlrp。sql将它们恢复到VALID状态。oracle用户执行

$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @utlrp.sql

将其他实例启动,至此所有补丁已经应用完成。

8 检查补丁版本

所有节点都检查,确保一致。

OPatch查看:

image.png

视图查看

SQL> 
col ACTION_TIME for a40
col comments for a40
select ACTION_TIME,version,COMMENTS from registry$history;

image.png

9 总结

打PSU过程是比较多的,比较容易出现错误,需要比较细心。必须要做好相应的备份(ORACLE_HOME),打补丁失败后,可以恢复ORACLE_HOME,不至于要重建集群。采用滚动升级,确保就算出现问题,也有节点可以用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集群聊天服务器项目【C++】(四)cmake介绍和简单使用

我们上次用shell命令和vscode编译链接muduo库服务端代码,本章节实现编写CMakeLists.txt来编译项目。本次简单介绍CMake,并用Cmake编译上次的muduo服务器代码。 1.为什么使用cmake 我们在编译项目时,如果编写Makefile的话,常常会…

大数据处理技术:MapReduce综合实训

目录 1 实验名称 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 WordCount词频统计 5.2 HDFS文件读写 5.3 倒排索引 5.4 网页排序——PageRank算法 6 实验结果 6.1 WordCount词频统计 6.2 HDFS文件读写 6.3 倒排索引 6.4 网页排序——PageRank算法 1…

无人机飞手教员组装、调试高级教学详解

随着无人机技术的飞速发展,其在航拍、农业、救援、监测等多个领域的应用日益广泛,对专业无人机飞手的需求也随之增加。作为无人机飞手教员,掌握无人机的高级组装、调试技能不仅是教学的基础,更是培养学生成为行业精英的关键。本教…

面试官问:你为什么对这个职位感兴趣?

当面试官问到你为什么对某个职位感兴趣时,你的回答应该反映出你对该职位的热情,以及你如何能够为公司带来价值。 重点:在面试前一定要去研究下这家公司,包括他们的团队,文化,产品,服务等各个方…

SOMEIP_ETS_109: SD_Do_not_specify_a_port

测试目的: 验证DUT能够拒绝不包含端口号(端口号为0)的SubscribeEventgroup消息。 描述 本测试用例旨在确保DUT遵循SOME/IP协议,当接收到没有指定端口的SubscribeEventgroup消息时,能够正确地拒绝该订阅尝试。 测试…

单链表各种接口的实现(C)

顺序表的优缺点 顺序表的问题 头部和中部的插入删除效率都不行, O ( N ) O(N) O(N)空间不够了,扩容有一定消耗(尤其是异地扩容)开新空间,拷贝数据,释放旧空间扩容逻辑,可能还存在空间浪费 多扩…

Springboot项目总结

1.为了调用写在其他包里面的类的方法 但是不使用new来实现调用这个类里面的方法,这个时候我们就需要将这个类注入到ioc容器里面,通过ioc容器来实现自动生成一个对象。 对ioc容器的理解:自动将一个对象实现new. 考察了and 和 or组合使用&…

vscode技巧-eslint配置

开发环境 jsvue3axios 下载插件 Eslint、Prettfier 配置过程 1.配置eslint 进入settings,输入eslint,在settings.json中替换一下文件 // #每次保存的时候自动格式化 {"editor.codeActionsOnSave": {"source.fixAll.eslint": &…

海康威视摄像机和录像机的监控与回放

文章目录 海康威视摄像机和录像机的监控与回放1、海康威视监控设备简介1.1、摄像机二次开发1.1.1:协议选择1.1.2:ffmpeg软件转流 2、各种流媒体协议介绍2.1:流媒体协议介绍2.1.1:RTSP (实时流传输协议)2.1.2:RTMP (实时…

Java语言程序设计基础篇_编程练习题**18.26 (创建一个迷宫)

目录 题目:**18.26 (创建一个迷宫) 习题思路 代码示例 输出结果 题目:**18.26 (创建一个迷宫) 编写一个程序,在迷宫中寻找一条路径,如图18-13a所示。该迷宫由一个8 x 8 的棋盘表示。路径必须满足下列条件: 路径在迷…

日志收集工具 Fluentd vs Fluent Bit 的区别

参考链接: FluentdFluentd BitFluentd & Fluent Bit | Fluent Bit: Official Manual Fluentd 与 Fluent Bit 两者都是生产级遥测生态系统! 遥测数据处理可能很复杂,尤其是在大规模处理时。这就是创建 Fluentd 的原因。 Fluentd 不仅仅是…

国产化中间件正在侵蚀开源中间件

开源中间件的发展趋势表明,它们将继续在技术创新和生态建设中发挥重要作用,尤其是在云计算、大数据等新兴技术领域。开源中间件如Apache Kafka、RabbitMQ、ActiveMQ和RocketMQ等在市场上有着广泛的应用。它们在技术社区中得到了良好的支持,并…

k8s中控制器的使用

目录 一、什么是控制器 二、控制器常用类型 三、replicaset控制器 1、replicaset功能 2、replicaset参数说明 3、replicaset示例 四、deployment控制器 1、deployment控制器的功能 2、deployment控制器示例 (1)版本迭代 (2&#x…

MySql的基础讲解

一、初识MySql 数据库:按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享 的、统一管理的大量数据的集合; OLTP:联机事务处理,主要是对数据库的增删改查。 OLTP 主要用来记录…

【研赛论文】数学建模2024华为杯论文word/latex模板

国赛结束,研究生瞩目的研赛马上就要来了,相信研究生同学也是在努力的准备当中,在这里祝愿大家能够获得一个好的名次。一举冲出重围,拿下国奖。在数模比赛当中,论文是参赛者唯一能够与评阅老师进行沟通的方式&#xff0…

【Python爬虫系列】_021.异步请求aiohttp

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈

本地部署大模型并使用知识库Windows下Ollama+Docker+MaxKB安装的记录

概要 本文介绍本地部署大模型和知识库的小白方法,可以运行较多种类的大模型,使用的软件为docker和ollama以及MaxKb作为知识库前端。 下载 各安装包可以百度去官网或者github下载或使用,也可以点击下面的的链接和我下载相同的版本。 ollama…

uniapp child.onFieldChange is not a function

uni-forms // 所有子组件参与校验,使用 for 可以使用 awiatfor (let i in childrens) {const child childrens[i];let name realName(child.name);if (typeof child.onFieldChange function) {const result await child.onFieldChange(tempFormData[name]);if (result) {…

如何准备教师资格证科目三“学科知识与教学能力”的考试与面试?(理科导向:数学/物理)

如何准备教师资格证科目三“学科知识与教学能力”的考试与面试?(理科导向:数学/物理) ​ 目录 收起 1 前言 1.1 自身经历 1.2 教师资格证的作用 2 知识点题型分数的分布与学习建议 2.1 科目三的知识点分数分布: …

Python 全栈系列271 微服务踩坑记

说明 这个坑花了10个小时才爬出来 碰到一个现象:将微服务改造为并发后,请求最初很快,然后就出现大量的失败,然后过一会又能用。 过去从来没有碰到这个问题,要么是一些比较明显的资源,或者逻辑bug&#xff0…