タスク3 - Oracle Database File Systemの構成

Oracle Data GuardでOracle GoldenGateを構成する場合、お薦めするソリューションはDatabaseファイル・システム(DBFS)のみです。

データベース内のDBFSユーザー、表領域およびファイル・システムは、「Cloud: Oracle Exadata Database ServiceでのOracle GoldenGate Microservices Architectureの構成のベスト・プラクティス」で説明されているように、事前にプライマリ・データベースに作成されています。

このタスクを完了するには、次のステップを実行します。

  • ステップ3.1 - Oracle Exadata Database ServiceのDBFSの構成
  • ステップ3.2 - (PDBのみ) TNSNAMESでのエントリの作成
  • ステップ3.3 - プライマリ・システムからのmount-dbfsスクリプトのコピーと編集
  • ステップ3.4 - DBFSリソースのOracle Clusterwareへの登録

ステップ3.1 - Oracle Exadata Database ServiceのDBFSの構成

  1. スタンバイ・システムのopc OSユーザーとして、fuseグループにgridユーザーを追加します。
    [opc@exastb-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
  2. スタンバイ・システムのopc OSユーザーとして、ファイル/etc/fuse.confが存在していることと、user_allow_otherオプションが含まれていることを確認します。
    [opc@exastb-node1 ~]$ cat /etc/fuse.conf
    # mount_max = 1000
    user_allow_other
  3. スタンバイ・システムのopc OSユーザーとして、このステップをスキップします(オプションuser_allow_otherがすでに/etc/fuse.confファイルにある場合)。それ以外の場合は、次に示すコマンドを実行して、オプションを追加します。
    [opc@exastb-node1 ~]$ dcli -g ~/dbs_group -l opc “echo user_allow_other |
     sudo tee -a /etc/fuse.conf”
  4. スタンバイ・システムのopc OSユーザーとして、DBFSファイルシステムのマウント・ポイントとして使用する空のディレクトリを作成します。

    ノート:

    マウント・ポイントがプライマリ・システムのマウント・ポイントと同じであることが重要です。これは、Oracle GoldenGateデプロイメントの物理的な場所がデプロイメント構成ファイルに含まれているためです。
    [opc@exastb-node1 ~]$ dcli -g ~/dbs_group -l opc sudo mkdir -p /mnt/dbfs
  5. スタンバイ・システムのopc OSユーザーとして、マウント・ポイント・ディレクトリの所有権を変更して、grid OSユーザーがアクセスできるようにします。
    [opc@exastb-node1 ~]$ dcli -g ~/dbs_group -l opc
     sudo chown oracle:oinstall /mnt/dbfs

ステップ3.2 - (PDBのみ) TNSNAMESでのエントリの作成

  1. スタンバイ・システムのoracle OSユーザーとして、$TNS_ADMIN/tnsnames.oraファイルに接続エントリを追加します。ステップ2.3で作成したPDBサービス名を使用します。
    [oracle@exadb-node1 ~]$ vi $TNS_ADMIN/tnsnames.ora
    dbfs =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY=LISTENER))
          (CONNECT_DATA =
            (SERVICE_NAME = <PDB_SERVICE_NAME> )
           )
        )
  2. 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/

ステップ3.3 - プライマリ・システムからのmount-dbfsスクリプトのコピーと編集

  1. プライマリ・システムのroot OSユーザーとして、mount-dbfs.confファイルとmount-dbfs.shファイルを含むzipファイルを作成します。
    [opc@exapri-node1 ~]$ sudo su -
    [root@exapri-node1 ~]# zip -j /tmp/mount-dbfs.zip
     $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script/mount-dbfs.sh
     /etc/oracle/mount-dbfs.conf
      adding: mount-dbfs.sh (deflated 67%)
      adding: mount-dbfs.conf (deflated 58%)
  2. スタンバイ・システムのopc OSユーザーとして、プライマリ・システムからスタンバイ・システムにmount-dbfs.zipファイルをコピーします。
    [opc@exastb-node1 ~]$ scp exapri-node1.oracle.com:/tmp/mount-dbfs.zip /tmp
  3. スタンバイ・システムのopc OSユーザーとして、mount-dbfs.zipファイルを解凍し、構成ファイルmount-dbfs.confを編集します。
    [opc@exastb-node1 ~]$ unzip /tmp/mount-dbfs.zip -d /tmp
    Archive:  /tmp/mount-dbfs.zip
      inflating: /tmp/mount-dbfs.sh     
      inflating: /tmp/mount-dbfs.conf 
    [opc@exastb-node1 ~]$ vi /tmp/mount-dbfs.conf

    これらをプライマリ・システムと同じディレクトリに配置することをお薦めします。スタンバイ・データベースと一致するように、mount-dbfs.confファイルの次のパラメータを変更する必要があります。

    • DBNAME
    • TNS_ADMIN
    • PDB_SERVICE
  4. スタンバイ・システムのopc OSユーザーとして、mount-dbfs.confをデータベース・ノードの/etc/oracleディレクトリにコピーして、適切な権限を設定します。
    [opc@exastb-node1 ~]$ /usr/local/bin/dcli -g ~/dbs_group -l opc -d /tmp
     -f /tmp/mount-dbfs.conf
    [opc@exastb-node1 ~]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo
     cp /tmp/mount-dbfs.conf /etc/oracle
    [opc@exastb-node1 ~]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo
     chown oracle:oinstall /etc/oracle/mount-dbfs.conf
    [opc@exastb-node1 ~]$ /usr/local/bin/dcli -g ~/dbs_group -l opc sudo
     chmod 660 /etc/oracle/mount-dbfs.conf
  5. スタンバイ・システムのopc OSユーザーとして、mount-dbfs.shをデータベース・ノードの$GI_HOME/crs/scriptディレクトリにコピーして、適切な権限を設定します。
    [opc@exastb-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@exastb-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@exastb-node1 ~]$ /usr/local/bin/dcli -g ~/dbs_group -l grid
     -d $(grep ^crs_home /etc/oracle/olr.loc | cut -d= -f2)/crs/script
     -f /tmp/mount-dbfs.sh
    [opc@exastb-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

ステップ3.3 - DBFSリソースのOracle Clusterwareへの登録

このリソースをOracle Clusterwareに登録するときには、必ずcluster_resourceとして作成します。cluster_resourceを使用する理由は、ファイル・システムを一度に1つのノードにのみマウントするようにして、同時ファイル書込みの可能性が生じ、ファイル破損問題の原因になるDBFSの同時ノードのマウントを防止するためです。

Oracle Multitenantを使用する場合は、プライマリ・データベースで作成されたDBFSリポジトリを含む、同じPDBのサービス名を使用してください。

  1. スタンバイ・システムのgrid OSユーザーとして、前のDBFSサービス依存関係についてのステップで作成したデータベース・サービスのリソース名を検索します。
    [opc@exastb-node1 ~]$ sudo su - grid
    [grid@exastb-node1 ~]$ crsctl stat res |grep <PDB_NAME>
    NAME=ora.<DB_UNIQUE_NAME>.<PDB_SERVICE_NAME>.svc
  2. スタンバイ・システムのoracle OSユーザーとして、次のスクリプトを実行してClusterwareリソースを登録します。
    [opc@exadb-node1 ~]$ sudo su - oracle
    [oracle@exadb-node1 ~]$ vi 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>.<PDB_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 add-dbfs-resource.sh

ノート:

$RESNAMEリソースの作成後、$RESNAMEリソースがONLINEのときに$DBNAMEデータベースを停止するために、srvctlの使用時にforceフラグを指定する必要があります。

例: srvctl stop database -d $ORACLE_UNQNAME -f