AGD简介
Data Guard可以以只读的方式打开数据库,但此时Media Recovery利用日志进行数据同步的过程就停止了,如果物理备用数据库处于恢复的过程中数据库就不能打开查询,也就是说日志应用和只读打开两个状态是互斥的(10g之前)。
Oracle 11g 中推出的Active Data Guard功能解决了(10g物理DG)这个矛盾,在利用日志恢复数据的同时可以用只读的方式打开数据库,用户可以在备用数据库上进行查询、报表等操作,这类似逻辑Data Guard备用数据库的功能(查询功能方面),但是,数据同步的效率更高、对硬件的资源要求更低。这样可以更大程度地发挥物理备用数据库的硬件资源的效能。
ADG架构
ADG三种模式
1.最大性能模式(Maximum Performance)
1)该模式是默认模式,可以保证主数据库的最高可用性;
2)主节点随时提交事务,事务提交时,redo至少写入一个从节点,但是写入不一定同步;
2)保证主库运行过程中不受备库的影响,主库事务正常提交,不因备库的任何问题影响到主库的运行;
4)优点:避免了备库对主数据库的性能和可用性影响;
5)缺点:如果与主库提交的事务相关的恢复数据没有发送到备库,这些事务数据将被丢失,不能保证数据无损失。
2.最大可用模式(Maximum Availability)
1)该模式提供了仅次于“最大保护模式”的数据保护能力(介于最大保护与最大性能之间);
2)要求至少一个物理备库收到重做日志后,主库的事务才能够提交;
3)主库找不到合适的备库写入时,主库不会shutdown,而是临时降低到“最大性能模式”模式,从库恢复后,转回“最大可用模式”;
4)优点:该模式可以在没有问题出现的情况下,保证备库没有数据丢失,是一种折中的方法;
5)缺点:在正常运行的过程中缺点是主库的性能受到诸多因素的影响。
3.最大保护模式(Maximum Protection)
1)这种模式提供了最高级别的数据保护能力;
2)主节点事务提交前,redo写入在线日志,而且要求至少一个物理备库收到重做日志后,主库的事务才能够提交;
3)主库找不到合适的备库写入时,主库会自动shutdown,防止未受保护的数据出现;
4)优点:该模式可以保证备库没有数据丢失;
5)缺点:主库的自动关闭会影响到主库的可用性,同时需要备库恢复后才能提交,对网络等客观条件要求非常的高,主库的性能会因此受到非常大的冲击。
三种模式比较
比较项 | Redo写或传输进程 | 网络传输模式 | 是否落盘确认 | standby redologs |
---|---|---|---|---|
最大保护 | lgwr | sync | affirm | 需要 |
最高可用 | lgwr | sync | affirm | 需要 |
最大性能 | lgwr或者arch | sync或者async | affirm或者noaffirm | 可有可无 |
AFFIRM:在日志写进程进行之前,所以的归档日志和备库日志必须同步写完。
NOFFIRM:在主库的日志写进程不等所有磁盘IO完成。
(缺省值为NOFFIRM)
参数相关
设置参数位置
主库log_archive_dest_n参数设置
示例:*.log_archive_dest_2=‘service=orcl lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl’
重要参数分析
arch:只支持最大性能模式。归档日志通过primary上的arch进程传送给standby的rfs进程,保存到指定路径(如果有standby redo logfile,则保存到该位置,然后再归档),然后redo应用。
lgwr:primary使用LGWR即时将日志传送到standby的rfs进程,并保存到standby redo logfile中,而不再需要等到归档操作时才传送,保存到standbyredo logfile,然后再归档,然后redo应用。
用LGWR传输大致如下:
1)主库:只要有新的重做日志产生,lgwr进程将触发LNSn进程把新生成的日志传输给备库rfs进程。
2)备库:rfs进程接收到日志后,将其写入standby重做日志,如果备库开启了实时应用,就立即做日志应用,如果没有开启,则等standby重做日志归档后再应用。
3)其中,async和sync的区别在于:sync是在redo还在内存时,LNSn进程就开始传输,而async是在redo写到online redo log后,LNSn才开始传输。
同步的实时性来看,lgwr(sync) > lgwr(async)> arch
sync模式下,主库产生任何redo时,同时马上触发网络传输给备库RFS进程;
async模式下,主库产生redo时,先写到本地online redo logfile文件中,LNSn进程从online redo logfile文件中取redo数据网络传输给备库RFS进程。
三种模式间切换
首次performance>>availability>>protection顺序需要在主库执行且主库必须处于mount状态;
如果已经由performance>> availability>>protection数据保护级别操作过1次,那么再次操作时可直接操作;
protection>>availability>>performance顺序直接操作即可
实例演示
由最大性能模式切换为最大可用模式
- 先查看ADG当前模式
--主库执行
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
--备库执行
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
- 主库更改log_archive_dest_n参数配置
--主库执行
SQL> show parameter log_archive_dest_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string service=ruiadg2 NOAFFIRM ASYNC
VALID_FOR=(ONLINE_LOGFILES,PR
IMARY_ROLE) db_unique_name=rui
adg
SQL> alter system set log_archive_dest_2='service=ruiadg2 NOAFFIRM LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ruiadg';
System altered.
SQL> show parameter log_archive_dest_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string service=ruiadg2 NOAFFIRM LGWR
SYNC VALID_FOR=(ONLINE_LOGFIL
ES,PRIMARY_ROLE) db_unique_nam
e=ruiadg
- 接着进行如下操作
--主库操作
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
--备库操作
SQL>alter database recover managed standby database cancel;
--主库执行
SQL> startup mount
Total System Global Area 2466250752 bytes
Fixed Size 2927384 bytes
Variable Size 671089896 bytes
Database Buffers 1778384896 bytes
Redo Buffers 13848576 bytes
Database mounted.
SQL> alter database set standby database to maximize availability;--切换到最大可用模式
Database altered.
SQL> alter database open;
Database altered.
至此,切换动作已完成。
- 查询当前的保护模式
--主库执行:
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM AVAILABILITY RESYNCHRONIZATION
--备库执行
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
参考:
https://blog.csdn.net/weixin_33873846/article/details/92438388
https://www.cnblogs.com/kawashibara/p/10054471.html