Data Guard的保护模式分为三种:Maximum Protection、Maximum Performance、Maximum Availability。
Max Protection是最大保护模式,可以保证主端被备端数据一致,给数据文件提供最大的保护,但是备端异常会导致主端无法正常提供服务。
Maximum Performance是最大性能模式,主端和备端无法保障数据实时同步,只有当主端切换归档日志时备端接收到日志才会应用到备库,但是此种保护模式备端不会影响主端运行,即使归档日志没有传输成功主库依旧可以正常对外提供服务。
Maximum Availability是最高可用模式,允许当主端无法接收备端确认信息时继续进行事务处理。类似于最大保护模式,当备端正常时起到的保护作用就是最大保护模式,当备端异常导致无法与主端正常通信,保护模式会自动降低到最大性能模式。
此篇文章中借助已经搭建好的dg(最大性能模式)平台为基础,演示从最大性能切换到最大保护模式,然后再由最大保护模式切换到最高可用模式,最后在进行Data Guard的故障切换。
1、最高性能到最大保护模式
此模式的弊端是备端一个的时候如果故障主端也会停止工作,多个备端的时候,有一个备端可以正常工作主端就会正常工作。对网络要求高。
1.1、主端节点修改log_archive_dest_2,命令如下:
SQL> alter system set log_archive_dest_2='SERVICE=std LGWR sync affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std';
SQL> show parameter dest_2
1.2、在备端节点修改log_archive_dest_2,命令如下
SQL> alter system set log_archive_dest_2='SERVICE=pri LGWR sync affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri';
SQL> show parameter dest_2
1.3、备端数据库重启到mount阶段
1.4、主端重启到mount阶段
1.5、主端更改保护模式
SQL> alter database set standby database to maximize protection;
1.6、备端开启到open模式,然后开启使用日志归档模式
SQL> alter database open
SQL> recover managed standby database using current logfile disconnect from session;
1.7、主端开启到open状态(生产建议使用shutdown immediate关库)
1.8、检查保护模式是否更改
SQL> select name,open_mode,database_role,protection_mode,switchover_status from v$database;
主端检查截图
备端检查截图
1.9、测试主端在在提交更改时候是否备端会同样生成数据
主端插入数值9
查询备端发现也可以查询到9已经写入到备端
至此,证明最大性能模式切换到最大保护模式操作成功。
2、最大保护模式到最大可用模式
此种模式切换相对简单,只需要简单更改参数即可,具体才做步骤如下:
2.1、主端操作脚本
SQL> shutdown immediate
SQL> startup mount
SQL> alter database set standby database to maximize availability;
SQL> select name,open_mode,database_role,protection_mode,switchover_status from v$database;
2.2、主端数据库open后查看备端的保护模式已经切换到最大可用
3、最大可用模式下failover切换
3.1、查看保护模式
select name,dbid,open_mode,protection_mode,database_role,switchover_status from v$database;
3.2、查询v$managed_standby状态
SQL> select PROCESS, STATUS , PID,CLIENT_DBID from v$managed_standby;
3.3、强制结束备端日志应用
SQL> alter database recover managed standby database finish force;
3.4、查询备库是否可以切换到主库
SQL> select name,dbid,open_mode,protection_mode,switchover_status,database_role from v$database;
3.5、将备库强制切换成主库运行,打破DG模式,如果想重新恢复DG模式需要重新搭建
SQL> alter database commit to switchover to primary with session shutdown;
select name,dbid,open_mode,protection_mode,switchover_status,database_role from v$database;
alter database open;