Oracle运维笔记之DG主备切换后的细节修改

简介: Oracle运维笔记之DG主备切换后的细节修改

客户现场DG主备切换演练,在切换成功后,尝试登陆数据库,发现以下错误:

ORA-01033: ORACLE initialization or shutdown in progress
图片.png

切换的流程是这样的,主备切换后,ip也做改变,原备库的ip修改成远主库的scan ip,这样应用就可以在不做改动的情况下,直接连数据库。但是奇怪的是在切换后却无法正常连接,尝试使用连接串登陆数据库,会报出ORA-01033错误。
针对ORA-01033错误,做了以下检查:
1.sqlplus登陆主库(原备库),指定service name和sid

sqlplus system/oracle@192.168.211.107:1521/rac/rac

再查看open_mode,发现是read write,说明数据库是open状态

select open_mode from v$database;

2.sqlplus再次登陆主库(原备库),只指定service name
出现ORA-01033错误
3.查看数据库alert日志,备库成功切换成主库,没有发现异常错误。
4.查看lsnrctl status,发现在rac服务下有多个实例,其中rac1和rac2是生产库的实例
从以上的检查中,可以发现备库(原主库)的实例注册到了主库(原备库)的监听中,应用在连接数据库的时候,连接上的是备库(原主库),而备库在主备切换后变成mount状态,所以才会出现ORA-01033错误。
为什么备库(原主库)的实例会注册到主库(原备库)的监听中?之前在自己环境模拟DG主备切换并修改IP时也遇到过同样的问题,解决方法就是修改remote_listener参数。
关于remote_listener的作用,以下是官方解释:

REMOTE_LISTENER specifies a network name that resolves to an address or address list of Oracle Net remote listeners (that is, listeners that are not running on the same machine as this instance). The address or address list is specified in the TNSNAMES.ORA file or other address repository as configured for your system.

简单来说就是REMOTE_LISTENER是用来指定远程的监听地址。
分析到这里,问题就很明显了,看了下备库(原主库)的remote参数:

SQL> show parameter remote_listener

NAME TYPE VALUE
-------------------------- ----------- --------------------
remote_listener string racdb-scan:1521

racdb-scan:1521正是主库(原备库)的监听地址,所以实例才会注册到主库的监听中。解决方法也很简单,修改remote_listener:

alter system set remote_listener='' sid='*' scope=both;

其实这个问题和Oracle的TNS Listener远程注册投毒类似,如果修复了这个漏洞,理论是可以避免这个错误的。
下面来模拟这个错误:
1.主备切换后,关掉备库的scan监听和scan。
2.修改主库的ip为scanip地址。
3.主库查看listener status,可以看到备库的实例rac1和rac2注册到了主库的监听中。
图片.png
4.尝试sqlplus登陆主库,报出ORA-01033错误
图片.png
5.修改备库的remote_listener,alter system set remote_listener='' sid='*' scope=both;,再次查看主库监听,发现没有了备库的实例。
图片.png
6.尝试sqlplus登陆主库,登陆成功。
图片.png

相关文章
|
7月前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
7月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
3月前
|
运维 Java 关系型数据库
【Java笔记+踩坑】SpringBoot基础2——运维实用
SpringBoot程序的打包与运行、临时配置、多环境配置、日志
【Java笔记+踩坑】SpringBoot基础2——运维实用
|
4月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
106 2
|
4月前
|
SQL 运维 Oracle
入门级Oracle 11g日常运维命令总结
入门级Oracle 11g日常运维命令总结
153 1
|
4月前
|
应用服务中间件 API 网络安全
运维笔记:宿主机转发实现多容器复用CA证书
运维笔记:宿主机转发实现多容器复用CA证书
45 4
|
4月前
|
数据采集 运维 监控
运维笔记:流编辑器sed命令用法解析
运维笔记:流编辑器sed命令用法解析
66 5
|
4月前
|
运维 安全 网络安全
运维笔记:基于阿里云跨地域服务器通信
运维笔记:基于阿里云跨地域服务器通信
183 1
|
4月前
|
Oracle 关系型数据库 数据库连接
初步了解Oracle DG
初步了解Oracle DG
138 0
|
4月前
|
SQL 存储 关系型数据库
运维笔记.MySQL.基于mysqldump数据备份与恢复
运维笔记.MySQL.基于mysqldump数据备份与恢复
61 0

推荐镜像

更多