タスク3 - Oracle GoldenGateデプロイメントを格納する共有ファイル・システムの作成
Oracle GoldenGate Microservices Architectureの設計では、インストールとデプロイメントのディレクトリ構造が簡略化されています。
- 
                        
                        
インストール・ディレクトリは、ソフトウェア・パッチ適用時の停止時間を最小限に抑えるために、各データベース・ノードのローカル記憶域に配置する必要があります。
 - 
                        
                        
デプロイメント・ディレクトリは、Oracle GoldenGate Configuration Assistant (oggca.sh)を使用したデプロイメントの作成時に作成されます。このディレクトリは、共有ファイル・システムに配置する必要があります。デプロイメント・ディレクトリには、構成、セキュリティ、ログ、パラメータ、証跡およびチェックポイントのファイルが含まれます。
 
DBFSまたはOracle Automatic Storage Management Cluster File System (ACFS)にデプロイメントを配置すると、システム障害の発生時に最高のリカバリ性とフェイルオーバー機能が得られます。クラスタ全体でチェックポイント・ファイルの可用性を確保することは、障害発生後にGoldenGateプロセスが最後に認識された位置から実行を継続できるようにするために不可欠です。
Oracle Data GuardとともにOracle GoldenGateを構成する場合、推奨のファイル・システムはDBFSです。DBFSはData Guardによって保護されるデータベースに格納され、XAGと完全に統合できます。Data Guardのロール・トランジションが発生した場合、このファイル・システムは新しいプライマリ・サーバーに自動的にマウントされ、その後でOracle GoldenGateが自動起動されます。ACFSはOracle Data Guard構成の一部ではないため、これは現時点ではできません。
ノート:
このドキュメントには、Oracle Data GuardとともにOracle GoldenGateを構成するステップは含まれていません。
Oracle Data Guardが存在しない場合、推奨のファイル・システムはACFSです。Oracle ACFSは、複数のプラットフォームに対応するスケーラブルなファイル・システムおよびストレージ管理のテクノロジです。このテクノロジにより、Oracle Automatic Storage Management (Oracle ASM)機能は、Oracle Databaseの外部に維持されているカスタマ・ファイルをサポートするように拡張されます。
ファイル・システムの要件に基づいて、次のいずれかのステップを実行して、このタスクを完了します。
- ステップ3a - Oracle Database File System (DBFS)
 - ステップ3b - Oracle ASM Cluster File System (ACFS)
 
ステップ3a - Oracle Database File System (DBFS)
Oracle GoldenGateプロセスが接続されるデータベースと同じデータベース内にDBFS表領域を作成する必要があります。たとえば、Oracle GoldenGate統合ExtractプロセスがGGDBというデータベースから抽出される場合は、同じGGDBデータベースにDBFS表領域を配置します。
Oracle GoldenGateのデプロイメント・ファイルを格納するためのファイル・システムを作成します。最大12時間の証跡ファイルの格納を可能にするには、十分な証跡ファイルのディスク領域を割り当てる必要があります。そうすることで、新しい証跡ファイルを受信できないターゲット環境で問題が発生した場合に、証跡ファイルの生成に十分な領域を確保します。12時間に必要な領域の量は、実際の本番データで証跡ファイルの生成率をテストすることでのみ決定できます。
次のサブステップを実行して、このステップを完了します。
- ステップ3a.1 - Oracle Exadata Database ServiceのDBFSの構成
 - ステップ3a.2 - DBFSリポジトリの作成
 - ステップ3a.3 - (CDBのみ) TNSNAMES内のエントリの作成
 - ステップ3a.4 - mount-dbfsスクリプトのダウンロードと編集
 - ステップ3a.5 - DBFSリソースのOracle Clusterwareへの登録
 - ステップ3a.6 - DBFSリソースの起動
 
opcOSユーザーとして、fuseグループにgridユーザーを追加します。[opc@exadb-node1]$ sudo -u grid $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/bin/olsnodes > ~/dbs_group [opc@exadb-node1]$ dcli -g ~/dbs_group -l opc sudo usermod -a -G fuse gridopcOSユーザーとして、ファイル/etc/fuse.confが存在していることと、user_allow_otherオプションが含まれていることを確認します。[opc@exadb-node1]$ cat /etc/fuse.conf # mount_max = 1000 # user_allow_other- このステップは、すでにオプション
user_allow_otherが/etc/fuse.confファイル内にある場合はスキップします。それ以外の場合は、
opcOSユーザーとして次のコマンドを実行してオプションを追加します。[opc@exadb-node1]$ dcli -g ~/dbs_group -l opc "echo user_allow_other | sudo tee -a /etc/fuse.conf" opcOSユーザーとして、DBFSファイル・システムのマウント・ポイントとして使用する空のディレクトリを作成します。[opc@exadb-node1]$ dcli -g ~/dbs_group -l opc sudo mkdir -p /mnt/dbfsopcOSユーザーとして、マウント・ポイント・ディレクトリの所有権を変更して、gridOSユーザーがアクセスできるようにします。[opc@exadb-node1]$ dcli -g ~/dbs_group -l opc sudo chown oracle:oinstall /mnt/dbfs
ターゲット・データベース内にDBFSリポジトリを作成します。リポジトリを作成するには、DBFSオブジェクトを保持するターゲットPDB内に新しい表領域を作成して、そのオブジェクトを所有するデータベース・ユーザーを作成します。
ノート:
Oracleマルチテナント・データベースを使用する場合は、プラガブル・データベース(PDB)内にDBFS表領域を作成する必要があります。GoldenGate ExtractまたはReplicatプロセスの接続先と同じPDBを使用することをお薦めします。これにより、DBFSがデータベースの依存関係に前のステップで作成したものと同じデータベース・サービスを使用できるようになります。
oracleOSユーザーとして、データベースに表領域を作成します。[opc@exadb-node1]$ sudo su - oracle [oracle@exadb-node1]$ source DB_NAME.env [oracle@exadb-node1]$ sqlplus / as sysdba SQL> alter session set container=<pdb_name>; SQL> create bigfile tablespace dbfstb1 datafile size 32g autoextend on next 8g maxsize 300g NOLOGGING EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; SQL> create user dbfs_user identified by "<dbfs_user_password>" default tablespace dbfstb1 quota unlimited on dbfstb1; SQL> grant connect, create table, create view, create procedure, dbfs_role to dbfs_user;oracleOSユーザーとして、DBFSを保持するデータベース・オブジェクトを作成します。このスクリプトには、2つの引数を指定します。dbfstb1: DBFSデータベース・オブジェクトの表領域goldengate: ファイル・システム名 - 任意の文字列を指定可能で、マウント・ポイントの下のディレクトリとして表示されます
[oracle@exadb-node1]$ sqlplus dbfs_user/"<dbfs_user_password>"@<db_name>_dbfs SQL> start $ORACLE_HOME/rdbms/admin/dbfs_create_filesystem dbfstb1 goldengate
ステップ3a.3 - (CDBのみ) TNSNAMES内のエントリの作成
oracleOSユーザーとして、データベース・ドメイン名を検索します。[opc@exadb-node1]$ sudo su - oracle [oracle@exadb-node1]$ source DB_NAME.env [oracle@exadb-node1]$ sqlplus / as sysdba SQL> show parameter db_domain NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_domain string <db_domain_name>oracleOSユーザーとして、$TNS_ADMIN/tnsnames.oraファイルに接続エントリを追加します。[oracle@exadb-node1]$ vi $TNS_ADMIN/tnsnames.ora dbfs = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY=LISTENER)) (CONNECT_DATA = (SERVICE_NAME = <pdb_service_name>.<db_domain_name> ) ) )oracleOSユーザーとして、残りのノードに$TNS_ADMIN/tnsnames.oraファイルを配布します。[oracle@exadb-node1 ~]$ /usr/local/bin/dcli -l oracle -g ~/dbs_group -f $TNS_ADMIN/tnsnames.ora -d $TNS_ADMIN/
ステップ3a.4 - mount-dbfsスクリプトの編集
- zipファイルを解凍し、
mount-dbfs.conf内の変数設定を環境に応じて編集します。ファイルのコメントは、該当する変数の値を確認するために役立ちます。
DBNAME: echo $ORACLE_UNQNAMEMOUNT_POINT: /mnt/dbfs/goldengateORACLE_HOME (RDBMS ORACLE_HOMEディレクトリ): echo $ORACLE_HOMEGRID_HOME (GRID INFRASTRUCTURE HOMEディレクトリ): echo $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)DBFS_PASSWD(WALLET=falseの場合にのみ使用します)DBFS_PWDFILE_BASE(WALET=falseの場合にのみ使用します)WALLET(trueまたはfalseにします)TNS_ADMIN(WALLET=trueまたはPDBの場合にのみ使用します): echo $TNS_ADMINDBFS_LOCAL_TNSALIAS(WALLET=trueの場合にのみ使用します)IS_PDB(PDBを使用する場合はtrueに設定します)PDB(該当する場合はPDB名):PDB namePDB_SERVICE(該当する場合はステップ2.3で作成したデータベース・サービス):PDB_SERVICE_NAMEMOUNT_OPTIONS: allow_other,direct_io,failover,nolockfailoverオプションは、すべてのファイル書込みをIMMEDIATE WAITモードでDBFSデータベースにコミットすることを強制します。これにより、データベースまたはノードの障害時にデータがdbfs_clientキャッシュに書き込まれていても、まだデータベースに書き込まれていない場合に、データの損失を防止できます。nolockマウント・オプションは、Oracle Database 18c以降のバージョンを使用する場合に必要になります。これは、ファイルが現在ロックされているときにOracle RACノードの障害が発生するとGoldenGateプロセスに問題が発生する可能性があるDBFSファイルのロックが変更されたためです。
 gridOSユーザーとして、mount-dbfs-<version>.zipを解凍して、構成ファイルmount-dbfs.confを編集します。[opc@exadb-node1]$ sudo su - grid [grid@exadb-node1]$ cd /u02/app_acfs/goldengate [grid@exadb-node1]$ unzip mount-dbfs-<version>.zip [grid@exadb-node1]$ vi mount-dbfs.confmount-dbfs.confの例:DBNAME=<DB_UNIQUE_NAME> MOUNT_POINT=/mnt/dbfs/goldengate DBFS_USER=dbfs_user GRID_HOME=$(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2) if [ -z "${GRID_HOME}" ]; then echo "GRID_HOME is unset or set to the empty string" fi ORACLE_HOME=$($GRID_HOME/bin/srvctl config database -d $DBNAME |grep 'Oracle home:' | cut -d: -f2 |sed 's/ //g') if [ -z "${ORACLE_HOME}" ]; then echo "ORACLE_HOME is unset or set to the empty string" fi LOGGER_FACILITY=user MOUNT_OPTIONS=allow_other,direct_io,failover,nolock PERL_ALARM_TIMEOUT=14 DBFS_PASSWD=<DBFS_USER_PASSWORD> DBFS_PWDFILE_BASE=/tmp/.dbfs-passwd.txt WALLET=false TNS_ADMIN=$ORACLE_HOME/network/admin/<DB_NAME> IS_PDB=true PDB=<PDB_NAME> PDB_SERVICE=<PDB_SERVICE_NAME>gridOSユーザーとして、CRSリソースが停止したときにDBFSが強制的にアンマウントされるようにmount-dbfs.shスクリプトを変更します。[grid@exadb-node1]$ vi /u02/app_acfs/goldengate/mount-dbfs.sh # Change two occurrences of: $FUSERMOUNT -u $MOUNT_POINT # To the following: $FUSERMOUNT -uz $MOUNT_POINTopcOSユーザーとして、mount-dbfs.confをデータベース・ノードの/etc/oracleディレクトリにコピー(必要に応じて名前を変更)して、適切な権限を設定します。[opc@exadb-node1]$ sudo -u grid $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/bin/olsnodes > ~/dbs_group [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l opc -d /tmp -f /u02/app_acfs/goldengate/mount-dbfs.conf [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo cp /u02/app_acfs/goldengate/mount-dbfs.conf /etc/oracle [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo chown grid:oinstall /etc/oracle/mount-dbfs.conf [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo chmod 660 /etc/oracle/mount-dbfs.confopcOSユーザーとして、mount-dbfs.shをデータベース・ノードの適切なディレクトリ($GI_HOME/crs/script)にコピー(必要に応じて名前を変更)し、適切な権限を設定します。[opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo mkdir $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo chown grid:oinstall $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l grid -d $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script -f /u02/app_acfs/goldengate/mount-dbfs.sh [opc@exadb-node1]$ /usr/local/bin/dcli -g ~/dbs_group -l grid chmod 770 $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script/mount-dbfs.sh
ステップ3a.5 - DBFSリソースのOracle Clusterwareへの登録
このリソースは、Oracle Clusterwareに登録するときにはcluster_resourceとして作成します。 
                  
cluster_resourceを使用する理由は、ファイル・システムを一度に1つのノードにのみマウントできるようにして、同時ファイル書込みの可能性が生じ、ファイル破損問題の原因になるDBFSの同時ノードのマウントを防止するためです。 
                  
gridOSユーザーとして、前のDBFSサービス依存関係についてのステップで作成したデータベース・サービスのリソース名を検索します。[opc@exadb-node1]$ sudo su - grid [grid@exadb-node1]$ crsctl stat res |grep <PDB_NAME> NAME=ora.<DB_UNIQUE_NAME>.<SERVICE_NAME>.svcoracleOSユーザーとして、次のスクリプトを実行してClusterwareリソースを登録します。[opc@exadb-node1]$ sudo su - oracle [oracle@exadb-node1]$ vi /u02/app_acfs/goldengate/add-dbfs-resource.sh ##### start script add-dbfs-resource.sh #!/bin/bash ACTION_SCRIPT=$(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script/mount-dbfs.sh RESNAME=dbfs_mount DEPNAME=ora.<DB_UNIQUE_NAME>.<SERVICE_NAME>.svc ORACLE_HOME=$(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2) PATH=$ORACLE_HOME/bin:$PATH export PATH ORACLE_HOME crsctl add resource $RESNAME \ -type cluster_resource \ -attr "ACTION_SCRIPT=$ACTION_SCRIPT, \ CHECK_INTERVAL=30,RESTART_ATTEMPTS=10, \ START_DEPENDENCIES='hard($DEPNAME)pullup($DEPNAME)',\ STOP_DEPENDENCIES='hard($DEPNAME)',\ SCRIPT_TIMEOUT=300" ##### end script add-dbfs-resource.sh [oracle@exadb-node1]$ sh /u02/app_acfs/goldengate/add-dbfs-resource.sh
ノート:
 $RESNAMEリソースの作成後、$RESNAMEリソースがONLINEのときに$DBNAMEデータベースを停止するには、srvctlの使用時にforceフラグを指定します。 
                     
例: srvctl stop database -d fsdb -f
ステップ3a.6 - DBFSリソースの起動
grid OSユーザーとして、リソースを起動します。
                  
 [opc@exadb-node1]$ sudo su - grid
[grid@exadb-node1]$ crsctl start res dbfs_mount -n `hostname`
CRS-2672: Attempting to start 'dbfs_mount' on 'exadb-node1'
CRS-2676: Start of 'dbfs_mount' on 'exadb-node1' succeeded
[grid@exadb-node1]$ crsctl stat res dbfs_mount -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details      
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
dbfs_mount
      1        ONLINE  ONLINE       exadb-node1              STABLE
--------------------------------------------------------------------------------  ノート:
共有ファイル・システムは、マウントされたままにします。これは、今後のステップでOracle GoldenGateデプロイメントを作成するために必要です。
Oracle ACFSは、Oracle RAC構成の共有Oracle GoldenGateファイルのためのDBFSの代替です。Oracleのデプロイメント・ファイルを格納するための単一のACFSファイル・システムを作成します。
最大12時間の証跡ファイルの格納を可能にするために、十分な証跡ファイルのディスク領域を割り当てることをお薦めします。そうすることで、新しい証跡ファイルを受信できないターゲット環境で問題が発生した場合に、証跡ファイルの生成に十分な領域を確保します。12時間に必要な領域の量は、実際の本番データで証跡ファイルの生成率をテストすることでのみ決定できます。
次のサブステップを実行して、このステップを完了します。
- ステップ3b.1 - ASMファイル・システムの作成
 - ステップ3b.2 - ファイル・システムの作成
 - ステップ3b.3 - Cluster Ready Services (CRS)リソースの作成
 - ステップ3b.4 - 現在構成されているACFSファイル・システムの検証
 - ステップ3b.5 - ACFSリソースの起動とステータスの確認
 - ステップ3b.6- GoldenGate ACFSディレクトリの作成
 
ステップ3b.1 - ASMファイル・システムの作成
grid OSユーザーとして、asmcmdを使用してボリュームを作成します。
                  
[opc@exadb-node1 ~]$ sudo su - grid
[grid@exadb-node1 ~]$ asmcmd volcreate -G DATAC1 -s 1200G ACFS_GGノート:
決定したサイズ要件に応じて、ファイル・システムのサイズを変更します。ステップ3b.2 - ファイル・システムの作成
gridOSユーザーとして、asmcmdを使用して"ボリューム・デバイス"を確認します。[grid@exadb-node1 ~]$ asmcmd volinfo -G DATAC1 ACFS_GG次に、ACFSボリューム・デバイスの出力例を示します。
Diskgroup Name: DATAC1 Volume Name: ACFS_GG Volume Device: /dev/asm/acfs_gg-151 State: ENABLED Size (MB): 1228800 Resize Unit (MB): 64 Redundancy: MIRROR Stripe Columns: 8 Stripe Width (K): 1024 Usage: Mountpath:gridOSユーザーとして、次のmkfsコマンドを使用して、ファイル・システムを作成します。[grid@exadb-node1 ~]$ /sbin/mkfs -t acfs /dev/asm/acfs_gg-151
opcOSユーザーとして、ACFSマウント・ポイントを作成します。[opc@exadb-node1 ~]$ dcli -l opc -g ~/dbs_group sudo mkdir -p /mnt/acfs_gg [opc@exadb-node1 ~]$ dcli -l opc -g ~/dbs_group sudo chown oracle:oinstall /mnt/acfs_ggrootユーザーとして、ファイル・システム・リソースを作成します。ACFSの分散ファイル・ロックの実装により、DBFSとは異なり、一度に複数のOracle RACノードにACFSをマウントできます。
rootOSユーザーとして、新しいACFSファイル・システムのためのACFSリソースを作成します。[opc@exadb-node1 ~]$ sudo su - [root@exadb-node1 ~]# $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/bin/srvctl add filesystem -device /dev/asm/acfs_gg-151 -volume ACFS_GG -diskgroup DATAC1 -path /mnt/acfs_gg -user oracle
ステップ3b.4 - 現在構成されているACFSファイル・システムの検証
grid OSユーザーとして、次のコマンドを使用して、ファイル・システムの詳細を表示します。
                  
[opc@exadb-node1 ~]$ sudo su - grid
[grid@exadb-node1 ~]$ srvctl config filesystem -volume ACFS_GG -diskgroup DATAC1
Volume device: /dev/asm/acfs_gg-151
Diskgroup name: datac1
Volume name: acfs_gg
Canonical volume device: /dev/asm/acfs_gg-151
Accelerator volume devices:
Mountpoint path: /mnt/acfs_gg
Mount point owner: oracle
Mount point group: oinstall
Mount permissions: owner:oracle:rwx,pgrp:oinstall:r-x,other::r-x
Mount users: grid
Type: ACFS
Mount options:
Description:
ACFS file system is enabled
ACFS file system is individually enabled on nodes:
ACFS file system is individually disabled on nodes:ステップ3b.5 - ACFSリソースの起動とステータスの確認
grid OSユーザーとして、次のコマンドを使用して、ファイル・システムを起動および確認します。
                  
[grid@exadb-node1 ~]$ srvctl start filesystem -volume ACFS_GG
 -diskgroup DATAC1 -node `hostname`
[grid@exadb-node1 ~]$ srvctl status filesystem -volume ACFS_GG -diskgroup DATAC1ACFSファイル・システム/mnt/acfs_ggは、ノードexadb-node1にマウントされます
作成したCRSリソースには、ora.diskgroup_name.volume_name.acfsという形式を使用した名前が付けられます。前述のファイル・システムの例を使用すると、CRSリソースの名前はora.datac1.acfs_gg.acfsになります。
                  
現在存在しているすべてのACFSファイル・システムのCRSリソースを表示するには、次のコマンドを使用します。
[grid@exadb-node1 ~]$ crsctl stat res -w "((TYPE = ora.acfs.type) OR (TYPE = ora.acfs_cluster.type))"
NAME=ora.datac1.acfs_gg.acfs
TYPE=ora.acfs.type
TARGET=ONLINE                   , OFFLINE
STATE=ONLINE on exadb-node1, OFFLINE
NAME=ora.datac1.acfsvol01.acfs
TYPE=ora.acfs.type
TARGET=ONLINE                   , ONLINE
STATE=ONLINE on exadb-node1, ONLINE on exadb-node2ステップ3b.6- GoldenGate ACFSディレクトリの作成
grid OSユーザーとして、Oracle GoldenGateデプロイメントを格納するディレクトリを作成します。
                
                  
[opc@exadb-node1 ~]$ sudo su - oracle
[oracle@exadb-node1 ~]$ mkdir -p /mnt/acfs_gg/deploymentsACFSの詳細は、『Oracle Automatic Storage Management Cluster File System管理者ガイド』を参照してください。
ノート:
共有ファイル・システムは、マウントされたままにします。これは、今後のステップでOracle GoldenGateデプロイメントを作成するために必要です。