数据库管理 2023-05-16
上一期展示了如何安装19c rac,将继续展现rac版本升级等相关操作。
1 回头处理
因为操作系统不是我装的,所以在上一期其实有个问题是忘记创建/u01的逻辑卷并单独挂载,因此今天第一件事情是处理这件事情:
/u01/app/19.0.0/grid/bin/tfactl stop
/u01/app/19.0.0/grid/bin/crsctl stop crs
fdisk /dev/sda #以实际磁盘为准将剩余空间划成一块分区
partprobe /dev/sda
pvcreate /dev/sda4
vgcreate u01 /dev/sda4
lvcreate -l 100%vg -n u01 u01
mkfs.xfs /dev/mapper/u01-u01
mkdir /a01
mount /dev/mapper/u01-u01 /a01
mv /u01/* /a01
umount /a01
mount /dev/mapper/u01-u01 /u01
vim /etc/fstab #添加以下内容
/dev/mapper/u01-u01 /u01 xfs defaults 0 0
/u01/app/19.0.0/grid/bin/crsctl start crs
/u01/app/19.0.0/grid/bin/tfactl start
检查:
2 升级ahf
定期升级ahf还是很有必要的,特别是能开sr的。
mkdir /u01/ahf
mv ahf-linux_v23.4.0.zip /u01/ahf
cd /u01/ahf
unzip ahf-linux_v23.4.0.zip
./ahf_setup
进行以下操作:
以上操作仅在一个节点执行即可,建议节点间root用户也配置ssh互信。
检查:
3 升级gi及db
- 从12c开始,对于安装了gi和db的实例来说,可以使用root通过opatchauto命令同时升级gi和db。(在补丁搜索是选择system patch)
- 对于rac集群来说可以通过rolling方式,一个实例一个实例升级gi和db,opatchauto会避免出现两个实例同时升级。
- 如果是adg环境,需要先在备库安装升级补丁再在主库升级。
- 执行ojvm升级仍需要关闭数据库实例,可分实例执行操作。
3.1 拷贝所需文件
mkdir /u01/1916
mv p34086870_190000_linux-x86-64.zip /u01/1916 #ojvm 19.16
mv p6880880_190000_linux-x86-64.zip /u01/1916 #opatch
mv p34130714_190000_linux-x86-64.zip /u01/1916 #system patch 19.16
chmod 777 -r /u01/1916
3.2 升级opatch
在进行补丁升级之前,需要先对opatch补丁工具进行升级,需要升级版本以及下载地址详见补丁中的readme.html:
需要替换原有的opatch:
mv /u01/app/19.0.0/grid/opatch /home/grid/opatch_bak_19.3
mv /u01/app/oracle/product/19.0.0/dbhome_1/opatch /home/oracle/opatch_bak_19.3
su - grid
cd /u01/1916
unzip p6880880_190000_linux-x86-64.zip
su - root
mv /u01/1916/opatch /u01/app/19.0.0/grid
su - oracle
cd /u01/1916
unzip p6880880_190000_linux-x86-64.zip
mv opatch /u01/app/oracle/product/19.0.0/dbhome_1/
检查:
3.3 升级gi与db
- 解压补丁包:
su - grid
cd /u01/1916
unzip p34130714_190000_linux-x86-64.zip
- 执行补丁冲突检查:
su - grid
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/34133642
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/34160635
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/34139601
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/34318175
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/33575402
su - oracle
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/34133642
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -phbasedir /u01/1916/34130714/34160635
所有检查passed即可:
- 分实例轮流执行以下操作:
su -
cd /u01/1916/34130714
/u01/app/19.0.0/grid/opatch/opatchauto apply ./
#如出现异常需要根据日志处理后执行:
/u01/app/19.0.0/grid/opatch/opatchauto resume
#本次升级过程中,第一个节点gi补丁应用失败,是因为gi家目录下部分文件仍然存在调用现象,经排查是安装进程遗留仍在调用部分lib文件。因此建议新装rac集群所有服务器节点都重启一次。
整个升级流程其实是再次进行补丁检查,确认无问题后关闭数据库与crs,然后开始按顺序开始db升级、gi升级,然后启动crs(包含数据库),最后执行补丁包含的sql patch。这里一个节点的升级时间大概是10-20分钟的样子,不分节点因为需要执行sql patch,因此时间会加长不少(本次超过了40分钟)。
3.4 应用sql变更
在所有节点完成上述升级操作后,仅需在一个节点执行以下命令,dg环境该操作仅需在主库执行:
sqlplus / as sysdba
sql> alter pluggable database all open;
sql> exit;
cd $oracle_home/opatch
./datapatch -verbose
该操作虽然在readme文档中要求执行,但是在日志中该语句是在最后一步执行了的:
由于本次还要升级ojvm,该操作放到ojvm补丁升级完成后执行。
4 升级ojvm
分实例轮使用oracle用户流执行以下操作:
4.1 解压补丁
cd /u01/1916
unzip p34086870_190000_linux-x86-64.zip
4.2执行补丁冲突检查:
cd /u01/1916/34086870
$oracle_home/opatch/opatch prereq checkconflictagainstohwithdetail -ph ./
4.3 升级ojvm
sqlplus / as sysdba sql> shutdown immediate sql> exit;
cd /u01/1916/34086870
$oracle_home/opatch/opatch apply
升级ojvm的操作就比较快了。
sqlplus / as sysdba sql> startup sql> exit;
4.4 应用sql变更
在所有节点完成上述升级操作后,仅需在一个节点执行以下命令,dg环境该操作仅需在主库执行:
sqlplus / as sysdba
sql> alter pluggable database all open;
sql> exit;
cd $oracle_home/opatch
./datapatch -verbose
这里也可以看到dbru的sql变更是已经应用了的。
5 最终验证
至此升级完全结束。
总结
本文不包含one-off patch,需要升级此类补丁请阅读readme文件。
后面还有exadata x9m与这套库之间搭建adg的操作,也会形成文档,预计要等一段时间了。
老规矩,知道写了些啥。