前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle Data Guard Feature 12cR2系列(一)

Oracle Data Guard Feature 12cR2系列(一)

原创
作者头像
沃趣科技
修改2018-07-02 15:42:00
5930
修改2018-07-02 15:42:00
举报
文章被收录于专栏:沃趣科技沃趣科技

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属性来完成。

示例:

代码语言:javascript
复制
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.?创建控制文件。

代码语言:javascript
复制
SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/ctrlfsync01.ctl';
Database altered.
SQL>

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

代码语言:javascript
复制
SQL> CREATE PFILE='/tmp/initfsync.ora' FROM SPFILE;
File created.
SQL>

主库orcl部分参数:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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实例上配置监听。

代码语言:javascript
复制
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

代码语言:javascript
复制
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状态。

代码语言:javascript
复制
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实例备用日志文件。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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.?主库开启最大可用模式。

代码语言:javascript
复制
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实例高可用。

代码语言:javascript
复制
将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实例搭建完成。

| ?作者简介

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • | ?Far Sync Instance
  • | ?Enhancing Support for Alternate Destinations
  • | ?Automatically Synchronize Password Files in Oracle Data Guard Configurations
  • | ?作者简介
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com