タスク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リソースの起動
opc
OSユーザーとして、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 grid
opc
OSユーザーとして、ファイル/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
ファイル内にある場合はスキップします。それ以外の場合は、
opc
OSユーザーとして次のコマンドを実行してオプションを追加します。[opc@exadb-node1]$ dcli -g ~/dbs_group -l opc "echo user_allow_other | sudo tee -a /etc/fuse.conf"
opc
OSユーザーとして、DBFSファイル・システムのマウント・ポイントとして使用する空のディレクトリを作成します。[opc@exadb-node1]$ dcli -g ~/dbs_group -l opc sudo mkdir -p /mnt/dbfs
opc
OSユーザーとして、マウント・ポイント・ディレクトリの所有権を変更して、grid
OSユーザーがアクセスできるようにします。[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がデータベースの依存関係に前のステップで作成したものと同じデータベース・サービスを使用できるようになります。
oracle
OSユーザーとして、データベースに表領域を作成します。[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;
oracle
OSユーザーとして、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内のエントリの作成
oracle
OSユーザーとして、データベース・ドメイン名を検索します。[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>
oracle
OSユーザーとして、$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> ) ) )
oracle
OSユーザーとして、残りのノードに$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_UNQNAME
MOUNT_POINT: /mnt/dbfs/goldengate
ORACLE_HOME (RDBMS ORACLE_HOMEディレクトリ): echo $ORACLE_HOME
GRID_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_ADMIN
DBFS_LOCAL_TNSALIAS
(WALLET=true
の場合にのみ使用します)IS_PDB
(PDBを使用する場合はtrue
に設定します)PDB
(該当する場合はPDB名):PDB name
PDB_SERVICE
(該当する場合はステップ2.3で作成したデータベース・サービス):PDB_SERVICE_NAME
MOUNT_OPTIONS: allow_other,direct_io,failover,nolock
failover
オプションは、すべてのファイル書込みをIMMEDIATE WAIT
モードでDBFSデータベースにコミットすることを強制します。これにより、データベースまたはノードの障害時にデータがdbfs_client
キャッシュに書き込まれていても、まだデータベースに書き込まれていない場合に、データの損失を防止できます。nolock
マウント・オプションは、Oracle Database 18c以降のバージョンを使用する場合に必要になります。これは、ファイルが現在ロックされているときにOracle RACノードの障害が発生するとGoldenGateプロセスに問題が発生する可能性があるDBFSファイルのロックが変更されたためです。
grid
OSユーザーとして、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.conf
mount-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>
grid
OSユーザーとして、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_POINT
opc
OSユーザーとして、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.conf
opc
OSユーザーとして、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の同時ノードのマウントを防止するためです。
grid
OSユーザーとして、前のDBFSサービス依存関係についてのステップで作成したデータベース・サービスのリソース名を検索します。[opc@exadb-node1]$ sudo su - grid [grid@exadb-node1]$ crsctl stat res |grep <PDB_NAME> NAME=ora.<DB_UNIQUE_NAME>.<SERVICE_NAME>.svc
oracle
OSユーザーとして、次のスクリプトを実行して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 - ファイル・システムの作成
grid
OSユーザーとして、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:
grid
OSユーザーとして、次のmkfs
コマンドを使用して、ファイル・システムを作成します。[grid@exadb-node1 ~]$ /sbin/mkfs -t acfs /dev/asm/acfs_gg-151
opc
OSユーザーとして、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_gg
root
ユーザーとして、ファイル・システム・リソースを作成します。ACFSの分散ファイル・ロックの実装により、DBFSとは異なり、一度に複数のOracle RACノードにACFSをマウントできます。
root
OSユーザーとして、新しい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 DATAC1
ACFSファイル・システム/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/deployments
ACFSの詳細は、『Oracle Automatic Storage Management Cluster File System管理者ガイド』を参照してください。
ノート:
共有ファイル・システムは、マウントされたままにします。これは、今後のステップでOracle GoldenGateデプロイメントを作成するために必要です。