Oracle DataGuard

一、DataGuard介绍

DataGuard是Oracle的一种高可用性数据库方案,主要用于数据容灾和读写分离。

数据库角色
Primary:主库
Standby:备库

Standby类型
物理standby:redolog以介质恢复的方式实现同步。用于数据备份(11G也可以读写分离)。
逻辑standby:redolog以sql的方式实现同步。用于数据备份和读写分离。

切换模式
switchover:正常切换,主备正常场景时切换,无数据丢失。
failover:应急切换,主库异常无法恢复时切换,最大保护模式或最高可用模式下无数据丢失。

保护模式
最大保护(Maximum Protection):最高级别的数据安全。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,该模式能保证零数据丢失。(不太会用)

最高性能(Maximum Performance):最高级别的性能。primay上的事务在commit后redo才异步写到standby,primary故障时可能丢失数据。(性能较高,对备库数据一致性要求较低,主库坏了只能尽量恢复主库,因为备库会丢数据)

最高可用(Maximum Availability):在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时,最大可用模式自动变为最大性能模式。(可用性较高,主库坏了用备,备库坏了用主,都不会丢数据)

打开模式

MOUNTED:数据库已挂载未打开。

READ WRITE:读写模式打开。

READ ONLY:备库只读打开,主库更新不会实时同步到备库。

READ ONLY WITH APPLY:备库只读打开,主库更新实时同步到备库。

常用sql

--启停数据库
shutdown immediate;
startup mount;
alter database open;

--查询数据库角色和保护模式
select database_role,switchover_status from v$database;
--切换备库为主库(切换后,主库为mount状态)
--TO PRIMARY
alter database commit to switchover to primary; 
--SESSIONS ACTIVE
alter database commit to switchover to primary with session shutdown; 
--切换主库为备库(切换后,备库为shutdown状态)
--TO STANDBY
alter database commit to switchover to physical standby;
--SESSIONS ACTIVE
alter database commit to switchover to physical standby with session shutdown;

--查询数据库打开模式
select open_mode from v$database;
--开启数据同步(mount模式执行READ ONLY,open模式执行READ ONLY WITH APPLY)
alter database recover managed standby database using current logfile disconnect from session;
--关闭数据同步(必须先关闭,才可以执行alter database open打开数据库)
alter database recover managed standby database cancel;
--主库异常无法恢复时,异常切换时备库需执行下列命令
alter database recover managed standby database finish;
alter database recover managed standby database finish force;

--查询数据库保护模式
select protection_mode from v$database;
--更改数据库保护模式
alter database set standby database to maximize protection; --最大保护
alter database set standby database to maximize performance; --最高性能
alter database set standby database to maximize availability; --最高可用

二、DataGuard安装配置

参考:

https://blog.csdn.net/xiezuoyong/article/details/83862885
http://blog.itpub.net/31500837/viewspace-2146643/

三、DataGuard角色切换

数据库切换状态

主库状态(switchover_status)

NOT ALLOWED:未找到备库。

TO STANDBY:当前主机已就绪,可切换为备机。

SESSIONS ACTIVE:当前主机存在活动会话,但也可切换为备机。

RESOLVABLE GAP:备库未开启数据同步,导致主备数据有差异。

备库状态(switchover_status)

NOT ALLOWED:主库还未执行switchover,不允许切换为主。

TO PRIMARY:当前备机已就绪,可切换为主机。

SESSIONS ACTIVE:当前备机存在活动会话,但页可切换为主机。

RECOVERY NEEDED:当前未开启数据同步。

正常切换(switchover)

参考:https://www.cnblogs.com/hftian/p/9327638.html

主备切换

1.主库切换为备库,如下图:

--1.查询主库状态为TO STANDBY或SESSIONS ACTIVE
select database_role,switchover_status from v$database;
--2.切换主库角色为备库
alter database commit to switchover to physical standby;
alter database commit to switchover to physical standby with session shutdown;
--3.重启数据库到open模式
startup
--4.开启redo同步
alter database recover managed standby database using current logfile disconnect from session;
--5.查询数据库状态已经是TO PRIMARY(主库成功切换为备库)
select database_role,switchover_status from v$database;
--6.查询数据库打开模式为READ ONLY WITH APPLY(读写分离,redo实时同步)
select open_mode from v$database;

Oracle DataGuard_第1张图片

 此时,主库已经切换为备库,下面可以在所有备库选择一个切换为主库。

 2.备库切换为主库,如下图:

--1.查询备库状态为TO PRIMARY或SESSIONS ACTIVE
select database_role,switchover_status from v$database;
--2.切换备库角色为主库
alter database commit to switchover to primary;
alter database commit to switchover to primary with session shutdown;
--3.打开数据库(切换完后为mount状态)
alter database open;
--4.查询数据库状态为TO STANDBY(表示切换完成)
select database_role,switchover_status from v$database;

Oracle DataGuard_第2张图片

至此,正常切换完成,可在主库insert/update数据看是否实时可在备库中select到。

应急切换(failover)

参考:https://www.cnblogs.com/ivictor/p/3645570.html

1.模拟主库不可用,如下图,直接关闭主数据库:

shutdown immediate;

Oracle DataGuard_第3张图片

2. 切换备库为主库,如下图:

--1.查询备库状态NOT ALLOWED
select database_role,switchover_status from v$database;
--2.执行sql停止同步并应用所有redo
alter database recover managed standby database cancel;
alter database recover managed standby database finish;
--3.切换备库为主库
alter database commit to switchover to primary;
alter database commit to switchover to primary with session shutdown;
--4.打开数据库(切换完后为mount状态)
alter database open;
--5.查询数据库状态为TO STANDBY(表示切换完成)
select database_role,switchover_status from v$database;

Oracle DataGuard_第4张图片

Oracle DataGuard_第5张图片

至此,应急切换完成,备库可正常使用了。

4.若原主库故障解决,参考前面DataGuard安装部分利用RMAN将主库恢复到备库。

另外两种恢复方式参考:https://www.cnblogs.com/ivictor/p/3645570.html

你可能感兴趣的:(oracle,oracle,dataguard)