本文主要是介绍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切换的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!