Oracle DataGuard;简称DG。是由一个Primary Database(主库)和一个或者多个Standby Database(备库)组成。对Oracle来说;本身不能提高性能。通过数据冗余来保护数据。由Primary Database对外提供服务;用户操作在Primary Database上操作;其操作的数据库Redo Log或者Archive log通过网络传输到Standby Database。Standby Database在重做这些日志。从而实现Primary Database和Standby Database数据同步。
架构图如下:
Oracle DataGuard中的Standby库有两种:物理Standby和逻辑Standby。
本例采用物理Standby架构;在Oracle DataGuard有两种角色:Primary和Standby
数据库对外提供高可用性;主库发生故障;备库可以提升为主库对外提供服务;不影响业务正常运行。这是需要做一个操作就是角色转换。
角色转换也有两种不同的操作类型:switchover和failover。前者是无损切换,不会丢失数据。后者有可能丢失数据。并且切换后原Primary数据库不再是该DataGuard一部分。其也有可能对外提供服务;在其他数据库称为“脑裂”。
是主数据库与其中一个standby数据库的转换,switchover能确保没有数据丢失,这是在有计划的系统维护时的典型做法。
使用场景
在主数据库不活动的时候,Failover可将Standby数据库转换为主数据库角色,Failover可能会导致数据出现丢失的情况。Failover只在主数据发生失败的情况下才使用。
从原Primary数据库端开始操作;到新Primary数据库端的操作结束
查询V$DATABASE视图的SWITCHOVER_STATUS列。
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY
ps -ef | grep oracleorcl | awk '{system("kill -9 " $2)}'
将primary数据库转换为standby角色
alter database commit to switchover to physical standby;
-- 可用来处理前一步有用户在连接的情况
alter database commit to switchover to physical standby with session shutdown;
执行了该命令。原primary数据库将会转为standby数据库。
重启原primary数据库到mount状态
shutdown immediate;
startup mount;
查询V$DATABASE视图的SWITCHOVER_STATUS列。
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY
alter database recover managed standby database using current logfile disconnect from session;
alter database commit to switchover to primary;
重启数据库
新备库在启动redo应用即可
alter database recover managed standby database using current logfile disconnect from session;
failover操作;一般表示primary数据库瘫痪,最起码就是失败。相当于primary数据库服务器挂了。现在需要提升standby数据库来接管服务。在这个过程可能会存在丢失数据。所有建议Primary数据库还能使用。不要执行failover。
查询待转换standby数据库的v$archive_gap视图;确认归档文件是否连续
select thread#, low_sequence#, high_sequence# from v$archive_gap;
若有返回记录;通过命令加入数据字典
alter database register physical logfile 'filesepec1'
alter database recover managed standbyf database finish force;
alter database commit to switchover to primary