作者 | JiekeXu
来源 | JiekeXu DBA之路(ID: JiekeXu_IT)
大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle 19c ADG Swithover 切换流程,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!
本文档主要是根据前面文档中搭建的 Oracle 19c MAA 架构的备库进行 Swithover 切换,然后将备库变为主库,主库变为备库,达到一个迁移的目的。
源地址IP为 192.168.0.86/87,目标端IP地址段为:192.168.21.81-87。规则如下:其中81/82/83为SCAN,86/84为一节点的PUB/VIP,87/85为二节点的PUB/VIP。
其中IP地址列表如下:
源端IP | 192.168.0.86/87 | 目标端IP | 192.168.21.86/87 |
---|---|---|---|
源端 版本 | Linux7 RAC 19.4.0 | 目标端 版本 | Linux7 RAC 19.4.0 |
源端 字符集 | AL32UTF8 | 目标端 字符集 | AL32UTF8 |
源端 db | edw | 目标端 db | edwstb |
文章标题《Oracle 19c ADG Swithover 切换手册》那必定可以当手册使用,文档也已经整理好了,在本公众号后台回复关键字【A DG 切换 手册】获取本文文档版本。
1、切换前准备工作
Ø 检查集群状态,监听状态
1 | lua复制代码crsctl status res -t |
Ø 检查主备库打开状态,模式
1 | sql复制代码检查数据库实例状态,正常状态为open |
Ø 主备库的 DG 参数检查确认
1 | sql复制代码show parameter db_file_name_convert |
Ø 检查主库
1 | sql复制代码col DEST_NAME for a30 |
Ø 检查主库、备库确定有足够的归档进程
1 | sql复制代码log_archive_max_processes值需大于等于4,但也不会太大。 |
Ø 检查standby redo是否创建了
1 | csharp复制代码select * from v$logfile; |
Ø 备库检查redo logs是否需要清理
1 | sql复制代码[备库][oracle用户][节点1][SQL] |
Ø 检查主库standby日志情况
检查主库是否创建了standby的redo log日志
注意:standby的redo log日志要比源库的redo log日志多一组,大小和redo log大小一致,例如源库数据库的 redo log 为2组4个,那么standby 的redo log应该为3组6个
1)查看redo log情况
1 | vbnet复制代码select group#,thread#,sequence#,members,archived,status,bytes/1024/1024 M from v$log order by 1; |
2)查看standby日志情况
1 | sql复制代码col MEMBER for a50 |
Ø 备库查询应用到的日志REDO SEQUENCE
主库查询当前的REDO SEQUENCE
SELECT THREAD#, SEQUENCE# FROM V$THREAD;
备库查询应用到的日志REDO SEQUENCE ,正常查询结果和上面主库的REDO SEQUENCE 数值只差1~2个
1 | sql复制代码SELECT THREAD#, MAX(SEQUENCE#) FROM V$ARCHIVED_LOG |
Ø 备库检查数据库是否有gap
1 | arduino复制代码检查数据库是否有gap,正常没有 |
Ø 检查下当前应用进程是否有延时
1 | sql复制代码column name format a13; |
Ø 关闭应用并确认当前连接会话
1 | csharp复制代码select username,sid,status,event,program,machine,sql_id from v$session where username !='SYS'; |
Ø 主库、备库确定数据文件、临时文件状态
确定主备数据库临时文件一致,且所有的数据文件都是online的
1 | sql复制代码col FILENAME for a50 |
Ø 主库验证当前是否可转换为备库
检查主库 switchover_status状态,正常结果为TO STANDBY或SESSION ACTIVE
1 | csharp复制代码select switchover_status from v$database; |
注意事项:
如果switchover_status为TO_STANDBY说明可以直接转换
alter database commit to switchover to physical standby;
如果switchover_status为SESSIONS ACTIVE ,但是查询V$SESSION会话,都是系统会话,可以通过如下命令在主库进行SWITCHOVER切换。
1 | sql复制代码alter database commit to switchover to physical standby with session shutdown; |
Ø 再次确认下主库上面的crontab job是否转移到备库上了
1 | 复制代码crontab -l |
2、正式切换 s witchover
- 修改主库ORA30A参数(当主备库的目录结构不一致时需要修改此参数)
1 | sql复制代码#以下参数需要重启方能生效 |
- 修改备库ORA30A_JX参数(当主备库的目录结构不一致时需要修改此参数)
1 | sql复制代码#以下参数需要重启方能生效 |
本次 MAA 切换不需要修改此参数。
- edw主库关闭实例2
1 | arduino复制代码srvctl stop instance -d edw -i edw2 -o immediate |
- edwstb备库关闭实例2
1 | arduino复制代码srvctl stop instance -d edwstb -i edwstb2 -o immediate |
- edw 主库切换到standby
1 | sql复制代码SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; |
- 验证备库的切换状态
1 | sql复制代码SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE; |
- 切换备库为主库
1 | sql复制代码SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; |
- 打开新备库的日志同步进程
1 | sql复制代码SQL> startup mount |
9. 验证切换后的结果
主库进行日志切换,查看备库的日志,看是否开始接收并应用。
经过检查多次切换日志,新备库均没有接受到日志,这个可能的原因比较多,按照之前说的检查备库 alert 日志,没有报错,只有一句提示:
2021-06-09T18:50:01.005734+08:00
TT02 (PID:26883): LOG_FILE_NAME_CONVERT is not defined, stop clearing ORLs
那么既然有这个提示就修改一下这个参数吧。只在备库修改,然后重启备库,应用日志后还是没有同步。
1 | sql复制代码ALTER SYSTEM SET db_file_name_convert='+DATA','+DATA' SCOPE=SPFILE; |
不过终于在主库的 alert 日志中发现了错误 ORA-16047
ORA-16047: DGID mismatch between destination setting and target database
2021-06-09T19:27:17.609158+08:00
查看错误居然报备库 DB_UNIQUE_NAME 不匹配,检查备库参数后也没问题。
1 | csharp复制代码[oracle]$ oerr ora 16047 |
然后通过以下视图查看时,在新主库上发现了错误。参数 LOG_ARCHIVE_DEST_2 配置错误,参数中 SERVICE 和 DB_UNIQUE_NAME 果然不匹配,重新修改后备库立马恢复正常,同步正常。
1 | sql复制代码select dest_name,status,error from v$archive_dest; |
- 备库只读打开(可选)
可根据实际情况,选择是否打开备库。
1 | sql复制代码SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; |
- 打开RAC的另一个节点
主库和备库的另一个节点都可以打开。
1 | 复制代码startup |
3、检查修改DBLINK
由于迁移主机发生变化了,因此需要检查确认是否有其他数据库配置了到本数据库的DBLINK连接。检查下是否存在其他库到本库的DBLINK,若有,则在那些库上面,修改dblink涉及到的本数据库服务器IP地址。
1 | csharp复制代码select * from dba_db_links; |
4、修改应用连接 IP 地址
由于数据库服务器IP地址发生了变化,因此需要将应用连接到数据库的IP地址也进行修改。
5、启应用
以上步骤全部完成之后,启应用,检查日志并确认下应用连接是否正常,业务测试。
本次分享到此结束啦~
❤️ 欢迎关注我的公众号,来一起玩耍吧!!!
——————————————————————–—–————
**公众号:JiekeXu DBA之路
CSDN :blog.csdn.net/JiekeXu
腾讯云:cloud.tencent.com/developer/u…**
—————————————————————————-———
基于 VMWARE Oracle Linux7.9 安装 Oracle19c RAC 详细配置方案
爆肝一万字终于把 Oracle Data Guard 核心参数搞明白了
本文转载自: 掘金