Oracle DBには災対構成などによく使われるData Guard (DG) という機能があります。
Standbyが隣の建屋にあったり、東京-大阪にPrimaryとStandbyを配置する場合は通常のDGを利用されるかと思います。
一方、何らかの事情でPrimaryとStandbyが国を跨いで配置されたり、国内でも北海道-沖縄のように物凄く距離が離れているケースもあります。
そのような構成ではNWレイテンシが大きいため、以下のような課題が発生します。
- 最大可用性モードにすると、Standbyに更新反映されるまで時間が掛かるため、Primaryの性能が落ちる
- 最大パフォーマンスモードにすると、Standbyへ同期されるデータのLagが大きくなってしまい、有事の際にデータ損失する可能性が高くなる
このようにPrimary-Standby間の距離が物凄く離れている場合の課題を軽減するべく「遠隔同期インスタンス (Far Sync)」という機能が12cR1より追加されました。
以下はFar Syncを利用した場合のDGの構成イメージです。

Far Syncの配置により以下のような効果を期待でき、先述の課題を緩和できるものとなっています。
- Primary-Far Syncは最大可用性モードで同期するため、Primaryが落ちてもFar Syncに最新の更新内容が保持される
- Primaryに障害が起きてもStandbyはFar Syncから最新の更新データを受け取れる
- PrimaryとFar Syncはレイテンシが小さい構成とすることで、最大可用性モードでもPrimaryの性能劣化を起こしにくい
- さらにFastSyncというモードを使うとPrimaryの性能をよりキープ可能
災害などでPrimaryとFar Syncが同時に落ちた場合はデータ損失が起き得ますが、そのようなケース以外では上記の通りPrimaryの性能劣化を防止しつつ、可用性を向上させられる機能となっています。
またFar SyncはREDOログを受け取って転送する役割だけ担うため、表領域が不要です。
Far Sync自身が複雑な処理を行わないため、サーバスペックもほとんど必要ありません。
注意
Far Syncの利用にはPrimaryとStandbyに対してActive Data Guardオプションのライセンスが必要です。
※Far Syncインスタンスが稼働するサーバはライセンス不要です。
詳細は下記マニュアルをご確認ください。
https://docs.oracle.com/cd/F19136_01/dblic/Licensing-Information.html#GUID-75262092-CD86-4B30-A21B-92ECC1C2E130#:~:text=遠隔同期インスタンス
今回はそんなFar Syncインスタンスを実際に構築してみました。
また構築した環境を使ってSwitchover、Failover、Far Sync障害といった基本動作を確認しました。
なお本記事ではFar Syncインスタンスの構築を取り扱い、Switchoverなどの動作確認は次回の記事にてまとめる予定です。
目次
検証環境
DBサーバはOCI Computeで構築しました。
各種SWのバージョンは以下の通りです。
- OS: Oracle Linux 7.9
- DB: Oracle Database EE 19c (RU19.20)
構築手順
PrimaryとStandbyの構築
Far Syncインスタンス構築の前にPrimaryとStandbyの構築が必要です。
そちらの手順は下記LiveLabsをご参照ください。
PrimaryとStandbyのSWインストールやPrimaryのDB構築までは自動化されています。
その後のNWや初期化パラメータの設定、Standby DB作成は Lab 4 まで手順通りに行います。
Far Sync用DBサーバの用意
Far Sync用DBサーバは下記マーケットプレイスのイメージを使って構築しました。
バージョンは「19.20 - OL7U9」を選択します。
Far SyncサーバのNW設定
1521ポートの受信を許可します。
$ sudo firewall-cmd --zone=public --add-port=1521/tcp --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
oracleユーザによるリモートログインを許可します。
$ sudo vi /etc/ssh/sshd_config
## 以下を末尾に追記
## AllowUsers oracle
## AllowUsers opc
## sshd再起動
$ sudo systemctl restart sshd.service
Primary、Standby、Far Syncそれぞれの hosts に以下情報を設定します。
xxx.xxx.xxx.xxx は各サーバのパブリックIPを記入します。
$ sudo vi /etc/hosts
xxx.xxx.xxx.xxx primary.subnet1.primaryvcn.oraclevcn.com primary
xxx.xxx.xxx.xxx standby.subnet1.standbyvcn.oraclevcn.com standby
xxx.xxx.xxx.xxx farsync.subnet1.primaryvcn.oraclevcn.com farsync
Far Syncサーバにoracleユーザでパスワード無しログインが出来るよう設定します。
まずSSHキーペアを作成します。
$ sudo su - oracle
$ ssh-keygen -t rsa
生成された公開鍵の内容をPrimary、Standbyの .ssh/authorized_keys に追記します。
$ cat .ssh/id_rsa.pub
primary、standbyの公開鍵の内容を、Far Syncの .ssh/authorized_keys に追記します。
$ mkdir .ssh
$ vi .ssh/authorized_keys
追記したら権限を適切に設定します。
$ chmod 600 .ssh/authorized_keys
Far SyncからPrimary、Standbyへの接続テストを実施します。
$ ssh oracle@primary echo Test success
$ ssh oracle@standby echo Test success
Primary、StandbyからFar Syncへの接続テストを実施します。
$ ssh oracle@farsync echo Test success
マーケットプレイスのイメージにより自動作成されたDBを削除
Far Syncサーバにはマーケットプレイスのイメージにより自動作成されたDBが存在します。
該当DBのDB名が今回DG構成するDBと被っているため、一旦削除します。
$ sqlplus / as sysdba
SQL> DROP DATABASE;
Far Sync用の制御ファイル作成
以降の手順は下記サイトを参考にしています。
パラメータやパスは本環境向けに読み替えて実行しました。
Far Syncインスタンス作成にあたり、まずPrimaryにてFar Sync用の制御ファイルを作成します。
$ sqlplus / as sysdba
SQL> alter database create far sync instance controlfile as '/home/oracle/controlfs.ctl';
作成した制御ファイルをFar Syncサーバに転送します。
$ scp -p /home/oracle/controlfs.ctl oracle@farsync:/u01/fs1/
Primaryのパスワードファイルを転送
PrimaryのパスワードファイルをFar Syncサーバに転送します。
$ scp oracle@primary:/u01/app/oracle/product/19c/dbhome_1/dbs/orapwORCL $ORACLE_HOME/dbs
Far Syncインスタンス用のpfile、spfile作成
Far Syncサーバにて、Far Syncインスタンス用のディレクトリを作成します。
$ mkdir /u01/fs1/audit/
$ mkdir /u01/fs1/coredump/
$ mkdir /u01/fs1/dg_broker/
$ mkdir /u01/fs1/diag/
$ mkdir /u01/fs1/fra/
上記パスをもとに、Far Syncインスタンスのpfileを作成します。
$ vi /u01/fs1/init_fs.ora
## 以下の初期化パラメータを記入
*.db_name='ORCL'
*.db_unique_name='ORCLFS1'
*.compatible='19.0.0'
*.control_files='/u01/fs1/controlfs.ctl'
*.diagnostic_dest='/u01/fs1/diag/'
*.core_dump_dest='/u01/fs1/coredump/'
*.audit_file_dest='/u01/fs1/audit/'
*.audit_trail='DB'
*.db_recovery_file_dest='/u01/fs1/fra/'
*.db_recovery_file_dest_size=250g
*.dg_broker_config_file1='/u01/fs1/dg_broker/fs1_01.dat'
*.dg_broker_config_file2='/u01/fs1/dg_broker/fs1_02.dat'
*.dg_broker_start=TRUE
*.dispatchers='(PROTOCOL=TCP) (SERVICE=FS1XDB)'
*.standby_file_management='AUTO'
bashrc に環境変数を設定します。
$ vi .bashrc
export ORACLE_UNQNAME=ORCLFS1
pfileからspfileを作成します。
$ sqlplus / as sysdba
## Far Syncインスタンスをnomountで起動
SQL> startup pfile='/u01/fs1/init_fs.ora' nomount;
## spfile作成
SQL> create spfile='/u01/app/oracle/product/19c/dbhome_1/dbs/spfileFS1.ora' from pfile='/u01/fs1/init_fs.ora';
DBを再起動してspfileが利用できることを確認します。
SQL> shutdown immediate;
SQL> startup mount;
## Far Syncインスタンスとして起動しているか確認
SQL> select name, db_unique_name, database_role, open_mode from v$database;
NAME DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE
--------- ------------------------------ ---------------- --------------------
ORCL ORCLFS1 FAR SYNC MOUNTED
静的リスナーを設定
Primaryからmount状態のFar Syncインスタンスにリモート接続できるよう、Far Syncサーバ上で静的リスナーを設定します。
$ vi $ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = farsync.subnet1.primaryvcn.oraclevcn.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
リスナーを再起動します。
$ lsnrctl start
$ lsnrctl services
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 27-SEP-2025 18:23:59
Copyright (c) 1991, 2023, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=farsync.subnet1.primaryvcn.oraclevcn.com)(PORT=1521)))
Services Summary...
Service "ORCLFS1" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully
tnsnames.oraの設定
Far Syncサーバ上の tnsnames.ora にPrimaryとStandbyへ接続するためのサービスを定義します。
$ vi $ORACLE_HOME/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary.subnet1.primaryvcn.oraclevcn.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
ORCLSTBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby.subnet1.standbyvcn.oraclevcn.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLSTBY)
)
)
## PrimaryとStandbyへの接続テスト
$ sqlplus sys@ORCL as sysdba
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string ORCL
$ sqlplus sys@ORCLSTBY as sysdba
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string ORCLSTBY
PrimaryサーバとStandbyサーバ上の tnsnames.ora にFar Syncへ接続するためのサービスを定義します。
$ vi $ORACLE_HOME/network/admin/tnsnames.ora
ORCLFS1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = farsync.subnet1.primaryvcn.oraclevcn.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLFS1)
)
)
## Far Syncへの接続テスト
$ sqlplus sys@ORCLFS1 as sysdba
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string ORCLFS1
Data Guard構成にFar Syncインスタンスを追加
Primary上でData Gaurd Brokerを使い、Far SyncインスタンスをData Guard構成に追加します。
$ dgmgrl sys@ORCL
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Sat Sep 27 18:26:22 2025
Version 19.20.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "ORCL"
Connected as SYSDBA.
DGMGRL> ADD FAR_SYNC ORCLFS1 AS CONNECT IDENTIFIER IS ORCLFS1;
far sync instance "orclfs1" added
DGMGRL> ENABLE FAR_SYNC ORCLFS1;
Enabled.
DGMGRL> show configuration
Configuration - adgconfig
Protection Mode: MaxPerformance
Members:
orcl - Primary database
orclstby - Physical standby database
orclfs1 - Far sync instance
Warning: ORA-16789: standby redo logs configured incorrectly
Fast-Start Failover: Disabled
Configuration Status:
WARNING (status updated 56 seconds ago)
REDOログの転送設定
show configuration で Warning が出ている通り、REDOログが正常に転送されていないため、RedoRoutes を設定します。
DGMGRL> EDIT DATABASE 'ORCL' SET PROPERTY RedoRoutes = '( LOCAL : ( ORCLFS1 FASTSYNC PRIORITY=1, ORCLSTBY ASYNC PRIORITY=2 ))';
Warning: ORA-16677: Standby database has the same or higher priority than other members specified in the RedoRoutes group.
Property "redoroutes" updated
DGMGRL> EDIT FAR_SYNC 'ORCLFS1' SET PROPERTY RedoRoutes = '( ORCL : ORCLSTBY ASYNC )';
Property "redoroutes" updated
DGMGRL> EDIT DATABASE 'ORCLSTBY' SET PROPERTY RedoRoutes = '( LOCAL : ORCL ASYNC )';
Property "redoroutes" updated
ちなみに RedoRoutes の設定状況は show database '<DB UNIQUE NAME>' RedoRoutes; で確認できます。
最後に保護モードが最大パフォーマンスモードになっているため、最大可用性モードに変更します。
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
Succeeded.
正しく構成されているか確認します。
ORA-16789 が出力されるかもしれませんが、時間が経つと表示されなくなります。
DGMGRL> show configuration
Configuration - adgconfig
Protection Mode: MaxAvailability
Members:
orcl - Primary database
orclfs1 - Far sync instance
orclstby - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 55 seconds ago)
V$DATAGUARD_CONFIG からも確認しておきます。
$ sqlplus / as sysdba
SQL> select DB_UNIQUE_NAME, DEST_ROLE from V$DATAGUARD_CONFIG;
DB_UNIQUE_NAME DEST_ROLE
------------------------------ -----------------
ORCL PRIMARY DATABASE
orclfs1 FAR SYNC INSTANCE
orclstby PHYSICAL STANDBY
Far SyncインスタンスにてStandbyログが使われているか確認します。
$ sqlplus / as sysdba
SQL> select group#,thread#,bytes,status from v$standby_log;
GROUP# THREAD# BYTES STATUS
---------- ---------- ---------- ----------
1 1 1073741824 ACTIVE
2 1 1073741824 UNASSIGNED
3 1 1073741824 UNASSIGNED
7 1 1073741824 UNASSIGNED
Lagの確認
以上でFar Syncの構成は完了ですが、本記事の最後にLagの確認方法を載せておきます。
Standbyにログインし、v$dataguard_stats から確認できます。
各メトリックについては以下マニュアルをご参照ください。
SQL> set linesize 120;
SQL> column name format a25;
SQL> column value format a20;
SQL> column time_computed format a20;
SQL> column datum_time format a20;
SQL> select name, value, time_computed, datum_time from v$dataguard_stats;
NAME VALUE TIME_COMPUTED DATUM_TIME
------------------------- -------------------- -------------------- --------------------
transport lag +00 00:00:00 09/28/2025 08:24:52 09/28/2025 08:24:51
apply lag +00 00:00:00 09/28/2025 08:24:52 09/28/2025 08:24:51
apply finish time +00 00:00:00.000 09/28/2025 08:24:52
estimated startup time 7 09/28/2025 08:24:52
Data Guard Brokerからも確認できます。
## Standby側のLag確認
DGMGRL> show database ORCLSTBY
Database - orclstby
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 0 seconds (computed 0 seconds ago)
Average Apply Rate: 0 Byte/s
Real Time Query: ON
Instance(s):
ORCL
Database Status:
SUCCESS
## Far Sync側のLag確認
DGMGRL> show FAR_SYNC ORCLFS1
Far Sync Instance - orclfs1
Transport Lag: 0 seconds (computed 1 second ago)
Instance(s):
ORCL
Far Sync Instance Status:
SUCCESS
以上でFar Syncインスタンスが構築され、冒頭イメージ図の構成を実現できました。
次回は本環境を使い、SwitchoverやFailover、Far Syncインスタンス障害の動作を確認したいと思います。