

调皮一下:虽然本文介绍的是Oracle数据库技术,但并非“49年加入国军”
Oracle DataGuard Far Sync是12c引入的新特性,可以在ADG配置中添加一个独立的用于转储归档日志的特殊备库,可以看做级联备库的一个变种,其主要目的是为了解决远距离容灾传输的延迟,避免日志传输过程中因主库异常中断、网络波动/中断、备库异常等导致数据丢失,做到RPO=0(即数据零丢失)。
当然因为网络环境的进步、成本控制与运维复杂度等因素,这是一个在生成环境中不常用的功能,但是在数据库国产化迁移与同步过程中,这却成了一个非常好用的功能特性。
首先我们看看Oracle Exadata下,ASM实例的PGA与SGA配置:

在这里可以看到ASM实例的PGA配置为400M,SGA配置为3G,都是相对较小,为什么要看这个呢,我们要了解数据同步的机制,主要是全量同步和实时增量同步:
实时增量同步一般还要求所有表有主键并开启附加日志(这里就不做更详细的介绍了),而解析日志可以通过Oracle Logminr工具从数据库实例中解析数据库归档日志,但这会带来一些其他问题:
因此很多数据库/数据同步厂商就要求提供ASM的高权限访问账号,直接通过ASM拉取日志解析,以满足性能要求,但这还是会带来一些问题:
既然实时同步需求只需要解析归档日志那么回看Far Sync,是不是就非常合适了!
这里使用(单实例+ASM)+ 单实例来模拟RAC→单实例的DG Far Sync环境配置:

这里省略数据库软件与建库流程(已开启归档),Far Sync备库还需要通过netca创建监听(省略)。这里其实就是要模拟主库与日志备库下面参数的一些差异:

oracle用户下,数据库中执行:
alter database force logging;
alter systemset standby_file_management=AUTO;
alter systemset dg_broker_config_file1='+DATAC1/DBAAS/dr1dbaas.dat';
alter systemset dg_broker_config_file2='+RECOC1/DBAAS/dr2dbaas.dat';
-- 根据实际REDO日志大小配置
-- RAC需要配置thread,每个thread日志组数量大于对应REDO日志组1-2个
alter database add standby logfile group31 ('+DATAC1') size 200M;
alter database add standby logfile group32 ('+DATAC1') size 200M;
alter database add standby logfile group33 ('+DATAC1') size 200M;
alter database add standby logfile group34 ('+DATAC1') size 200M;
create pfile='/home/oracle/initdbarch.ora' from spfile;
scp /home/oracle/initdbarch.ora db02:~
编辑initdbarch.ora:
#删除/修改RAC相关内容(根据实际环境)
#将dbaas相关内容修改为dbarch(本次环境)
#添加
db_unique_name='dbarch'
#修改
*.audit_file_dest='/u01/app/oracle/admin/dbarch/adump'
*.control_files='/u01/app/oracle/oradata/dbarch/control01.ctl','/u01/app/oracle/fast_recovery_area/dbarch/control02.ctl'
*.db_create_file_dest='/u01/app/oracle/oradata'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.dg_broker_config_file1='/u01/app/oracle/oradata/dbarch/dr1dbarch.dat'
*.dg_broker_config_file2='/u01/app/oracle/fast_recovery_area/dbarch/dr2dbarch.dat'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbarchXDB)'
*.local_listener='LISTENER_DBARCH'
创建spfile:
create spfile from pfile='/home/oracle/initdbarch.ora';
cd $ORACLE_HOME/network/admin
编辑listener.ora,添加以下内容:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=dbarch)
(SID_NAME=dbarch
(ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
)
)
lsnrctl reload

cd $ORACLE_HOME/network/admin
编辑tnsnames.ora,编辑为以下内容:
#主库
DBAAS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.19)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbaas)
)
)
DBARCH =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.119)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbaas)
)
)
LISTENER_DBAAS =
(ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))
#备库
DBAAS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.19)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbarch)
)
)
DBARCH =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.119)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbarch)
)
)
LISTENER_DBARCH =
(ADDRESS = (PROTOCOL = TCP)(HOST = db02)(PORT = 1521))
scp /u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwdbaas db02:/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwdbarch
# RAC环境中需要现在asmcmd中将ASM中的密码文件复制到本地再传输至备库,同时注意权限:
# -rw-r----- 1 oracle oinstall 2048 Jan 6 01:35 orapwdbaas
mkdir -p /u01/app/oracle/oradata/dbarch
mkdir -p /u01/app/oracle/fast_recovery_area/dbarch
mkdir -p /u01/app/oracle/admin/dbarch/adump
startup nomount

rman target sys/oracle@dbaas auxiliary sys/oracle@dbarch
duplicate target database for farsync from active database;

主备数据库均执行:
alter system set dg_broker_start=true;
dgmgrl sys/oracle@dbaas
create configuration 'dbdg' as primary databaseis dbaas connect identifier is dbaas;
add far_sync dbarch as connect identifier is dbarch;
enable configuration;

show configuration
show database dbaas
show far_sync dbarch


控制文件,DG配置文件,standby logfile和归档日志均正常生成。
主库切换日志:
alter system switch logfile;

备库正常生成新的归档日志。 至此DG Far Sync日志备库搭建完成,同步工具可以从日志备库解析日志。
注意: 在实际生成中如果配置了主库归档清除策略,需要测试归档是否能正常删除,是否需要添加force关键字;日志备库同理
本期介绍了DG Far Sync日志备库在数据库国产化过程中的非常规用法与搭建流程。 老规矩,知道写了些啥。