这篇文章给大家分享的是有关如何解决oracle11gR2 DataGuard switchover切换的两个错误状态的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
10多年的景东网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整景东建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“景东网站设计”,“景东网站推广”以来,每个客户项目都认真落实执行。
在公司的测试环境搭建了一套oracle11gR2 DataGuard,用来预生产测试。在Data Guard中分为两种冗余切换,一种是switchover无损切换,一种是failover丢弃切换。
所谓switchover是针对failover而言的,它是一种无损切换,切换的过程中不会丢失数据。 可以平滑的使主备互换并且2个库都可以正常使用。 切换过程:主库->切换->备库->检查状态->原备库->切换->主库->再检查状态
应用场合:主库因性能或其他原因需要调整升级,这时可以切换后用新主库对外提供服务。
关于DG的搭建过程这里就不详述了,下面就切换过程中出现的两个错误状态进行分析和解决。
一、SWITCHOVER LATENT状态
在备库上查询数据库角色和状态
SYS@standby> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- --------------------
PHYSICAL STANDBY SWITCHOVER LATENT READ ONLY
发现是switchover latent而不是to primary
这个问题是说切换处于pending模式,没有完成无法回到主库。当你查看ALERT日志时,也没有发现什么报错,是不是要继续等下去呢?其实不需要等待,出现这个问题的原因就是日志没有归档,所以备库与主库不一致,需要恢复。当备库恢复到和主库一致后,状态就会成为to_primary
验证一下这个问题是不是上面所说的原因,你可以继续在备库上执行下面这句
sys@standby> 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
这里提示需要介质恢复。
根据以上的分析和定位,我们要解决这个问题,需要在备库上切断应用,启用日志同步
SYS@standby> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SYS@standby> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
显示为TO PRIMARY,这时看状态就正常了。
SYS@standby> alter database commit to switchover to primary with session shutdown;
Database altered.
SYS@standby> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- --------------------
PRIMARY NOT ALLOWED MOUNTED
打开数据库
sys@standby>alter database open;
切换一下日志
sys@standby> alter system switch logfile ;
System altered.
再检查一下日志的状态
SYS@standby> select sequence#,standby_dest,archived,applied,status from v$archived_log;
SEQUENCE# STA ARC APPLIED S
---------- --- --- --------- -
4 NO YES YES A
5 NO YES YES A
6 NO YES YES A
7 NO YES YES A
8 NO YES YES A
9 NO YES YES A
10 NO YES YES A
11 NO YES YES A
11 NO YES YES A
10 NO YES YES A
12 NO YES YES A
发现都是YES,说明已经同步了。
二、FAILED DESTINATION状态
当备库切换为主库后,发现切换状态为FAILED DESTINATION
SYS@primary> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- --------------------
PRIMARY FAILED DESTINATION READ WRITE
发现是FAILED DESTINATION而不是to standby
这个问题说明主库连接备库有问题,可以具体查看一下ALERT日志,看看是怎么回事
Error 12541 received logging on to the standby
Check whether the listener is up and running.
Errors in file /u01/app/oracle/diag/rdbms/primary/primary/trace/primary_arc2_2546.trc:
ORA-12541: TNS:no listener
PING[ARC2]: Heartbeat failed to connect to standby 'standby'. Error is 12541.
这里说明备库的监听有问题,重启备库监听,再查状态就变成to standby了
SYS@primary> select database_role,switchover_status,open_mode from v$database;
DATABASE_ROLE SWITCHOVER_STATUS OPEN_MODE
---------------- -------------------- --------------------
PRIMARY TO STANDBY READ WRITE
当然导致FAILED DESTINATION的原因会有很多,比如log_archive_dest_2 参数的属性值还有口令文件的配置出错或者权限问题等。
总之出了问题,面对问题分析问题就对了,从中你可以学到很多。
附Switchover_Status值的含义
NOT ALLOWED
当前的数据库不是带有备用数据库的主数据库
PREPARING DICTIONARY
该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备
PREPARING SWITCHOVER
接受用于切换的重做数据时,逻辑备用配置会使用它
RECOVERY NEEDED
备用数据库还没有接收到切换请求
SESSIONS ACTIVE
在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话
SWITCHOVER PENDING
适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库
SWITCHOVER LATENT
切换没有完成并返回到主数据库
TO LOGICAL STANDBY
主数据库已经收到了来自逻辑备用数据库的完整的字典
TO PRIMARY
该备用数据库可以转换为主数据库
TO STANDBY
该主数据库可以转换为备用数据库
感谢各位的阅读!关于“如何解决oracle11gR2 DataGuard switchover切换的两个错误状态”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!