Oracle 19c ADG 升级补丁与回退补丁
前提准备:
归档日志调大一点,可以改一下的参数:
alter system set db_recovery_file_dest_size=5g;
查看opt主库监听文件是否齐全。
cd $ORACLE_HOME/network/admin/
一、升级补丁
1、备库备份oracle_home目录
备份oracle_home目录的主要目地是为了一旦补丁应用失败可以立即进行回滚
[oracle@xgedu51 ~]$ cd /opt/
[oracle@xgedu51 opt]$ ls
oracle ORCLfmap rh
[oracle@xgedu51 opt]$ tar czf /backup/oracle_home_backup.tar.gz oracle/
2、备库关闭数据库服务及监听程序
注意:如果主备在生产期间需要停止备库的同步服务
##关闭数据库
sqlplus / as sysdba
shu immediate
exit
##关闭监听
lsnrctl stop
3、备库升级Opatch
1.将两个补丁放入提前创建好的/soft目录
cd /soft/
授权:
chown -R oracle:oinstall /soft
chmod -R 777 /soft
2.在oracle用户下解压到ORACLE_HOME目录下,把原有的替换掉。
su - oracle
cd /soft
unzip p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
3.查看OPatch版本
$ORACLE_HOME/OPatch/opatch version
4、备库应用33806152补丁
1.先解压补丁
unzip p35943157_190000_Linux-x86-64.zip
2.查看目录
ls
3.进入35943157目录
cd 35943157
4.查看是否冲突
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
如果为succeeded则没有冲突,为failed则失败,检查补丁版本或其他原因。
5.应用补丁
$ORACLE_HOME/OPatch/opatch apply
##输入y
6.检查补丁应用情况
$ORACLE_HOME/OPatch/opatch lsinv
5、主库备份 oracle_home目录、上传补丁包
[oracle@xgedu51 ~]$ cd /opt/
[oracle@xgedu51 opt]$ ls
oracle ORCLfmap rh
[oracle@xgedu51 opt]$ tar czf /backup/oracle_home_backup.tar.gz oracle/
[oracle@xgedu52 soft]$ ls
p35943157_190000_Linux-x86-64.zip p6880880_190000_Linux-x86-64.zip
6、主库关闭数据库及监听程序
##关闭数据库
sqlplus / as sysdba
shu immediate
exit
**##关闭监听**
lsnrctl stop
7、主库升级Opatch
升级操作与备库相同(主库注册补丁后切换至备库,备库自动完成补丁的注册)
1.注册前的检查
cd $ORACLE_HOME/OPatch
lsnrctl start
sqlplus / as sysdba
startup
./datapatch -prereq
注意没有启动Oracle的话,执行./datapatch -prereq
2.检查完成开始注册补丁
./datapatch -verbose
注册完成无报错
8、编译无效对象
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba;
@utlrp.sql
无效对象编译完成
9、检查主库的补丁注册情况
select VERSION,VERSION_FULL from dba_registry;
10、备库切换主库完成补丁注册
1.主库:
sqlplus / as sysdba
SQL>startup
SQL> select name,open_mode,switchover_status from v$database;
NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
PROD1 READ WRITE TO STANDBY
SQL> alter system switch logfile;
System altered.
SQL> alter system archive log current;
System altered.
SQL> alter database commit to switchover to physical standby with session shutdown;
Database altered.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1348244 bytes
Variable Size 511708524 bytes
Database Buffers 331350016 bytes
Redo Buffers 5124096 bytes
Database mounted.
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
RECOVERY NEEDED
SQL> alter database open;
Database altered.
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
2、备库:
在主库启动时,备库在mount状态
sqlplus / as sysdba
SQL>startup mount
SQL> alter database commit to switchover to primary with session shutdown;
Database altered.
这里可能会出现错误:
ORA-16139: media recovery required。
下面有解决方法
解决完后,可以不要再次执行了。直接执行下面的命令。
SQL> alter database open;
Database altered.
SQL> select name,open_mode,switchover_status from v$database;
NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
PROD1 READ WRITE TO STANDBY
⚫️出现了ORA-16139: media recovery required错误处理
在当前备库执行过程展示如下:
SQL> alter database commit to switchover to primary with session shutdown;
alter database commit to switchover to primary with session shutdown
*
ERROR at line 1:
ORA-16139: media recovery required
怀疑可能是由于有日志未应用造成的,执行如下语句查询:
SQL> select APPLIED,SEQUENCE# from v$archived_log;
APPLIED SEQUENCE#
--------- ----------
YES 8
YES 9
YES 12
YES 13
YES 15
YES 16
YES 17
YES 10
YES 14
YES 11
YES 19
APPLIED SEQUENCE#
--------- ----------
YES 18
NO 20
NO 21
NO 22
NO 23
16 rows selected.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SQL> alter database commit to switchover to primary;
Database altered.
3.新备库(原主库)启用实时日志应用
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
SQL> select name,open_mode,switchover_status from v$database;
NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
RMANPRI READ ONLY NOT ALLOWED
4.新主库切换日志
SQL> alter system switch logfile;
System altered.
5.分别查看当前主备库切换后当前日志序列号
主库:
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 52
Next log sequence to archive 54
Current log sequence 54
备库:
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 0
Next log sequence to archive 0
Current log sequence 0
6.查看当前主备库状态
主库:
SQL> select name,open_mode,switchover_status from v$database;
NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
RMANPRI READ WRITE TO STANDBY
备库:
SQL> select name,open_mode,switchover_status from v$database;
NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
RMANPRI READ ONLY WITH APPLY NOT ALLOWED
检查新主库(原备库)补丁注册情况
二、补丁回退
(思路:和打补丁的思路一样的,先备库然后再主库,再切换主库):
1、备库准备阶段:
shu immediate
exit
lsnrctl stop
ps -ef | grep sqlplus
2、备库补丁回滚:
cd $ORACLE_HOME/OPatch
./opatch rollback -id 35943157
3、主库补丁回滚和完整性验证。
主库的补丁回滚操作和备库的操作一样,然后再进行完整性验证。
1.启动实例,加载文件,完整性验证。
启动监听和数据库加载文件
lsnrctl start
lsnrctl status
sqlplus / as sysdba
startup
cd $ORACLE_HOME/OPatch
./datapatch -sanity_checks (optional)
cd $ORACLE_HOME/OPatch
./datapatch -verbose
2.然后切换主备库。
然后就可以在原备库(新主库)查看回滚后的结果:
本文章有自己兴趣所写,如果文章有问题及时给作者反应。