Oracle Data Guard Feature 12cR2系列(一)

Data Guard是Oracle推出的一种高可用性数据库方案,从Oracle 9i开始正式更名为Oracle Data Guard。Data Guard在11g中引入Active Data Guard,12c又赋予了新的功能,如: Far Sync Instance等。本文将分为系列文章,介绍12cR2中Data Guard与我们最为息息相关的新特性。

|  Far Sync Instance

Far Sync Instance,实际上是一个级联备库,该特性似乎为两地三中心设计提供的解决方案。使用该特性可以解决远距离传输的延迟时间,同时也增加了主备容灾的距离,可进一步实现数据零丢失的同时,又可以减少主库的压力。以下是官方提供的示意图:

从上述图中可以看出,实际上Far Sync实例数据库是一个级联备用数据库,它充当终端数据库的日志存储库,可以理解为日志中转站。这个实例非常特殊,仅仅只有参数文件,控制文件和密码文件,以及备用日志文件。它不包含任何数据文件,因此无法打开,无法运行日志应用,也无法转换为任何类型的备库。并且只有日志传输服务在远程同步备用数据库上处于活动状态。

远程同步实例的优势在于:它可以是主数据库的本地Archive Log存储库,以最高可用性模式运行,其中物理或逻辑备用数据库可以位于远端站点上。由于它和主库距离较近,同主库端采取同步传输,网络延时很小,而用异步将日志分发到终端备库,因此对主库性能影响很小。

当发生角色转换,例如:switchover/failover时,对Far Sync实例是透明的,即角色转换和12c之前的版本是相同的。

考虑到整个架构的高可用性,Far Sync实例也可以配置多个,以防止Far Sync实例造成地单点故障。如上图,配置两个Far Sync实例以防止引起单点故障。同时在配置多个Far Sync实例时,可以使用Enhanced Alternate Destination的新特性。对FS1,FS2配置Alternate Destinations,并将FS1设置高优先级,FS2设置为相对较低的优先级,当FS1出现故障时,主库会自动将归档日志传输到FS2。而在切换过程中对下级的任意备库,都是完全透明的,实现了Far Sync实例的高可用性。

|  Enhancing Support for Alternate Destinations

在Oracle 9.2中日志传输备用目标的概念被引入,当初始目标不再可用时,作为单一故障切换的备用目标。在Oracle Database 12cR1(12.1)中,增强了这一功能可以使用一个首选目标,第二个作为备用目标,并且在初始目标再次可用时具有自动重新配置和简单故障恢复功能。但是不支持新的Oracle Active Data Guard远程同步实例和实时级联功能。

该功能提供了更大的灵活性来定义优先级的规则,并提供了许多用于定义失败状态策略的选项。无论使用何种配置,目的是都为了满足各种数据保护和高可用性目标。

从12.2.0.1开始通过设置LOG_ARCHIVE_DEST_n参数中的GROUP和PRIORITY属性来完成。

示例:

LOG_ARCHIVE_DEST_2=’SERVICE=chicagoFS SYNC 
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1’
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_3=’SERVICE=chicagoFS1 SYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=1’
LOG_ARCHIVE_DEST_STATE_3=ALTERNATE
LOG_ARCHIVE_DEST_4=’SERVICE=chicagoFS2 ASYNC 
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) GROUP=1 PRIORITY=2’
LOG_ARCHIVE_DEST_STATE_4=ALTERNATE

以上配置会产生以下结果:

1. 日志将优先传输到远程同步实例chicagoFS;

2. 如果chicagoFS不可用时,将使用chicagoFS1;

3. 如果chicagoFS恢复后,由于优先级相同chicagoFS将成为备用目标;

4. 如果chicagoFS和chicagoFS1都不可用时,将使用chicagoFS2(此示例中将会异步传输到chicagoFS2);

5. 如果chicagoFS和chicagoFS1恢复后,主库日志传输会恢复到可用的首选目标

|  Automatically Synchronize Password Files in Oracle Data Guard Configurations

在12cR2中,当主库密码文件(包含SYS,SYSDG等)发生修改后,会自动同步到Oracle Data Guard配置。这个功能很够温暖了吧。

此功能提供了解决了该版本前,当主库密码文件发生改变后,需要手动同步到备库,才能将日志继续同步到备库,进一步简化了Oracle Data Guard配置的管理和维护成本。这个特性使所有的DBA都为之兴奋,从此再也不会为了因为主库密码发生改变没有同时更新到备库,导致主备库无法同步,甚至可能面临重新搭建备库。我想大家对上一次处理过因主库SYS密码改变导致重新搭建备库的经历还记忆犹新吧。

注:1.当有Far Sync实例时,仍需手动将修改后的密码文件同步到远程同步实例,一旦远程同步实例更新后,会自动同步到所有的物理备库。

 2. 当然也可以在Oracle 11g的版本设置redo_transport_user参数来实现同样的功能。

在了解了上述3个特性外,接下来咱们部署一套高可用的容灾环境:一主一备二个Far Sync实例,要求Far Sync实例实现高可用性。创建和配置Far Sync实例非常轻松,过程如此简单,和传统搭建备库完全一样。因此我将介绍配置Far Sync实例的所有步骤:

1. 创建控制文件。

SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/ctrlfsync01.ctl';
Database altered.
SQL>

2. 从SPFILE创建PFILE,并修改相应的参数。

SQL> CREATE PFILE='/tmp/initfsync.ora' FROM SPFILE;
File created.
SQL>

主库orcl部分参数:

DB_UNIQUE_NAME=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
LOG_ARCHIVE_DEST_2='SERVICE=fsync SYNC AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fsync GROUP=1 PRIORITY=1’
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_3='SERVICE=fsync2 SYNC AFFIRM
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fsync2 GROUP=1 PRIORITY=2’
LOG_ARCHIVE_DEST_STATE_3=ALTERNATE

Far Sync实例fsync:

DB_UNIQUE_NAME=fsync
CONTROL_FILES='/oradata/fsync/control01.ctl'
DB_FILE_NAME_CONVERT='+data','/oradata/fsync'
LOG_FILE_NAME_CONVERT='+data','/oradata/fsync'
FAL_SERVER=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/fsync
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fsync'

Far Sync实例fsync2:

DB_UNIQUE_NAME=fsync2
CONTROL_FILES='/oradata/fsync2/control01.ctl'
DB_FILE_NAME_CONVERT='+data','/oradata/fsync2'
LOG_FILE_NAME_CONVERT='+data','/oradata/fsync2'
FAL_SERVER=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,fsync,fsync2)'
LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/fsync2
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fsync2'

3. 生成SPFILE。

SQL>CREATE SPFILE='/u01/app/oracle/products/12.2.0/db_1/dbs/spfilefsync.ora' FROM PFILE='/tmp/initfsync.ora' ;
File created.
SQL>

4. 拷贝步骤1和步骤3生成的文件到Far Sync实例fsync和fsync2。

5. 拷贝密码文件的Far Sync实例fsync和fsync2。

6. 在Far Sync实例上配置监听。

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
  (GLOBAL_DBNAME = fsync)
  (ORACLE_HOME =/u01/app/oracle/products/12.2.0/db_1)
  (SID_NAME = fsync)
)
(SID_DESC =
  (GLOBAL_DBNAME = fsync2)
  (ORACLE_HOME =/u01/app/oracle/products/12.2.0/db_1)
  (SID_NAME = fsync2)
)
)

7. 主库创建网络服务名到Far Sync实例fsync和fsync2。

主库网络服务名:orcl;Far Sync:fsync,fsync2

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.70.124)(PORT = 1521))
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = orcl)
)
)
fsync=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.70.120)(PORT = 1521))
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = fsync)
)
)
fsync2=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.70.122)(PORT = 1521))
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = fsync2)
)
)

8. 启动Far Sync实例fsync和fsync2到mount状态。

SQL> startup mount
ORACLE instance started.
Total System Global Area  536870912 bytes
Fixed Size            8622776 bytes
Variable Size          218107208 bytes
Database Buffers      301989888 bytes
Redo Buffers            8151040 bytes
Database mounted.
SQL>

9. 创建Far Sync实例备用日志文件。

SQL> alter database add standby logfile '/oradata/fsync/standby01.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/oradata/fsync/standby02.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/oradata/fsync/standby03.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/oradata/fsync/standby04.log' size 50M;
SQL>

10. 验证Far Sync实例fsync和fsync2。

SQL> SELECT * FROM  V$DATAGUARD_CONFIG;
DB_UNIQUE_NAME   PARENT_DBUN           DEST_ROLE        CURRENT_SCN CON_ID
------------- ------------ -----------------  ------------- -----
orcl               NONE             PRIMARY DATABASE        4306114        0
fsync               orcl             FAR SYNC INSTANCE     0             0
fsync2               UNKNOWN          UNKNOWN                0                0
当前主库将归档日志传输到fsync中。
[oracle@node1 fsync]$ ls -l
-rw-r----- 1 oracle asmadmin     37376 Apr 12 23:21 2_27_964813855.dbf
-rw-r----- 1 oracle asmadmin     67072 Apr 12 23:23 2_28_964813855.dbf
-rw-r----- 1 oracle asmadmin   2409984 Apr 12 23:24 2_29_964813855.dbf
-rw-r----- 1 oracle asmadmin     56320 Apr 12 23:25 2_30_964813855.dbf
-rw-r----- 1 oracle asmadmin 209715712 Apr 12 23:29 2_31_964813855.dbf

11. 主库开启最大可用模式。

SQL> ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;
Database altered.
Elapsed: 00:00:00.00
SQL>  SELECT NAME,DATABASE_ROLE,PROTECTION_MODE FROM V$DATABASE;
NAME      DATABASE_ROLE     PROTECTION_MODE
-----  --------------    ------------------------- 
ORCL      PRIMARY           MAXIMUM AVAILABILITY

12. 模拟Far Sync实例fsync故障,验证Far Sync实例高可用。

将Far Sync实例fsync关闭
SQL> shut abort
ORACLE instance shut down.
查看主库当前日志传输:
SQL>  SELECT * FROM  V$DATAGUARD_CONFIG;
DB_UNIQUE_ PARENT_D DEST_ROLE             CURRENT_SCN     CON_ID
---------- -------- ----------------- ----------- ----------
orcl         NONE     PRIMARY DATABASE   5089347         0
fsync2         orcl     FAR SYNC INSTANCE     0           0
fsync         UNKNOWN  UNKNOWN               0           0

SQL> select dest_id,status,error from v$archive_dest;
DEST_ID STATUS    ERROR
---------- -------- -------------------------------------------
 1    VALID
 2    ALTERNATE
 3    VALID
主库将日志传输自动切换到fsync2上。

至此整个高可用的Far Sync实例搭建完成。

|  作者简介

杨波,沃趣科技数据库技术专家 主要参与公司产品实施、测试、维护以及优化。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

11g dataguard使用总结(r5笔记第12天)

11g的dataguard相比于10g来说,最优越的特性应该算就是active dataguard了,这一点改进在很大意义上促使用户需要把数据库从10g升级到1...

2816
来自专栏杨建荣的学习笔记

一次数据库无法登陆的"问题"及排查(r2第11天)

继昨天发生san存储切换导致io等待异常高的问题后,晚上客户对测试环境的数据库进行了远程启动,因为库比较多,监控process都起来了。客户就发邮件通知测试组继...

36212
来自专栏杨建荣的学习笔记

11g主库归档自动删除的小问题分析 (r8笔记第1天)

最近在无疑中查看一个数据库的日志的时候,发现里面有这么一段内容。 Sat Feb 06 10:07:25 2016 Deleted Oracle manag...

35411
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

592
来自专栏乐沙弥的世界

基于同一主机配置Oracle 11g Data Guard(logical standby)

      Oracle Data Guard逻辑备库是利用主库的一个备份首先建立一个物理备库,然后再将其转换为逻辑备库。这之后主库将日志传递到备库,备库利用l...

891
来自专栏杨建荣的学习笔记

关于Flashback的小测试(r10笔记第15天)

对于Oracle的Flashback来说,在11g里面有了一个很细微的变化,可以说是一个很不错的福利,那就是开启闪回不需要重启数据库至mount状态下,...

3404
来自专栏杨建荣的学习笔记

由sqlplus中的一个小细节所做的折腾(r5笔记第11天)

sqlplus是Oracle DBA每天都要用到烂的工具了。如果没有sqlplus还真不知道怎么和oracle对话了。转念一想,自己已经很久没使用过toad了。...

3726
来自专栏沃趣科技

复制状态与变量记录表 | performance_schema全方位介绍

不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解p...

1873
来自专栏乐沙弥的世界

理解 using backup controlfile

        using backup controlfile 通常用于恢复由于当前控制文件丢失且原来备份的控制文件较当前发生变化的情形之下。using ba...

1133
来自专栏C++

Windows核心编程:第4章 进程

1383

扫码关注云+社区

领取腾讯云代金券