5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

長距離間の災対に使えるOracle DB 遠隔同期インスタンス (Far Sync) を構築してみた

5
Last updated at Posted at 2025-09-29

Oracle DBには災対構成などによく使われるData Guard (DG) という機能があります。
Standbyが隣の建屋にあったり、東京-大阪にPrimaryとStandbyを配置する場合は通常のDGを利用されるかと思います。
一方、何らかの事情でPrimaryとStandbyが国を跨いで配置されたり、国内でも北海道-沖縄のように物凄く距離が離れているケースもあります。
そのような構成ではNWレイテンシが大きいため、以下のような課題が発生します。

  • 最大可用性モードにすると、Standbyに更新反映されるまで時間が掛かるため、Primaryの性能が落ちる
  • 最大パフォーマンスモードにすると、Standbyへ同期されるデータのLagが大きくなってしまい、有事の際にデータ損失する可能性が高くなる

このようにPrimary-Standby間の距離が物凄く離れている場合の課題を軽減するべく「遠隔同期インスタンス (Far Sync)」という機能が12cR1より追加されました。

以下はFar Syncを利用した場合のDGの構成イメージです。
farsync.jpg

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 configurationWarning が出ている通り、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インスタンス障害の動作を確認したいと思います。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?