环境:10.2.0.4集群数据库zlm10g(双节点,zlm10g1,zlm10g2)
系统:Windows 2003 Server 64Bit
内存:2G RAM
存储:ASM
目标:把集群数据库从10.2.0.4升级到10.2.0.5,包括集群软件和OEM的Patch安装
一、升级前准备:
1. 查看是否存在无效对象
SQL> select object_name,status from dba_objects where
status='INVALID';
目的是为了可以判断这些无效对象是由升级过程产生的,还是升级前就已经存在的
2. 检查数据库中的时区 (Time Zone) 信息
SQL> select version from v$timezone_file;
2.1 返回值为4
此时数据库中如果含有TZ信息,在升级中无需额外的操作
2.2 返回值大于4
请查阅[ID 553812.1]文档
2.3 如果返回值小于4
执行以下步骤
@?/rdbms/admin/utltzpv4.sql;
select * from sys.sys_tzuv2_temptab;
如果没有返回行,那么在升级过程无需额外操作
如果返回包含TZ的具体列信息,那么升级操作会影响到该TZ信息
如果SYS用户有拥有SCHEDULER对象,那么在升级过程中可以忽略,但是如果有用户数据或用户创建的job,则需要在升级前对这些数据进行备份,升级后删除全部用户创建的job,然后再重建
两种升级的方式:
滚动升级(无停机时间)
非滚动升级(有停机时间)
二、升级集群数据库软件
1. 首先,准备好10.2.0.5的Patch介质:
p8202632_10205_MSWIN-x86-64
2. 停止所有节点的Oracle相关服务和进程
2.1 停止crs资源
emctlstop dbconsole
isqlplusctlstop
lsnrctlstop
srvctlstop service -d zlm10g
srvctlstop databse -d zlm10g
srvctlstop asm -n rac1
srvctlstop asm -n rac2
srvctlstop listener -n rac1
srvctlstop listener -n rac2
srvctlstop nodeapps -n rac1
srvctlstop nodeapps -n rac2
crs_stat-t检查集群资源是否已经全部关闭
srvctlstop crs
2.2 停止服务
运行services.msc,查看Oracle相关服务是否全部已经关闭,另外有
一个Distributed TransactionCoordinator服务也要停止
2.3 停止进程
查看任务管理器中是否有oracle相关的进程在运行,全部关闭之,如:one.exe
3. 备份以下目录(copy至其他路径):
%ORACLE_CRS_HOME%
%ORACLE_HOME%
%ORACLE_INVENTORY%
注意:推荐先对数据库进行RMAN备份
4. 安装集群软件Patch
安装时,路径选择覆盖原路径安装,即crs_1目录
软件安装完毕后,分别在节点1和节点2运行patch102.bat完成实际安装过程,运行完脚本后,系统会自动运行CRS相关服务
5. 检查集群Patch是否正确安装
crsctlquery crs softwareversion
crsctlquery crs activeversion
如果集群Patch正常安装完毕,这2个命令的输出应该都是10.2.0.5.0
三、数据库软件Patch安装
1. 安装介质和升级ClusterWare时用的是同一个:
p8202632_10205_MSWIN-x86-64
2. 关闭Oracle相关服务和进程
2.1 停止crs资源
emctlstop dbconsole
isqlplusctlstop
lsnrctlstop
srvctlstop service -d zlm10g
srvctlstop databse -d zlm10g
srvctlstop asm -n rac1
srvctlstop asm -n rac2
srvctlstop listener -n rac1
srvctlstop listener -n rac2
2.2 停止服务
运行services.msc,查看Oracle相关服务是否全部已经关闭,另外有
一个Distributed TransactionCoordinator服务也要停止
2.3 停止进程
查看任务管理器中是否有oracle相关的进程在运行,全部关闭之,如:one.exe
3. 安装Oracle数据库软件的Patch
安装路径选择之前装数据库软件的同一个目录,即db_1目录
4. 修改集群数据库参数
装完后以sysdba登录系统,修改cluster_database参数为False
sqlplus/nolog
SQL>alter system set cluster_database=falsescope=spfile;
SQL>shutdown immediate
5. 在节点1跑升级脚本,对数据库进行升级
5.1 进入升级模式:
SQL>startup upgrade
5.2 预检一下升级是否符合条件:
SQL>spool patch_info.log
SQL> @?\rdbms\admin\utlu102i.sql
SQL>spool off
关于预检这个脚本,官网对于每个版本,有更多的补充脚本,会提供更新、更详细的预检内容,详情可以查阅 [ID 884522.1]
5.3 开始执行正式的升级脚本:
SQL>spool patch.log
SQL> @?\rdbms\admin\utlupgrd.sql
10gR2该过程持续约30分钟,11gR2大约需要50分钟
5.4 编译升级后产生的无效对象
SQL>spool rp.log
SQL> @?\rdbms\admin\utlrp.sql
SQL>spool off
5.5 检查升级后数据库各组件是否有效
SQL> select comp_id,comp_name,status from sys.dba_registry;
如果升级正常完成,全部组件的status列的值应该都是VALID
四、用OPatch安装10.2.0.5以后的补丁
1. 介质准备及说明
p8350262_10205_Generic (OEM补丁)
p12429524_10205_MSWIN-x86-64
这里要说明一下,打该补丁主要目的,是为了能正常使用OEM对数据库进行管理,由于OEM在10.2.0.4和10.2.0.5上正常运行存在一个bug,详见:[ID1222603.1]
如果不打该OEM补丁,那么在执行dbca,dbua,emca配置OEM时,都会提示无法配置EM,启动Database Control失败,原因是根证书CA在31-DEC-2010失效,而无法使用SSL协议进行通讯,导致无法启动,该bug仅限于以上2个版本的PSR
这里第2个介质,p12429524_10205_MSWIN-x86-64包含了更多的fixed bug,所以如果直接安装12429524这个PSU,那么也可以不用安装8350262,二者选一即可
2. OPatch安装
对于Oracle所有的Interim Patch,即我们说的经常所说的小补丁(PSU),都可以用OPatch来进行安装,这是Oracle官方提供的一个补丁安装脚本,使用起来很简单,目录就放在ORACLE_HOME\OPatch
下面,Windows平台的可执行文件为opatch.bat,把需要安装的补丁解压到某个目录,然后执行“opatch apply +解压目录路径”就可以了,也可以进入解压出来的那个一串数字的目录中,直接执行opatch apply来安装补丁,如果要查看数据库之前了哪些补丁,可以执行opatch lsinventory[-detail],具体命令可以加-help查阅
3. 重新配置OEM
装完补丁以后,如果直接去启动DBconsole还是会遇到无法正常启动,这里需要对其进行重新配置,主要就是3个步骤:
3.1 节点1执行
emctlsecure dbconsole -reset
3.2 节点2执行
emctlsecure dbconsole
注意,是不带-reset参数的命令
3.3 节点1(或节点2)启动dbconsole
emctlstart dbconsole
五、收尾
至此,全部升级工作顺利结束,检查一下是否有遗漏的Oracle服务和进程未开启,如果有的话,全部开启
services.msc
crs_stat -t
emctlstart dbconsole
isqlplusctlstart
lsnrctlstart
srvctlstart service -d zlm10g
srvctlstart database -d zlm10g
srvctlstart instance -d zlm10g-i zlm10g1
srvctlstart instance -d zlm10g-i zlm10g2
srvctlstart listener -n rac1
srvctlstart listener -n rac2
srvctlstart asm -n rac1
srvctlstart asm -n rac2
srvctlstart nodeapps -n rac1
srvctlstart nodeapps -n rac2
以上命令可选,并非都需要执行一遍,如果crs资源都ONLINE了,那就不需要执行了