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 条评论
登录 后参与评论

相关文章

来自专栏数据和云

12c特性解读:RAC MGMTDB资料库的转移与维护

戴明明(Dave) Oracle ACE-A,ACOUG核心成员,宝存科技数据库方案架构师 Dave也是CSDN 认证专家,超过7年的DBA经验,擅长Orac...

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

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

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

3184
来自专栏数据和云

与时俱进:ASM内存管理与创建表空间之ORA-569错误解决

杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE总监,ITPUB Oracle数据库管理版版主 在一个测试数据库上创建表空...

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

通过shell脚本批量验证dataguard的有效性(r7笔记第96天)

我们假设一个场景,当你接触到一个新的环境,我们需要了解这个数据库是否为RAC,是否有备库。 如果有备库,那么问题来了,如果想去验证备库的状态是否有效,是否及时应...

2656
来自专栏沃趣科技

应用示例荟萃 | performance_schema全方位介绍(下)

使用performance_schema中的语句当前事件记录表和语句事件历史记录表可以查询数据库中最近执行的一些SQL语句,以及语句相关的信息,这里我们以eve...

1483
来自专栏Java技术栈

mysql语句性能开销检测profiling详解

之前我介绍过msyql查询优化explain检查命令的使用,explain主要是检查sql语句的基本性能,sql是否优秀,但不能查看具体的涉及硬件资源的开销,今...

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

CPU 100%负载的性能优化分析(r7笔记第40天)

今天收到报警邮件,提示在短时间内DB time有了很大的抖动。报警邮件如下: ZABBIX-监控系统: ------------------------...

3274
来自专栏大大刺猬

python 优化办公(excel)

使用pyinstaller: pyinstaller -F 你的.py文件 -i 你的ico图标(logo)

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

一封备库报警邮件的分析(r6笔记第82天)

对于orabbix报出的警报,自己都是心怀敬畏,因为这些表面的现象如果深入分析没准就能有所收获,当然目的还是解决问题,不是一味追求指标。 今天收到的报警邮件如下...

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

由报警邮件分析发现的备库oracle bug(r7笔记第12天)

昨天到公司之后,收到两份封报警邮件,可以看到在早晨6:30左右主库的v$dataguard_status检查时发现了一个错误。然后再2分钟后就自动恢复了。 一般...

2466

扫码关注云+社区