oracle Data Guard 主备切换(Switchover和failover过程演示)

Oracle Data Guard 主备切换

Oracle Dataguard的角色转换包含两类:Switchover和Failover。Switchover指主备之间角色转换,主库降为备库,备库升级为主库。而failover则是指主库出现问题时,备库切换为主库。

 

下面为官方定义:

 

Switchover

 

Allows the primary database to switch roles with one of its standby databases.There is no data loss during a switchover.After a switchover,each database continues to participate in the Data Guard configuration with its new role.

 

Failover

 

Changes a standby database to the primary role in response to a primary database failure.If the primary database was not operating in either          maximum protection mode or maximum availability mode before the failure,some data loss may occur.If Flashback Database is enabled on the primary database,it can be reinstated as a standby for the new primary database once the reason for the failure is corrected.

switchover

过程演示

 

在主库:

select name,DATABASE_ROLE from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第1张图片 

 

检查归档日志有没有中断:

select status, GAP_STATUS from v$archive_dest_status where dest_id=2;

 oracle Data Guard 主备切换(Switchover和failover过程演示)_第2张图片

 

查询切换前主库的状态,状态为TO STANDBY,主库才可以切换到备库:

select switchover_status from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第3张图片 

 

切换当前主库为备库,切换完成后,数据库会被关闭:

alter database commit to switchover to physical standby;

 

 

启动数据库到mount状态,当前已经变成备库:

startup mount

oracle Data Guard 主备切换(Switchover和failover过程演示)_第4张图片 

 

查询切换状态,此时状态发生变化:

select switchover_status from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第5张图片 

 

也可以查询此时数据库的角色,角色为:PHYSICAL STANDBY

select DATABASE_ROLE from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第6张图片 

 

到备库:

查数据库的角色,在切换之前数据库的角色是:PHYSICAL STANDBY

select name,DATABASE_ROLE from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第7张图片 

 

查询切换角色的状态,此时因为原来的主库已经切换到的备库,

则这个备库是可以切换到主库了,状态为:TO PRIMARY

select switchover_status from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第8张图片 

 

切换备库到主库,一旦切换到主库,数据库此时为mount状态,

需要找开数据库:

alter database commit to switchover to primary;

 

 

alter database open;

 

 

再次验证数据库的角色,此时数据角色变成:PRIMARY

select name,DATABASE_ROLE from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第9张图片 

 

在新的备库:

打开新的备库到只读:

alter database open;

 

 

在新的备库开启日志的应用:

alter database recover managed standby database using current logfile disconnect from session;

 

 

再次查询数据库的打开模式的时候,是:READ ONLY WITH APPLY

select open_mode from v$database;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第10张图片 

 

主备切换完成,在新的主库做数据变更,在新的备库做数据校验,是否同步。

 

主库查看hr用户下的表a的数据

oracle Data Guard 主备切换(Switchover和failover过程演示)_第11张图片 

 

删除id为3的数据

oracle Data Guard 主备切换(Switchover和failover过程演示)_第12张图片 

 

commit;后强制切换日志

oracle Data Guard 主备切换(Switchover和failover过程演示)_第13张图片 

 

到备库查看

数据已同步

oracle Data Guard 主备切换(Switchover和failover过程演示)_第14张图片 

 

 

 

 

 

 

 

failover

过程演示

先查看主库的归档信息

oracle Data Guard 主备切换(Switchover和failover过程演示)_第15张图片 

 

把主库关闭,模拟为主库损坏

oracle Data Guard 主备切换(Switchover和failover过程演示)_第16张图片 

 

此时主库损坏,到备库操作

在备库确认是否有日志没有同步:

SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第17张图片 

 

如果此查询有记录,需要把这些日志从主库拷贝到备库,并注册到数据库中:

ALTER DATABASE REGISTER PHYSICAL LOGFILE '拷贝过来的日志文件'; 

 

查询日志是否应用到最新状态:

select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;

oracle Data Guard 主备切换(Switchover和failover过程演示)_第18张图片 

 

在备库做失败切换:

alter database recover managed standby database finish force; 

 

 

alter database commit to switchover to primary; 

 

 

alter database open; 

oracle Data Guard 主备切换(Switchover和failover过程演示)_第19张图片 

 

此时不再是dataguard环境了,需要根据现有的主库搭建一个新的dataguard环境;

你可能感兴趣的:(oracle Data Guard 主备切换(Switchover和failover过程演示))