C/C++教程

Oracle DG切换

本文主要是介绍Oracle DG切换,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
## Oralce DG 切换方式: 1. switchover:用户主动切换,切换后DG关系正常,switch切换过程:先主库再备库 2. failover:主库出现故障,强行切换,备库提升为主库,提升后DG关系失败。 ## 官方定义: ``` 切换 允许主数据库与其备用数据库之一切换角色。切换过程中不会出现数据丢失。切换后,每个数据库继续以其新角色参与Data Guard配置。 故障转移 将备用数据库更改为主数据库,以响应主数据库故障。如果主数据库在故障前没有以最大保护模式或最大可用性模式运行,则可能会发生一些数据丢失。如果在主数据库上启用了Flashback Database,那么一旦故障原因得到纠正,它就可以被恢复为新的主数据库的备用数据库。 ``` v$database Switchover_Status值的含义 ![image.png](http://www.www.zyiz.net/i/li/?n=2&i=images/20210621/1624280681572143.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ## 一. switch over 主库 ``` 1. 查看switchover_status: SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE; 2. 切换为备库 alter database commit to switchover to physical standby WITH SESSION SHUTDOWN; alter database commit to switchover to physical standby; 注意:如果上一步的SWITCH_STATUS参数值为"TO STANDBY",则 WITH SESSION SHUTDOWN 可以省略。 3. 启动mount SQL> SHUTDOWN ABORT SQL> STARTUP MOUNT 注意:11.2.0.4版本及其以上版本不需要执行"SHUTDOWN ABORT",因为数据库已经在切换命令中关闭了。 4. 数据库状态 set line 600 SELECT DB_UNIQUE_NAME,DATABASE_ROLE,PROTECTION_MODE, SWITCHOVER_STATUS, OPEN_MODE FROM V$DATABASE; ``` 备库 ``` 1. 备库状态 SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE; 注意:需要检查SWITCH_STATUS参数,如果值为"SESSION ACTIVE"或"TO PRIMARY",则备库可以切换为主库。 3. 提升主库 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; 注意:如果上一步的SWITCH_STATUS参数值为"TO PRIMARY",则 WITH SESSION SHUTDOWN 可以省略。 4. 状态查看 SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE; ``` 状态校验 ``` 查看数据库角色是否切换成功 select database_role from v$database; 查看DG进程是否正常 select process,status,thread#,sequence# from v$managed_standby; 查看同步延时 set pagesize 20; column name format a13; column value format a20; column unit format a30; column TIME_COMPUTED format a30; select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag'); ``` ## 二. failover 备库 ``` 在备库确认是否有日志没有同步: SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; 如果此查询有记录,需要把这些日志从主库拷贝到备库,并注册到数据库中: ALTER DATABASE REGISTER PHYSICAL LOGFILE '拷贝过来的日志文件'; 查询日志是否应用到最新状态: select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log; 在备库做失败切换: alter database recover managed standby database finish force; alter database commit to switchover to primary; alter database open; ```
这篇关于Oracle DG切换的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!