Oracle数据库opatch补丁操作流程

一、 升级前准备工作

1、 确认数据库版本

使用dba登陆查询当前数据库的版本

SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for 64-bit Windows: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 – Production

2、 查询补丁安装信息

SQL> select * from dba_registry_history;

没有任何记录一般是未安装补丁,也可以在环境设置以后用opatch lsinventory opatch 命令查询当前补丁安装情况。

3、 查询数据库失效对象个数,这个数字记下来记为N1

SQL> SELECT sum(OBJECT_NAME)N1 FROM DBA_OBJECTS WHERE STATUS= 'INVALID';

如果存在失效对象最好先编译一遍

Sql >@?/rdbms/admin/utlrp.sql 

编译完成后重新执行下下面语句,查看当前的实效对象记为N2

SQL> SELECT sum(OBJECT_NAME)N2 FROM DBA_OBJECTS WHERE STATUS= 'INVALID';

SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS= 'INVALID';--将该结果存入excel或者表中,便于补丁完后进行核对。

4、 补丁类型

Oracle数据库补丁一般分为两种CPU和PSU补丁。

Oracle PSU的全称是Patch Set Update,Oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多,且被验证过具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复而且还包含了最新的CPU。PSU通常随CPU一起发布。PSU通常是增量的,大部分PSU可以直接安装,但有些PSU则必须要求安装了上一 个版本的PSU之后才能继续安装,要仔细看各个PSU的Readme文档。

Oracle CPU的全称是Critical Patch Update, Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患。CPU是累积的(Cumulative),即最新的CPU补丁已经包含以往的CPU补丁,所以只要安装最新的CPU补丁即可。
安全漏洞整改时我们要安装的是CPU补丁。

5、 查询补丁信息

登陆oracle官网安全专题http://www.oracle.com/technetwork/topics/security点击learn More,找到Critical Path Update Advisory

打开以后可以看到oracle发布的补丁的列表,里面包含了oracle产品发布的补丁。

6、 补丁下载

例如我们当前的oracle的版本为10.2.0.5,该版本的最后更新补丁为2013年 7月份,点击上图红色链接后可以看到10.2.0.5的数据库补丁。

注:下载使用metalink的账号,依照服务器的类型下载相应版本的补丁即可。如果没有oracle 的metalink账号无法下载补丁。

7、 数据库备份工作

在补丁升级前做好数据库的备份工作,使用rman或者导出数据文件方式进行数据库的全备。条件允许的情况下操作系统最好也进行一次备份。

所有以上操作做完后我们可以进行补丁安装工作了。

二、 补丁安装操作

1、 阅读补丁安装要求

每个补丁下载后的压缩包均会包含一份README.html 在安装前需要仔细阅读。一般会标明该补丁适用的数据库版本和操作系统版本,修复了哪些BUG等,还会有相关的提示信息。

2、 环境设置

2.1、Windows环境下

进入计算机属性→高级系统设置→系统属性→环境变量

编辑path在path末尾加上%ORACLE_HOME%\OPatch或者在cmd 下set path=%path%;%ORACLE_HOME%\OPatch;

2.2、Linux下的环境变量设置

使用oracle 安装用户,设置ORACLE_HOME以后export PATH=$ORACLE_HOME/OPatch:$PATH。

2.3、OPATCH命令测试

环境变量设置成功后测试OPatch命令是否可用,终端下opatch –help,可以看到相关信息表示环境变量设置成功。

3、 查询补丁安装信息

操作系统下查看当前补丁安装情况opatch lsinventory –patch

4、 停掉监听和oracle服务

4.1、Windows下关闭服务

在服务里关闭Oracle相关服务进程,停掉监听和oracle服务。关闭PLSQL客户端,关闭SQLPLUS界面。

4.2、Linux下关闭服务

shutdown 掉所有实例,关闭监听和oracle 相关进程。如果有安装GI和其他使用Oracle 的应用一并停止,退出SQLPLUS界面。

5、 安装补丁

在补丁目录下执行opatch apply。例如我的补丁解压在E:\13460968,那就先CD到该目录,然后执行opatch apply

注意:windows下有时候会出现所有oracle进程关闭,但是命令执行后依然会出现D:\oracle\product\10.2.0\db_1\bin\oci.dll 占用的错误。

linux下出现进程占用时一般是sqlplus 进程未关闭,可以用fuser查询是什么用户占用,但是强制kill时候数据库启动的时候可能会报错。

去到该目录找到该文件改名,例如改成oci.dllbak,如果执行过补丁回退操作记得改回来,重新执行opatch apply。

选择y,下一步等待补丁安装完毕即可。

6、 启动数据库

Windows先在服务中启动oracle的服务和监听。以sysdba登陆系统。

Linux 下正常启动oracle实例和监听。以sysdba登陆系统。

7、 执行脚本,更新补丁信息到数据库

执行补丁包中的目录下的脚本,等待脚本运行完毕即可。Linux找到补丁目录执行即可。

sql>@E:\13460968\files\Bundle\Patch14\catcpu.sql

注意:不同补丁集位置可能有所不同,但一般都是有该脚本。

8、 编译失效对象,执行以下语句

Sql >@?/rdbms/admin/utlrp.sql

注意:大部分失效对象错误是可以忽略的,具体类型可以用如下命令去检查。

SQL> SELECT sum (OBJECT_NAME)N3 FROM DBA_OBJECTS WHERE STATUS='INVALID'; 

查看N3和第一张第3节的N2比对下,看是否新增失效对象,如果有查看具体的失效对象是什么,利用第一章节3小节得到的列表比对,如果不能处理咨询数据库管理员处理。

9、 查询补丁更新的信息

select * from dba_registry_history;

可以查看到刚刚安装的补丁的相关信息。(这里我安装了一次,卸载了一次,最后是刚刚安装成功的信息都记录到了数据库)。命令行下执行Opatch lsinventory opatch

整个安装流程结束,数据库正常。

三、 回滚操作

一般情况下在不确定问题原因的情况下咨询DBA进行检查,确定问题原因,在无法查证原因的情况下可以回退,具体的回滚操作命令如下。

1、如果补丁应用后数据库异常或者发生BUG,可以利用Opatch回滚补丁更新的操作。

2、关闭oracle相关服务,参照第二节2小节设置环境变量,执行如下命令,红色部分为安装补丁的ID。

opatch rollback -id 13460968

3、执行完毕后 启动oracle相关服务,windows记得恢复重命名的dll文件。

4、查询数据库是否可以正常启动。

5、回滚完毕以后使用sysdba用户执行roolback脚本

Sql>@E:\13460968\files\Bundle\Patch14\ catcpu_rollback.sql

6、检查数据库是否正常。

注意:数据库补丁升级工作需要停应用和相关服务,在升级前一定要进行数据库的备份工作。

以上所述是小编给大家介绍的Oracle数据库opatch补丁操作流程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Linux 自动备份oracle数据库详解

    Linux 自动备份oracle数据: 曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然说oracle可以有方法还原,但并不是彻底的. 所以,在工作中,不管是开发还是维护,备份数据库是非常有必要. 简单实用的晚间自动备份数据库小案例 步骤一.创建备份脚本,暂且命名为orabak.sh #路径名,指定备份的路径 FILEPATH = /oracle/orabak #根据指定日期格式,定义备份数据库文件名 FILENAME = `date + %

  • Oracle触发器trigger详解

    触发器相关概念及语法 概述 本篇博文中主要探讨以下内容: 什么是触发器 触发器的应用场景 触发器的语法 触发器的类型 案例 数据: 触发器的概念和第一个触发器 数据库触发器是一个与表相关联的,存储的PL/SQL 语句. 每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列. 举个简单的例子: 当员工表中新增一条记录后,自动打印"成功插入新员工" create or replace trigger inser

  • oracle 创建字段自增长实现方式

    mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能. 因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式. CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; 解析: 1)INCREMENT BY用

  • 设置oralce自动内存管理执行步骤

    设置oralce自动内存管理 启用oracle自动内存管理需要shutdown ,restart 1.确定sga pga内存大小: 复制代码 代码如下: SHOW PARAMETER TARGET 2.确定自数据库启动以来pga最大的使用大小: 复制代码 代码如下: select value from v$pgastat where name='maximum PGA allocated'; 3.计算memory_target大小: 复制代码 代码如下: memory_target = sga_

  • ORACLE实现自定义序列号生成的方法

    实际工作中,难免会遇到序列号生成问题,下面就是一个简单的序列号生成函数 (1)创建自定义序列号配置表如下: --自定义序列 create table S_AUTOCODE ( pk1 VARCHAR2(32) primary key, atype VARCHAR2(20) not null, owner VARCHAR2(10) not null, initcycle CHAR(1) not null, cur_sernum VARCHAR2(50) not null, zero_flg VAR

  • mysql数据库迁移至Oracle数据库

    本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracle SQL Developer 4.0.0.12.84(点击可进入下载页面) 特别说明:最初我用的一直是高版本的SQL Developer,但在数据库移植到大概两分钟的时候,总是报错,而错误信息又不明确.最后换成 Oracle SQL Developer 4.0.0.12.84,才把问题解决掉!如果

  • 提取oralce当天的alert log的shell脚本代码

    提取oralce当天的alert log的shell脚本 复制代码 代码如下: #/bin/sh#get alert of everyday#then name of file is everyday_alert.shdir="/oracle/admin/bbdz/bdump"num=$(cat -n ${dir}/alert_bbdz.log | grep "`date|cut -c 1-10`"|head -n 1 |awk '{print $1}') tail

  • Oracle数据库ORA 54013错误的解决办法

    ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 -- 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引.现在Oracle 11允许我们直接在表上使用虚拟列来存储表达式.虚拟列的值是不存储在磁盘的,它们是在查询时根据定义的表达式临时计算的.我们不能往虚拟列中插入数据,我们也不能隐式的添加数据到虚拟列,我们只能使用物理列来插入数据.然后可以查询

  • Oralce 归档日志开启与关闭示例

    查看oracle数据库是否为归档模式 SQL> select name,log_mode from V$database; NAME LOG_MODE ------------------ ------------------------ TEST NOARCHIVELOG SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_

  • Oralce数据导入出现(SYSTEM.PROC_AUDIT)问题处理方法

    将A数据的USERNAME用户的数据导出后,再导入到B数据库中的USERNAME时,在USERNAME用户下在执行表数据查询时出现如下问题: ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必须声明标识符 'SYSTEM.PROC_AUDIT' ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored 出现这个问题是由于A数据库打开了审计,而导入到B数据库时,B数据库审计没有打开,数据库中没有SYSTEM.PROC_AUDIT对

  • oralce和db2兼容开发注意事项

    数据库兼容,在开发项目过程中,难免会遇到 更改数据库,或者后期 项目升级,也可能会遇到这种情况,这里就说明下oralce和db2兼容开发注意事项. 兼容oralce.db2开发注意事项(前提是db2版本是9.7,且是开启PLSQL编译选项之后创建的数据库):  1. 在like 之后若使用了表字段,应统一改成使用locate函数 如:   oralce写法:    select * from fw_right a where '03' like a.rightid||'%';   兼容写法:  

  • oracle 数据按主键删除慢问题的解决方法

    问题描述: 根据表主键id删除一条数据,在PL/SQL上执行commit后执行时间都大于5秒.!!! 问题分析: 需求是删除一个主表A,另有两个附表建有此表的主键ID的外键.删除A表的数据级联删除另两个表的关联数据.增删改查使用hibernate实现. 一开始一直以为是hibernate的内部处理上有关联操作导致的删除和更新数据缓慢.所以将原先使用hibernate的saveOrupdate方法,改查jdbc的 sql语句来处理update和delete数据操作.但是依然没效果!!! 怀疑数据库

  • VMware Workstation/Fusion 中安装 Fedora 23/24 及其他 Linux 系统时使用 Open VM Tools 代替 VMware Tools 增强工具的方法

    VMware Workstation/Fusion 分别是 Windows/Linux 和 macOS 下面对应的桌面虚拟化软件.过去,在 VMware 中安装了操作系统虚拟机后,需要在虚拟机中再安装 VMware Tools 增强工具用来实现宿主机和虚拟机之间的文件共享.虚拟机显示分辨率自适应调节.虚拟机显示能力增强及 3D 加速等功能. 但随着 Linux 系统内核及周边环境的不断发展,目前 VMware 已经不再推荐在 Linux 虚拟机中安装 VMware 官方的增强工具了,转而推荐用户

  • ReactNative (API)AsyncStorage存储详解及实例

    AsyncStorage存储类似Android中的sharedpreference存储或者IOS中的NSDefaultUser不过ReactNative中的AsyncStorage只能存储字符串类型 常用方法: getItem(key:string,callback?:?(error:?Error,result:?string)=>void) 静态方法,该通过key字段来进行查询存储的数据,把该结果值作为参数传入第二个callback方法.如果发生错误,会把Error对象传入callback方法

  • 查询Oracle中正在执行和执行过的SQL语句

    查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value 其它网友给出的正

随机推荐