12c创建Far Sync

从12c开始,Data Guard有了Far Sync特性。主库站点新建一个Far Sync实例,主库与Far Sync实例同步传输,Far Sync实例再与远程实例异步传输,避免了之前版本直接与远程实例同步传输会因网络延迟造成失败。

拓扑架构上,最简单的架构为:

    站点A                            站点B
主库->Far Sync——————Standby库

如果希望在角色切换后,新的主库端也有Far Sync实例,则可按如下架构:

    站点A                            站点B
主库->Far Sync——————   Far Sync->Standby库

如果希望主库端在Far Sync端实现高可用以避免Far Sync实例成为单点故障,则可进一步如下设计:

    站点A                            站点B
主库->Far Sync 1——————   Far Sync 3->Standby库
       ->Far Sync 2                   Far Sync 4->

特别注意:主库和Standby库仍然需要直接互连,因为需要角色转换,同时也会将Standby库作为次选的日志归档路径。

以下实验按照第一个架构。

主库:prmy;备库:remote;Far Sync:prmyfs

0. Far Sync的准备
包括静态监听,本地服务名、创建目录、密码文件等。
1. 首先创建prmy和remote的DG,详见:12c RAC下搭建物理备用 

2. 创建Far Sync实例
主库上创建Far Sync所用的控制文件

点击(此处)折叠或打开

  1. SQL> ALTER DATABASE CREATE FAR SYNC INSTANCE CONTROLFILE AS '/tmp/controlfs01.ctl';
主库上创建pfile文件

点击(此处)折叠或打开

  1. SQL> create pfile='/tmp/pfile.fs' from spfile;
将以上两个文件发送给Far Sync实例所在服务器,并复制到相关位置。

3. 编辑3个实例的pfile参数文件,可以先通过spfile创建一个pfile,编辑后再用pfile覆盖spfile
Prmy:

点击(此处)折叠或打开

  1. *.audit_file_dest='/u01/app/oracle/admin/prmy/adump'
  2. *.audit_trail='db'
  3. *.compatible='12.1.0.2.0'
  4. *.control_files='/oradata/PRMY/controlfile/o1_mf_cp1p1dno_.ctl','/fra/PRMY/controlfile/o1_mf_cp1p1g77_.ctl'
  5. *.db_block_size=8192
  6. *.db_create_file_dest='/oradata'
  7. *.db_domain=''
  8. *.db_name='prmy'
  9. *.db_recovery_file_dest='/fra'
  10. *.db_recovery_file_dest_size=55g
  11. *.diagnostic_dest='/u01/app/oracle'
  12. *.dispatchers='(PROTOCOL=TCP) (SERVICE=prmyXDB)'
  13. *.enable_pluggable_database=true
  14. *.fal_client='PRMY'
  15. *.fal_server='REMOTE'
  16. *.local_listener=''
  17. *.log_archive_config='dg_config=(prmy,prmyfs,remote)'
  18. *.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prmy'
  19. *.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
  20. *.log_archive_dest_2='service=prmyfs SYNC AFFIRM MAX_FAILURE=1 ALTERNATE=LOG_ARCHIVE_DEST_3 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prmyfs'
  21. *.LOG_ARCHIVE_DEST_STATE_3='ALTERNATE'
  22. *.LOG_ARCHIVE_DEST_3='SERVICE=remote ASYNC ALTERNATE=LOG_ARCHIVE_DEST_2 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=remote'
  23. *.log_archive_format='%t_%s_%r.dbf'
  24. *.log_archive_max_processes=4
  25. *.memory_target=1560m
  26. *.open_cursors=300
  27. *.processes=300
  28. *.remote_login_passwordfile='EXCLUSIVE'
  29. *.standby_file_management='AUTO'
  30. *.undo_tablespace='UNDOTBS1'
  31. *.DB_FILE_NAME_CONVERT='/REMOTE/','/PRMY/'
  32. *.LOG_FILE_NAME_CONVERT='/REMOTE/','/PRMY/'
Prmyfs:

点击(此处)折叠或打开

  1. *.audit_file_dest='/u01/app/oracle/admin/prmyfs/adump'
  2. *.audit_trail='db'
  3. *.compatible='12.1.0.2.0'
  4. *.control_files='/u01/oradata/PRMYFS/controlfile/controlfs01.ctl','/u01/fra/PRMYFS/controlfile/controlfs02.ctl'
  5. *.db_block_size=8192
  6. *.db_domain=''
  7. *.db_create_file_dest='/u01/oradata'
  8. *.db_recovery_file_dest='/u01/fra'
  9. *.db_recovery_file_dest_size=55g
  10. *.diagnostic_dest='/u01/app/oracle'
  11. *.enable_pluggable_database=true
  12. *.fal_server='PRMY'
  13. *.local_listener=''
  14. *.log_archive_config='dg_config=(prmy,prmyfs,remote)'
  15. *.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prmyfs'
  16. *.log_archive_dest_2='SERVICE=remote ASYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=remote'
  17. *.log_archive_format='%t_%s_%r.dbf'
  18. *.log_archive_max_processes=4
  19. *.memory_target=1560m
  20. *.open_cursors=300
  21. *.processes=300
  22. *.remote_login_passwordfile='EXCLUSIVE'
  23. *.standby_file_management='AUTO'
  24. *.DB_UNIQUE_NAME='PRMYFS'
  25. *.DB_NAME='PRMY'
  26. *.LOG_FILE_NAME_CONVERT='/oradata/PRMY/','/u01/oradata/PRMYFS/','/oradata/REMOTE/','/u01/oradata/PRMYFS/'
Remote:

点击(此处)折叠或打开

  1. *.audit_file_dest='/u01/app/oracle/admin/remote/adump'
  2. *.audit_trail='db'
  3. *.compatible='12.1.0.2.0'
  4. *.control_files='/oradata/REMOTE/controlfile/control01.ctl','/fra/REMOTE/controlfile/control02.ctl'
  5. *.db_block_size=8192
  6. *.db_create_file_dest='/oradata'
  7. *.db_create_online_log_dest_1='/oradata'
  8. *.db_create_online_log_dest_2='/fra'
  9. *.db_domain=''
  10. *.db_file_name_convert='PRMY','REMOTE'
  11. *.log_file_name_convert='PRMY','REMOTE'
  12. *.db_name='prmy'
  13. *.db_recovery_file_dest='/fra'
  14. *.db_recovery_file_dest_size=59055800320
  15. *.db_unique_name='remote'
  16. *.diagnostic_dest='/u01/app/oracle'
  17. *.dispatchers='(PROTOCOL=TCP) (SERVICE=remoteXDB)'
  18. *.enable_pluggable_database=true
  19. *.fal_client='remote'
  20. *.fal_server='prmyfs','prmy'
  21. *.local_listener=''
  22. *.log_archive_config='dg_config=(prmy,prmyfs,remote)'
  23. *.LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=remote'
  24. *.log_archive_dest_2='service=prmy ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=prmy'
  25. *.log_archive_format='%t_%s_%r.dbf'
  26. *.log_archive_max_processes=4
  27. *.memory_target=1560m
  28. *.open_cursors=300
  29. *.processes=300
  30. *.remote_login_passwordfile='EXCLUSIVE'
  31. *.standby_file_management='AUTO'
  32. *.undo_tablespace='UNDOTBS1'

4. 接下来,可以用新的spfile启动所有实例。其中Far Sync实例只启动到mount模式。
注意:Far Sync实例不需要创建Standby log,通过log_file_name_convert会将Primary上的logfile自动转换创建出来。

5. 查看Data Guard运行配置:
在所有实例上皆可执行该查询:

点击(此处)折叠或打开

  1. col PARENT_DBUN format a15
  2. col DB_UNIQUE_NAME format a15
  3. select * from V$DATAGUARD_CONFIG;

  4. DB_UNIQUE_NAME PARENT_DBUN      DEST_ROLE         CURRENT_SCN CON_ID
  5. --------------- --------------- ----------------- ----------- ----------
  6. prmy              NONE          PRIMARY DATABASE      1943029 0
  7. prmyfs            prmy          FAR SYNC INSTANCE     1942902 0
  8. remote            prmyfs        PHYSICAL STANDBY      1942902 0
5. 可设置Primary的保护模式为MAXIMUM AVAILABLITY:

点击(此处)折叠或打开

  1. ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;
到此,配置全部完成。

有以下几点需要注意:

1. Far Sync上没有onlinelog,只有Standby log,在v$logfile上显示的onlinelog其实是Primary上的。

点击(此处)折叠或打开

  1. col member format a52
  2. select group#,type,member from v$logfile order by 1;

  3.     GROUP# TYPE MEMBER
  4. ---------- ------- ----------------------------------------------------
  5.          1 ONLINE /u01/oradata/PRMYFS/onlinelog/o1_mf_1_cp1p1lt1_.log
  6.          1 ONLINE /fra/PRMY/onlinelog/o1_mf_1_cp1p1m5t_.log
  7.          2 ONLINE /u01/oradata/PRMYFS/onlinelog/o1_mf_2_cp1p2b0f_.log
  8.          2 ONLINE /fra/PRMY/onlinelog/o1_mf_2_cp1p2bcn_.log
  9.          3 ONLINE /u01/oradata/PRMYFS/onlinelog/o1_mf_3_cp1p336d_.log
  10.          3 ONLINE /fra/PRMY/onlinelog/o1_mf_3_cp1p33l5_.log
  11.          4 STANDBY /u01/oradata/PRMYFS/onlinelog/o1_mf_4_cp4jg98h_.log
  12.          4 STANDBY /u01/fra/PRMYFS/onlinelog/o1_mf_4_cp4jg9qs_.log
  13.          5 STANDBY /u01/oradata/PRMYFS/onlinelog/o1_mf_5_cp4jhjo4_.log
  14.          5 STANDBY /u01/fra/PRMYFS/onlinelog/o1_mf_5_cp4jhmkb_.log
  15.          6 STANDBY /u01/oradata/PRMYFS/onlinelog/o1_mf_6_cp4jjc8c_.log

  16.     GROUP# TYPE MEMBER
  17. ---------- ------- ----------------------------------------------------
  18.          6 STANDBY /u01/fra/PRMYFS/onlinelog/o1_mf_6_cp4jjco8_.log
  19.          7 STANDBY /u01/oradata/PRMYFS/onlinelog/o1_mf_7_cp4jg93f_.log
  20.          7 STANDBY /u01/fra/PRMYFS/onlinelog/o1_mf_7_cp4jg9x7_.log

  21. $ ll /u01/fra/PRMYFS/onlinelog
    total 204816
    -rw-r----- 1 oracle oinstall 52429312 Jun 16 15:23 o1_mf_4_cp4jg9qs_.log
    -rw-r----- 1 oracle oinstall 52429312 Jun 16 14:17 o1_mf_5_cp4jhmkb_.log
    -rw-r----- 1 oracle oinstall 52429312 Jun 16 14:07 o1_mf_6_cp4jjco8_.log
    -rw-r----- 1 oracle oinstall 52429312 Jun 16 14:06 o1_mf_7_cp4jg9x7_.log

2. 在Primary端设置保护模式后,Standby和Far Sync的保护模式也相应改变。

3. Fast Sync的使用
上例中的Primary端使用了redo传输参数为:


点击(此处)折叠或打开

  1. log_archive_dest_2='service=prmyfs SYNC AFFIRM……'
可选择SYNC NOAFFIRM,表示等待对方的收到确认,但不要求写入磁盘的确认,这个就是Fast Sync特性。AFFIRM则表示还要等待写入磁盘的确认。详见:
http://docs.oracle.com/database/121/SBYDB/protection.htm#SBYDB4743


请使用浏览器的分享功能分享到微信等