[Oracle Cloud] Docker で 2 Node RAC-1 Node RAC のDataGuard 環境を構築する

#1.はじめに
OCI (Oracle Cloud Infrastracture) 上に DataGuard を構築する機会がありましたが、この通りやればできるといった手順が見当たらなかっため、手順確認も兼ねて記事にしてみました。
実際の構築では説明を省いているパラメータなど考慮要素は多々あると思いますので、参考程度に活用いただければと思います。
細かい部分は考えずに一度 DataGuard を構築してみたい。手っ取り早く DataGuard 環境が欲しい。といった用途には有用かとも思います。

※スタンバイ側を1 Node RACの想定で記載していましたが、シングル環境（ClusterWareは利用）の要望もあったため、追記修正しました。

##1-1.前提
今回は以下の記事を参考に、プライマリ側となる 2 Node RAC を構築した状態からスタンバイ側を作成する手順を記載します。
[[Oracle Cloud] OCI Compute 上に Docker で Oracle Database 19c の 4 Node RAC 環境を構築する](https://qiita.com/hshida/items/40fdf5952ece39faec11)

そのため、プライマリ側をまだ構築されていない方は、上記記事を参考にプライマリ環境を準備した上で本記事を読んでいただければと思います。
上記記事では 4 Node RAC の構築手順となっていますが、ノード数は任意で変更できるため、2 Node RAC で構築した環境を元に本記事を記載します。

##1-2.環境
- Oracle Cloud Infrastructure Compute
- Oracle Linux 7.9
- Oracle Database 19c (19.3)
- Oracle Database 19c Grid Infrastructure（19.3）
- Docker

#2.スタンバイノードの作成
プライマリノードは存在し、スタンバイノードが存在しない状態なので、まずはスタンバイノードを作成します。

##2-1.ASM 領域とする共有 DISK の作成
スタンバイは 1 Node ですが RAC で構築するため ASM 領域を使用します。
ここではスタンバイ用の ASM 領域を割り当てる共有 DISK を作成します。
手順はプライマリ構築の 6-5. と同一です。

OCI のインスタンス画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/b7d32974-2be8-52af-0246-32813a501937.png)

左下のリソースからブート・ボリュームを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/c40cb85f-46f9-4546-8b70-c5402802f910.png)

対象のブートボリュームを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/f24d0dc7-3ac1-b952-17a1-2c0e8bc7e7f7.png)

[編集]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/49e1f461-55c5-1e4c-3b4d-e13828fa2ff6.png)

今回、元のサイズが 600GB であったため、ASM 分の 100GB を足した 700GB としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/c1da31f4-6228-1363-5765-8e819a08caa9.png)

再スキャンコマンドが表示されるため、メモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/0ddcc357-9001-a36a-f952-a4565e698ac0.png)

アイコンが緑色になり、サイズの値も 700GB に変更されているため、OCI 上での作業は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2514221/a0c3699a-981c-b8e1-09e2-109c927674a2.png)

コンソール上でサイズを確認します。この状態では拡張前の状態が表示されます。

    [opc@atest-dkr19cdg-1 ~]$ lsblk
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   600G  0 disk              ★600GBのまま
    tqsda4   8:4    0   100G  0 part
    tqsda2   8:2    0     8G  0 part [SWAP]
    tqsda3   8:3    0 491.8G  0 part /
    mqsda1   8:1    0   200M  0 part /boot/efi

先ほどメモしておいた再スキャンコマンドを実行します。

    [opc@atest-dkr19cdg-1 ~]$ sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
    1+0 records in
    1+0 records out
    512 bytes (512 B) copied, 0.000581882 s, 880 kB/s
    [opc@atest-dkr19cdg-1 ~]$ echo "1" | sudo tee /sys/class/block/`readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2`/device/rescan
    1

改めてサイズを確認します。

    [opc@atest-dkr19cdg-1 ~]$ lsblk
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   700G  0 disk              ★700GBに拡張された
    tqsda4   8:4    0   100G  0 part
    tqsda2   8:2    0     8G  0 part [SWAP]
    tqsda3   8:3    0 491.8G  0 part /
    mqsda1   8:1    0   200M  0 part /boot/efi

パーティションを追加します。
途中で Error が出ますが、Fix して進めます。
パーティションは今割当たっている最後の位置から 100% を割り当てます。

    [opc@atest-dkr19cdg-1 ~]$ sudo -s
    [root@atest-dkr19cdg-1 opc]# parted /dev/sda
    GNU Parted 3.1
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print
    Error: The backup GPT table is not at the end of the disk, as it should be.
    This might mean that another operating system believes the disk is smaller.
    Fix, by moving the backup to the end (and removing the old backup)?
    Fix/Ignore/Cancel? Fix
    Warning: Not all of the space available to /dev/sda appears to be used, you can
    fix the GPT to use all of the space (an extra 209715200 blocks) or continue with
    the current setting?
    Fix/Ignore? Fix
    Model: ORACLE BlockVolume (scsi)
    Disk /dev/sda: 752GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:

    Number  Start   End     Size    File system     Name                  Flags
     1      1049kB  211MB   210MB   fat16           EFI System Partition  boot
     2      211MB   8801MB  8590MB  linux-swap(v1)
     3      8801MB  537GB   528GB   xfs
     4      537GB   644GB   107GB                   gpt

    (parted) mkpart gpt 644GB 100%              ★最後のEndの位置(644GB)から100%を割当
    (parted) print
    Model: ORACLE BlockVolume (scsi)
    Disk /dev/sda: 752GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags:

    Number  Start   End     Size    File system     Name                  Flags
     1      1049kB  211MB   210MB   fat16           EFI System Partition  boot
     2      211MB   8801MB  8590MB  linux-swap(v1)
     3      8801MB  537GB   528GB   xfs
     4      537GB   644GB   107GB                   gpt
     5      644GB   752GB   107GB                   gpt              ★割り当てられたパーティション

    (parted) q
    Information: You may need to update /etc/fstab.

パーティションの割り当てを確認します。

    [root@atest-dkr19cdg-1 opc]# lsblk
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   700G  0 disk
    tqsda4   8:4    0   100G  0 part
    tqsda2   8:2    0     8G  0 part [SWAP]
    tqsda5   8:5    0   100G  0 part              ★tqsda5が作られ、100Gが割り当てられた
    tqsda3   8:3    0 491.8G  0 part /
    mqsda1   8:1    0   200M  0 part /boot/efi

追加したパーティションを初期化します。
ここでは 100GB 中の最初の 819MB だけ初期化しています。
追加したパーティションに ASM を構築するにあたり最初の数MB 初期化できていれば問題ないため、初期化の時間短縮の意味も込めて数MB だけの初期化を推奨します。

    [root@atest-dkr19cdg-1 opc]# dd if=/dev/zero of=/dev/sda5  bs=8k count=100000
    100000+0 records in
    100000+0 records out
    819200000 bytes (819 MB) copied, 1.99381 s, 411 MB/s

##2-2.Standby の Docker コンテナ作成
まずはプライマリの Docker で使用されている IP を確認します。

    [opc@atest-dkr19cdg-1 ~]$ rac1
    [oracle@racnode1 ~]$ more /etc/hosts
    127.0.0.1       localhost.localdomain   localhost
    172.16.1.150    racnode1.example.com    racnode1
    192.168.17.150  racnode1-priv.example.com       racnode1-priv
    172.16.1.160    racnode1-vip.example.com        racnode1-vip
    172.16.1.70     racnode-scan.example.com        racnode-scan
    172.16.1.15     racnode-cman1.example.com       racnode-cman1
    172.16.1.151    racnode2.example.com    racnode2
    192.168.17.151  racnode2-priv.example.com       racnode2-priv
    172.16.1.161    racnode2-vip.example.com        racnode2-vip
    [oracle@racnode1 ~]$ exit
    exit
    [opc@atest-dkr19cdg-1 ~]$ rac2
    [oracle@racnode2 ~]$ more /etc/hosts
    127.0.0.1       localhost.localdomain   localhost
    172.16.1.150    racnode1.example.com    racnode1
    192.168.17.150  racnode1-priv.example.com       racnode1-priv
    172.16.1.160    racnode1-vip.example.com        racnode1-vip
    172.16.1.70     racnode-scan.example.com        racnode-scan
    172.16.1.15     racnode-cman1.example.com       racnode-cman1
    172.16.1.151    racnode2.example.com    racnode2
    192.168.17.151  racnode2-priv.example.com       racnode2-priv
    172.16.1.161    racnode2-vip.example.com        racnode2-vip
    [oracle@racnode2 ~]$ exit
    exit

IP が重複しないように docker create で指定します。
ノード名等の名称は st を付与し、スタンバイノードであることが分かるようにしました。
以下★印の箇所が編集箇所です。

    --Docker作成コマンド
    sudo docker create -t -i \
     --hostname racnodest1 \        ★
     --volume /boot:/boot:ro \
     --volume /dev/shm \
     --tmpfs /dev/shm:rw,exec,size=4G \
     --volume /opt/containers/rac_host_file:/etc/hosts  \
     --volume /opt/.secrets:/run/secrets \
     --device=/dev/sda5:/dev/asm_diskst1  \        ★
     --privileged=false  \
     --cap-add=SYS_NICE \
     --cap-add=SYS_RESOURCE \
     --cap-add=NET_ADMIN \
     -e NODE_VIP=172.16.1.162 \        ★
     -e VIP_HOSTNAME=racnodest1-vip  \        ★
     -e PRIV_IP=192.168.17.152 \        ★
     -e PRIV_HOSTNAME=racnodest1-priv \        ★
     -e PUBLIC_IP=172.16.1.152 \        ★
     -e PUBLIC_HOSTNAME=racnodest1  \        ★
     -e SCAN_NAME=racnodest1-scan \        ★
     -e SCAN_IP=172.16.1.71  \        ★
     -e OP_TYPE=INSTALL \
     -e DOMAIN=example.com \
     -e ASM_DEVICE_LIST=/dev/asm_diskst1 \        ★
     -e ORACLE_SID=ORCLST \        ★
     -e ASM_DISCOVERY_DIR=/dev \
     -e CMAN_HOSTNAME=racnodest1-cman1 \        ★
     -e CMAN_IP=172.16.1.16 \        ★
     -e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
     -e PWD_KEY=pwd.key \
     --restart=always --tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
     --cpu-rt-runtime=95000 --ulimit rtprio=99  \
     --name racnodest1 \        ★
     oracle/database-rac:19.3.0

実行したログは以下です。

    [opc@atest-dkr19cdg-1 ~]$ sudo docker create -t -i \
    > --hostname racnodest1 \
    > --volume /boot:/boot:ro \
    > --volume /dev/shm \
    > --tmpfs /dev/shm:rw,exec,size=4G \
    > --volume /opt/containers/rac_host_file:/etc/hosts  \
    > --volume /opt/.secrets:/run/secrets \
    > --device=/dev/sda5:/dev/asm_diskst1  \
    > --privileged=false  \
    > --cap-add=SYS_NICE \
    > --cap-add=SYS_RESOURCE \
    > --cap-add=NET_ADMIN \
    > -e NODE_VIP=172.16.1.162 \
    > -e VIP_HOSTNAME=racnodest1-vip  \
    > -e PRIV_IP=192.168.17.152 \
    > -e PRIV_HOSTNAME=racnodest1-priv \
    > -e PUBLIC_IP=172.16.1.152 \
    > -e PUBLIC_HOSTNAME=racnodest1  \
    > -e SCAN_NAME=racnodest1-scan \
    > -e SCAN_IP=172.16.1.71  \
    > -e OP_TYPE=INSTALL \
    > -e DOMAIN=example.com \
    > -e ASM_DEVICE_LIST=/dev/asm_diskst1 \
    > -e ORACLE_SID=ORCLST \
    > -e ASM_DISCOVERY_DIR=/dev \
    > -e CMAN_HOSTNAME=racnodest1-cman1 \
    > -e CMAN_IP=172.16.1.16 \
    > -e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
    > -e PWD_KEY=pwd.key \
    > --restart=always --tmpfs=/run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
    > --cpu-rt-runtime=95000 --ulimit rtprio=99  \
    > --name racnodest1 \
    > oracle/database-rac:19.3.0
    d24f585778d932cb82d45a0b32004e868dd9b2ee8519a356fe020a1485ab015f

コンテナにネットワークを割り当てます。
最初に実施している disconnect コマンドは同一のネットワークがもしあった場合に念のため切断するものです。
connect コマンドで指定している rac_pub1_nw、rac_priv1_nw は
[[Oracle Cloud] OCI Compute 上に Docker で Oracle Database 19c の 4 Node RAC 環境を構築する](https://qiita.com/hshida/items/40fdf5952ece39faec11)
の 6-2. で割り当てたサブネットを利用する設定です。
割り当てた IP がサブネットの範囲内にあることをご確認ください。

    [opc@atest-dkr19cdg-1 ~]$ sudo docker network disconnect bridge racnodest1
    [opc@atest-dkr19cdg-1 ~]$ sudo docker network connect rac_pub1_nw --ip 172.16.1.152 racnodest1
    [opc@atest-dkr19cdg-1 ~]$ sudo docker network connect rac_priv1_nw --ip 192.168.17.152  racnodest1

RAC コンテナを起動します。

    [opc@atest-dkr19cdg-1 ~]$ sudo docker start racnodest1
    racnodest1

起動コマンド自体はすぐ結果が返りますが、内部で GI/DB のインストールや DB 作成、RAC の構成が行われています。
以下のコマンドでログを確認し、エラーがないことと構築の完了を確認します。
構築完了までおよそ40分～1時間程度かかります。

    [opc@atest-dkr19cdg-1 ~]$ sudo docker logs -f racnodest1

以下のメッセージが表示されれば、構築は完了です。

    01-25-2022 03:25:23 UTC :  : ####################################
    01-25-2022 03:25:23 UTC :  : ORACLE RAC DATABASE IS READY TO USE!
    01-25-2022 03:25:23 UTC :  : ####################################

コンテナに接続して確認します。

    [opc@atest-dkr19cdg-1 ~]$ sudo docker exec -i -t racnodest1 /bin/bash
    [grid@racnodest1 ~]$ crsctl stat res -t
    --------------------------------------------------------------------------------
    Name           Target  State        Server                   State details
    --------------------------------------------------------------------------------
    Local Resources
    --------------------------------------------------------------------------------
    ora.LISTENER.lsnr
                   ONLINE  ONLINE       racnodest1               STABLE
    ora.chad
                   ONLINE  ONLINE       racnodest1               STABLE
    ora.net1.network
                   ONLINE  ONLINE       racnodest1               STABLE
    ora.ons
                   ONLINE  ONLINE       racnodest1               STABLE
    --------------------------------------------------------------------------------
    Cluster Resources
    --------------------------------------------------------------------------------
    ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.DATA.dg(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.LISTENER_SCAN1.lsnr
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.asm(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               Started,STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.asmnet1.asmnetwork(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.cvu
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.orclst.db
          1        ONLINE  ONLINE       racnodest1               Open,HOME=/u01/app/o
                                                                 racle/product/19.3.0
                                                                 /dbhome_1,STABLE
    ora.qosmserver
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.racnodest1.vip
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.scan1.vip
          1        ONLINE  ONLINE       racnodest1               STABLE
    --------------------------------------------------------------------------------
    [grid@racnodest1 ~]$

正常に構築されていることが確認できました。
Docker コンテナ作成と同時に Database も作成されていますが、こちらは次の手順で削除します。

##2-3.Standby データベース削除
DataGuard のスタンバイDB はプライマリから duplicate で作成するため、Docker 作成と共に作成された Database は削除することになります。
一旦接続確認してみます。

    [grid@racnodest1 ~]$ sudo su - oracle
    Last login: Tue Jan 25 03:25:21 UTC 2022
    [oracle@racnodest1 ~]$ export ORACLE_HOME=`echo ${DB_HOME}`
    [oracle@racnodest1 ~]$ export ORACLE_SID=ORCLST1
    [oracle@racnodest1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 03:39:14 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> show pdbs

        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 ORCLPDB                        READ WRITE NO
    SQL> exit
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

Standby データベースを削除します。

    [oracle@racnodest1 ~]$ dbca -silent -deleteDatabase \
    > -sourceDB ORCLST \
    > -sysDBAUserNAME SYS \
    > -sysDBAPassword oracle
    [WARNING] [DBT-19202] The Database Configuration Assistant will delete the Oracle instances and datafiles for your database. All information in the database will be destroyed.
    Prepare for db operation
    32% complete
    Connecting to database
    39% complete
    42% complete
    45% complete
    48% complete
    52% complete
    55% complete
    58% complete
    65% complete
    Updating network configuration files
    68% complete
    Deleting instances and datafiles
    77% complete
    87% complete
    97% complete
    100% complete
    Database deletion completed.
    Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/ORCLST/ORCLST0.log" for further details.

関連するファイルも削除します。

    [oracle@racnodest1 ~]$ ll /u01/app/oracle/product/19.3.0/dbhome_1/dbs/*
    -rw-rw----. 1 oracle asmadmin    1544 Jan 25 03:46 /u01/app/oracle/product/19.3.0/dbhome_1/dbs/hc_ORCLST1.dat
    -rw-r-----. 1 oracle asmadmin 2097152 Jan 25 03:45 /u01/app/oracle/product/19.3.0/dbhome_1/dbs/id_ORCLST1.dat
    -rw-r--r--. 1 oracle oinstall    3079 May 14  2015 /u01/app/oracle/product/19.3.0/dbhome_1/dbs/init.ora
    [oracle@racnodest1 ~]$ ll /u01/app/oracle/diag/rdbms/*
    total 4
    drwxr-x---. 16 oracle asmadmin 4096 Jan 25 03:46 ORCLST1
    -rw-r-----.  1 oracle asmadmin    0 Jan 25 03:07 i_1.mif
    [oracle@racnodest1 ~]$ rm /u01/app/oracle/product/19.3.0/dbhome_1/dbs/*
    [oracle@racnodest1 ~]$ rm -rf /u01/app/oracle/diag/rdbms/*
    [oracle@racnodest1 ~]$ ll /u01/app/oracle/product/19.3.0/dbhome_1/dbs/*
    ls: cannot access /u01/app/oracle/product/19.3.0/dbhome_1/dbs/*: No such file or directory
    [oracle@racnodest1 ~]$ ll /u01/app/oracle/diag/rdbms/*
    ls: cannot access /u01/app/oracle/diag/rdbms/*: No such file or directory

ASM 上の Database ファイルが削除されていることを確認します。

    [oracle@racnodest1 ~]$ exit
    logout
    [grid@racnodest1 ~]$ asmcmd -p
    ASMCMD [+] > cd data
    ASMCMD [+data] > ls
    ASM/
    orapwasm
    orapwasm_backup
    racnodest1-c/
    ASMCMD [+data] > exit

##2-4.Alias の作成
最後に接続元サーバーの opc ユーザーに racnodest1 に接続する Alias を設定します。

    [grid@racnodest1 ~]$ exit
    exit
    [opc@atest-dkr19cdg-1 ~]$ vi .bashrc
    # .bashrc

    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi

    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=

    # User specific aliases and functions
    alias rac1='sudo docker exec -u oracle --workdir /home/oracle -it racnode1 bash'
    alias rac2='sudo docker exec -u oracle --workdir /home/oracle -it racnode2 bash'
    alias racst1='sudo docker exec -u oracle --workdir /home/oracle -it racnodest1 bash'        ★追加

.bashrc は接続時に読み込まれるため、次回からはログインした際に読み込まれますが、今回は再ログインしないため明示的に読み込ませます。

    [opc@atest-dkr19cdg-1 ~]$ . .bashrc

以上で Docker を用いたスタンバイノードの準備は完了です。

#3.DataGuard 構築 - プライマリデータベース準備
DataGuard を構築するためのプライマリ DB、スタンバイノードの準備が整ったので、DataGuard を構築していきます。
まずはプライマリデータベースの設定を整えます。

##3-1.ARCHIVELOG モード
ARCHIVELOG モードを確認します。

    [opc@atest-dkr19cdg-1 ~]$ racst1
    [oracle@racnodest1 ~]$ exit
    exit
    [opc@atest-dkr19cdg-1 ~]$ rac1
    [oracle@racnode1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 04:24:42 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> select log_mode from v$database;

    LOG_MODE
    ------------
    NOARCHIVELOG              ★NOARCHIVELOGなのでARCHIVELOGに変更要

    SQL> exit
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

NOARCHIVELOG のため、ARCHIVELOG に変更します。
ARCHIVELOG モードの変更は MOUNT 状態で実施します。

    [oracle@racnode1 ~]$ srvctl stop database -db orcl
    [oracle@racnode1 ~]$ srvctl start instance -db orcl -i ORCL1 -o mount
    [oracle@racnode1 ~]$ crsctl stat res -t
    --------------------------------------------------------------------------------
    Name           Target  State        Server                   State details
    --------------------------------------------------------------------------------
    Local Resources
    --------------------------------------------------------------------------------
    ora.LISTENER.lsnr
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    ora.chad
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    ora.net1.network
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    ora.ons
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    --------------------------------------------------------------------------------
    Cluster Resources
    --------------------------------------------------------------------------------
    ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 STABLE
          2        ONLINE  ONLINE       racnode2                 STABLE
          3        ONLINE  OFFLINE                               STABLE
    ora.DATA.dg(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 STABLE
          2        ONLINE  ONLINE       racnode2                 STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.LISTENER_SCAN1.lsnr
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.asm(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 Started,STABLE
          2        ONLINE  ONLINE       racnode2                 Started,STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.asmnet1.asmnetwork(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 STABLE
          2        ONLINE  ONLINE       racnode2                 STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.cvu
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.orcl.db
          1        ONLINE  INTERMEDIATE racnode1                 Mounted (Closed),HOM
                                                                 E=/u01/app/oracle/pr
                                                                 oduct/19.3.0/dbhome_
                                                                 1,STABLE
          2        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                                 ABLE
    ora.qosmserver
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.racnode1.vip
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.racnode2.vip
          1        ONLINE  ONLINE       racnode2                 STABLE
    ora.scan1.vip
          1        ONLINE  ONLINE       racnode1                 STABLE
    --------------------------------------------------------------------------------
    [oracle@racnode1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 04:29:25 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> select log_mode from v$database;

    LOG_MODE
    ------------
    NOARCHIVELOG

    SQL> alter database archivelog;

    Database altered.

    SQL> select log_mode from v$database;

    LOG_MODE
    ------------
    ARCHIVELOG

    SQL> alter database open;

    Database altered.

    SQL> exit
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
    [oracle@racnode1 ~]$ srvctl start instance -db orcl -i ORCL2
    [oracle@racnode1 ~]$ crsctl stat res -t
    --------------------------------------------------------------------------------
    Name           Target  State        Server                   State details
    --------------------------------------------------------------------------------
    Local Resources
    --------------------------------------------------------------------------------
    ora.LISTENER.lsnr
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    ora.chad
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    ora.net1.network
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    ora.ons
                   ONLINE  ONLINE       racnode1                 STABLE
                   ONLINE  ONLINE       racnode2                 STABLE
    --------------------------------------------------------------------------------
    Cluster Resources
    --------------------------------------------------------------------------------
    ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 STABLE
          2        ONLINE  ONLINE       racnode2                 STABLE
          3        ONLINE  OFFLINE                               STABLE
    ora.DATA.dg(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 STABLE
          2        ONLINE  ONLINE       racnode2                 STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.LISTENER_SCAN1.lsnr
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.asm(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 Started,STABLE
          2        ONLINE  ONLINE       racnode2                 Started,STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.asmnet1.asmnetwork(ora.asmgroup)
          1        ONLINE  ONLINE       racnode1                 STABLE
          2        ONLINE  ONLINE       racnode2                 STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.cvu
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.orcl.db
          1        ONLINE  ONLINE       racnode1                 Open,HOME=/u01/app/o
                                                                 racle/product/19.3.0
                                                                 /dbhome_1,STABLE
          2        ONLINE  ONLINE       racnode2                 Open,HOME=/u01/app/o
                                                                 racle/product/19.3.0
                                                                 /dbhome_1,STABLE
    ora.qosmserver
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.racnode1.vip
          1        ONLINE  ONLINE       racnode1                 STABLE
    ora.racnode2.vip
          1        ONLINE  ONLINE       racnode2                 STABLE
    ora.scan1.vip
          1        ONLINE  ONLINE       racnode1                 STABLE
    --------------------------------------------------------------------------------
    [oracle@racnode1 ~]$ exit
    exit
    [opc@atest-dkr19cdg-1 ~]$ rac2
    [oracle@racnode2 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 04:33:49 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> select log_mode from v$database;

    LOG_MODE
    ------------
    ARCHIVELOG

    SQL> exit
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
    [oracle@racnode2 ~]$ exit
    exit

##3-2.強制ロギング
強制ロギングを有効化します。

    [opc@atest-dkr19cdg-1 ~]$ rac1
    [oracle@racnode1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 04:36:54 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> select force_logging from v$database;

    FORCE_LOGGING
    ---------------------------------------
    NO              ★NOのため、有効化します。

    SQL> alter database force logging;

    Database altered.

    SQL> select force_logging from v$database;

    FORCE_LOGGING
    ---------------------------------------
    YES

    SQL> exit
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
    [oracle@racnode1 ~]$ exit
    exit

##3-3.スタンバイREDOログ
スタンバイREDOログを作成します。
スタンバイREDOログは Oracle 推奨に合わせてオンラインREDOログ +1 の数作成します。

    [opc@atest-dkr19cdg-1 ~]$ rac1
    [oracle@racnode1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 04:40:20 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> select group#, thread#, bytes/1024/1024 MB from v$log;

        GROUP#    THREAD#         MB
    ---------- ---------- ----------
             1          1        200
             2          1        200
             3          1        200
             4          2        200
             5          2        200
             6          2        200

    6 rows selected.

    SQL> alter database add standby logfile thread 1 GROUP 101 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 1 GROUP 102 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 1 GROUP 103 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 1 GROUP 104 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 2 GROUP 105 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 2 GROUP 106 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 2 GROUP 107 ('+DATA') SIZE 200M;

    Database altered.

    SQL> alter database add standby logfile thread 2 GROUP 108 ('+DATA') SIZE 200M;

    Database altered.

    SQL> select group#, thread#, bytes/1024/1024 MB from v$standby_log;

        GROUP#    THREAD#         MB
    ---------- ---------- ----------
           101          1        200
           102          1        200
           103          1        200
           104          1        200
           105          2        200
           106          2        200
           106          2        200
           106          2        200

    8 rows selected.

    SQL> exit
    Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0
    [oracle@racnode1 ~]$ exit
    exit

##3-4.初期化パラメータ
DataGuard 用の初期化パラメータを設定します。
関係のない初期パラが多いため、ここでは関係あるものだけを抜粋します。

    [opc@atest-dkr19cdg-1 ~]$ rac1
    [oracle@racnode1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 25 04:53:05 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> set lines 300 pages 50000 tab off trim on
    SQL> col NAME for a30
    SQL> col VALUE for a50
    SQL> select INST_ID, NAME, VALUE from GV$PARAMETER
     where upper(NAME) in (
             'CONTROL_FILE_RECORD_KEEP_TIME',
             'DB_FILE_NAME_CONVERT',
             'DB_NAME',
             'DB_UNIQUE_NAME',
             'FAL_SERVER',
             'LOG_ARCHIVE_CONFIG',
             'LOG_ARCHIVE_DEST_1',
             'LOG_ARCHIVE_DEST_2',
             'LOG_ARCHIVE_DEST_STATE_1',
             'LOG_ARCHIVE_DEST_STATE_2',
             'LOG_ARCHIVE_FORMAT',
             'LOG_FILE_NAME_CONVERT',
             'REMOTE_LOGIN_PASSWORDFILE',
             'STANDBY_FILE_MANAGEMENT')
     order by 2, 1 ;

       INST_ID NAME                           VALUE
    ---------- ------------------------------ --------------------------------------------------
             1 control_file_record_keep_time  7
             2 control_file_record_keep_time  7
             1 db_file_name_convert
             2 db_file_name_convert
             1 db_name                        ORCL
             2 db_name                        ORCL
             1 db_unique_name                 ORCL
             2 db_unique_name                 ORCL
             1 fal_server                     
             2 fal_server                     
             1 log_archive_config             
             2 log_archive_config             
             1 log_archive_dest_1             
             2 log_archive_dest_1             
             1 log_archive_dest_2             
             2 log_archive_dest_2             
             1 log_archive_dest_state_1       enable
             2 log_archive_dest_state_1       enable
             1 log_archive_dest_state_2       enable
             2 log_archive_dest_state_2       enable
             1 log_archive_format             %t_%s_%r.dbf
             2 log_archive_format             %t_%s_%r.dbf
             1 log_file_name_convert
             2 log_file_name_convert
             1 remote_login_passwordfile      EXCLUSIVE
             2 remote_login_passwordfile      EXCLUSIVE
             1 standby_file_management        MANUAL
             2 standby_file_management        MANUAL

    28 rows selected.

    SQL>

以下を設定します。

    -- プライマリロールで必要なパラメータ
    alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,ORCLST)';
    alter system set LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL';
    alter system set LOG_ARCHIVE_DEST_2='SERVICE=ORCLST ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLST REOPEN=60';
    alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;        ★元々enableなので明示的に設定する必要はありません
    alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;        ★元々enableなので明示的に設定する必要はありません

    -- スタンバイロールで必要なパラメータ
    alter system set FAL_SERVER=ORCLST;
    alter system set STANDBY_FILE_MANAGEMENT=AUTO;
    alter system set DB_FILE_NAME_CONVERT='+DATA/ORCLST/','+DATA/ORCL/' scope=spfile;
    alter system set LOG_FILE_NAME_CONVERT='+DATA/ORCLST/','+DATA/ORCL/' scope=spfile;

    -- その他
    alter system set CONTROL_FILE_RECORD_KEEP_TIME=365;

実際に設定したものが以下です。
db_file_name_convert , log_file_name_convert は SPFILE に設定するため、v$spparameter で確認します。

    SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,ORCLST)';

    System altered.

    SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL';

    System altered.

    SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=ORCLST ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLST REOPEN=60';

    System altered.

    SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;

    System altered.

    SQL> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;

    System altered.

    SQL> alter system set FAL_SERVER=ORCLST;

    System altered.

    SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO;

    System altered.

    SQL> alter system set DB_FILE_NAME_CONVERT='+DATA/ORCLST/','+DATA/ORCL/' scope=spfile;

    System altered.

    SQL> alter system set LOG_FILE_NAME_CONVERT='+DATA/ORCLST/','+DATA/ORCL/' scope=spfile;

    System altered.

    SQL> alter system set CONTROL_FILE_RECORD_KEEP_TIME=365;

    System altered.

    SQL> select INST_ID, NAME, VALUE from GV$PARAMETER
     where upper(NAME) in (
             'CONTROL_FILE_RECORD_KEEP_TIME',
             'DB_FILE_NAME_CONVERT',
             'DB_NAME',
             'DB_UNIQUE_NAME',
             'FAL_SERVER',
             'LOG_ARCHIVE_CONFIG',
             'LOG_ARCHIVE_DEST_1',
             'LOG_ARCHIVE_DEST_2',
             'LOG_ARCHIVE_DEST_STATE_1',
             'LOG_ARCHIVE_DEST_STATE_2',
             'LOG_ARCHIVE_FORMAT',
             'LOG_FILE_NAME_CONVERT',
             'REMOTE_LOGIN_PASSWORDFILE',
             'STANDBY_FILE_MANAGEMENT')
     order by 2, 1 ;

       INST_ID NAME                           VALUE
    ---------- ------------------------------ --------------------------------------------------
             1 control_file_record_keep_time  365
             2 control_file_record_keep_time  365
             1 db_file_name_convert
             2 db_file_name_convert
             1 db_name                        ORCL
             2 db_name                        ORCL
             1 db_unique_name                 ORCL
             2 db_unique_name                 ORCL
             1 fal_server                     ORCLST
             2 fal_server                     ORCLST
             1 log_archive_config             DG_CONFIG=(ORCL,ORCLST)
             2 log_archive_config             DG_CONFIG=(ORCL,ORCLST)
             1 log_archive_dest_1             LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
                                              DB_UNIQUE_NAME=ORCL

             2 log_archive_dest_1             LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
                                              DB_UNIQUE_NAME=ORCL

             1 log_archive_dest_2             SERVICE=ORCLST ASYNC VALID_FOR=(ONLINE_LOGFILES,PR
                                              IMARY_ROLE) DB_UNIQUE_NAME=ORCLST REOPEN=60

             2 log_archive_dest_2             SERVICE=ORCLST ASYNC VALID_FOR=(ONLINE_LOGFILES,PR
                                              IMARY_ROLE) DB_UNIQUE_NAME=ORCLST REOPEN=60

             1 log_archive_dest_state_1       ENABLE
             2 log_archive_dest_state_1       ENABLE
             1 log_archive_dest_state_2       ENABLE
             2 log_archive_dest_state_2       ENABLE
             1 log_archive_format             %t_%s_%r.dbf
             2 log_archive_format             %t_%s_%r.dbf
             1 log_file_name_convert
             2 log_file_name_convert
             1 remote_login_passwordfile      EXCLUSIVE
             2 remote_login_passwordfile      EXCLUSIVE
             1 standby_file_management        AUTO
             2 standby_file_management        AUTO

    28 rows selected.

    SQL> set lin 1000
    SQL> col name for a40
    SQL> col value for a40
    SQL> select NAME,VALUE,ORDINAL from v$spparameter where name='db_file_name_convert';

    NAME                                     VALUE                                       ORDINAL
    ---------------------------------------- ---------------------------------------- ----------
    db_file_name_convert                     +DATA/ORCLST/                                     1
    db_file_name_convert                     +DATA/ORCL/                                       2

    SQL> select NAME,VALUE,ORDINAL from v$spparameter where name='log_file_name_convert';

    NAME                                     VALUE                                       ORDINAL
    ---------------------------------------- ---------------------------------------- ----------
    log_file_name_convert                    +DATA/ORCLST/                                     1
    log_file_name_convert                    +DATA/ORCL/                                       2

    SQL>

#4.DataGuard 構築 - Oracle Net 接続設定と確認
プライマリとスタンバイの通信を行うための Oracle Net 接続設定を行います。

##4-1.Alias の作成（racnodest1）
まず、スタンバイ環境の oracle ユーザーのコマンド操作を簡便にするため、.bashrc に Alias を追加します。

**ここで ORACLE_SID について、1 node RAC として作成する場合と SINGLE 環境として作成する場合で指定が異なりますので、作成する環境に合わせて設定します。
1 node RAC として作成する場合は DB_UNIQUE_NAME にインスタンス番号が付加されますので、ORCLST1 が正しい設定となります。 
SINGLE 環境の場合は DB_UNIQUE_NAME が ORACLE_SID となるため、 ORCLST が正しい設定となります。
以降 ORACLE_SID が出てくる箇所も同様になりますのでご注意ください。**

    [opc@atest-dkr19cdg-1 ~]$ racst1
    [oracle@racnodest1 ~]$ vi .bashrc
    # .bashrc

    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi

    # Uncomment the following line if you don't like systemctl's auto-paging feature:
    # export SYSTEMD_PAGER=

    # User specific aliases and functions
    export LD_LIBRARY_PATH=/u01/app/oracle/product/19.3.0/dbhome_1/lib:/usr/lib:/lib
    export SCRIPT_DIR=/opt/scripts/startup
    export GRID_HOME=/u01/app/19.3.0/grid
    export DB_BASE=/u01/app/oracle
    export DB_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
    ulimit -S -s 10240

    # 以下を追加
    if [ -t 0 ]; then
      stty intr "^C"
      stty erase "^H"
    fi

    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=`echo ${DB_HOME}`
    export ORACLE_SID=ORCLST1              ★RACかSINGLEかでインスタンス番号を付加するかどうか選択
    export DB_UNIQUE_NAME=ORCLST
    export PATH=${PATH}:/u01/app/19.3.0/grid/bin
    export NLS_DATE_FORMAT="YYYY/MM/DD HH24:MI:SS"
    alias va='view /u01/app/oracle/diag/rdbms/orclst/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log'
    alias ta='tail -f /u01/app/oracle/diag/rdbms/orclst/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log'
    alias cdh="cd $ORACLE_HOME"
    alias cdd="cd $ORACLE_HOME/dbs"
    alias cdn="cd $ORACLE_HOME/network/admin"
    alias stat="${GRID_HOME}/bin/crsctl stat res -t"
    alias stati="${GRID_HOME}/bin/crsctl stat res -t -init"
    alias statdb="srvctl status database -db ${DB_UNIQUE_NAME}"
    alias sys="sqlplus / as sysdba"
    alias pdb="sqlplus sys/oracle@`hostname`/orclpdb as sysdba"

.bashrc を読み込ませます。

    [oracle@racnodest1 ~]$ . .bashrc

##4-2.listener.ora
スタンバイ環境の listener.ora に duplicate の際に用いる静的リスナを登録します。

    [oracle@racnodest1 ~]$ cd $ORACLE_HOME/network/admin
    [oracle@racnodest1 admin]$ ls
    samples  shrept.lst  tnsnames.ora
    [oracle@racnodest1 admin]$ vi listener.ora
    # 以下を追加
    LISTENER =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = tcp)(HOST = racnodest1)(PORT = 1521))
        (ADDRESS = (PROTOCOL = ipc)(KEY = EXTPROC1521))
      )

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = ORCLST)
          (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
          (SID_NAME = ORCLST1)
          (ENVS = /u01/app/oracle/product/19.3.0/dbhome_1/network/admin)
        )
      )

    ADR_BASE_LISTENER=/u01/app/oracle

リスナーを起動し、サービス ORCLST が表示され、ステータスが UNKNOWN になっていることを確認します。
以下のような既に LISTENER が起動しているといったメッセージが出た場合、使用するポートを変更して起動しなおします。

    [oracle@racnodest1 admin]$ lsnrctl start

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 31-JAN-2022 08:34:01

    Copyright (c) 1991, 2019, Oracle.  All rights reserved.

    TNS-01106: Listener using listener name LISTENER has already been started         ★既に起動済みのエラー
    [oracle@racnodest1 admin]$ vi listener.ora
    LISTENER =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = tcp)(HOST = racnodest1)(PORT = 1522))        ★PORTを変更する
        (ADDRESS = (PROTOCOL = ipc)(KEY = EXTPROC1521))
      )

    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = ORCLST)
          (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
          (SID_NAME = ORCLST1)
          (ENVS = /u01/app/oracle/product/19.3.0/dbhome_1/network/admin)
        )
      )

    ADR_BASE_LISTENER=/u01/app/oracle

    [oracle@racnodest1 admin]$ lsnrctl start

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 31-JAN-2022 08:34:50

    Copyright (c) 1991, 2019, Oracle.  All rights reserved.

    Starting /u01/app/oracle/product/19.3.0/dbhome_1/bin/tnslsnr: please wait...

    TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    System parameter file is /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
    Log messages written to /u01/app/oracle/product/19.3.0/dbhome_1/network/log/listener.log
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=racnodest1.example.com)(PORT=1522)))
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=racnodest1)(PORT=1522))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Start Date                31-JAN-2022 08:34:50
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/product/19.3.0/dbhome_1/network/log/listener.log
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=racnodest1.example.com)(PORT=1522)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    Services Summary...
    Service "ORCLST" has 1 instance(s).
      Instance "ORCLST1", status UNKNOWN, has 1 handler(s) for this service...              ★確認
    The command completed successfully
    [oracle@racnodest1 admin]$

##4-3.tnsnames.ora を編集（両サイト）
プライマリの tnsnames.ora を編集します。
ここで、スタンバイ側の CONNECT_DATA には (UR=A) を追加するのを忘れないようにします。
また、スタンバイ側の HOST 設定は SCAN ではなく HOST 名を記載するようにします。

    [oracle@racnode1 ~]$ cd $ORACLE_HOME/network/admin
    [oracle@racnode1 admin]$ cat tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.

    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCL)
        )
      )
    
    [oracle@racnode1 admin]$ vi tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome
    _1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.

    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCL)
        )
      )

    # 以下を追加
    ORCLST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnodest1)(PORT = 1521))
        (CONNECT_DATA =
          (UR=A)
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCLST)
        )
      )

tnsnames.ora を編集したら tnsping で疎通確認をします。

    [oracle@racnode1 admin]$ tnsping ORCL

    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 25-JAN-2022 11:35:55

    Copyright (c) 1997, 2019, Oracle.  All rights reserved.

    Used parameter files:


    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
    OK (0 msec)
    [oracle@racnode1 admin]$ tnsping ORCLST

    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 25-JAN-2022 11:35:58

    Copyright (c) 1997, 2019, Oracle.  All rights reserved.

    Used parameter files:


    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racnodest1)(PORT = 1521)) (CONNECT_DATA = (UR=A) (SERVER = DEDICATED) (SERVICE_NAME = ORCLST)))
    OK (0 msec)

RAC 2 側も同様に tnsnames.ora を編集し、疎通確認を行います。

スタンバイ側は tnsnames.ora が存在していないと思いますので、プライマリ側と同じ内容で作成します。

    [oracle@racnodest1 ~]$ cd $ORACLE_HOME/network/admin
    [oracle@racnodest1 admin]$ cat tnsnames.ora
    cat: tnsnames.ora: No such file or directory
    [oracle@racnodest1 admin]$ vi tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.

    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCL)
        )
      )

    ORCLST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnodest1)(PORT = 1521))
        (CONNECT_DATA =
          (UR=A)
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCLST)
        )
      )

スタンバイ側からも tnsping で疎通確認を行います。

    [oracle@racnodest1 admin]$ tnsping ORCL

    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 25-JAN-2022 11:38:52

    Copyright (c) 1997, 2019, Oracle.  All rights reserved.

    Used parameter files:


    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
    OK (0 msec)
    [oracle@racnodest1 admin]$ tnsping ORCLST

    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 25-JAN-2022 11:38:59

    Copyright (c) 1997, 2019, Oracle.  All rights reserved.

    Used parameter files:


    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racnodest1)(PORT = 1521)) (CONNECT_DATA = (UR=A) (SERVER = DEDICATED) (SERVICE_NAME = ORCLST)))
    OK (0 msec)

#5.DataGuard 構築 - スタンバイDB の複製

##5-1.パスワードファイルのコピー
今回はプライマリと同じパスワードファイルを利用します。
プライマリサイトからスタンバイサイトにパスワードファイルをコピーします。
スタンバイ側のパスワードファイルは $ORACLE_HOME/dbs/ の階層に orapw + SID の名称で配置します。
**RAC の場合は orapwORCLST1、SINGLE の場合は orapwORCLST となります。**

    ★プライマリサイトで実施
    [oracle@racnode1 ~]$ sudo su - grid
    Last login: Wed Jan 26 05:35:58 UTC 2022
    [grid@racnode1 ~]$ asmcmd ls -l '+DATA/ORCL/PASSWORD'
    Type      Redund  Striped  Time             Sys  Name
    PASSWORD  UNPROT  COARSE   JAN 14 06:00:00  Y    pwdorcl.258.1093934281
    [grid@racnode1 ~]$ asmcmd pwcopy '+DATA/ORCL/PASSWORD/pwdorcl.258.1093934281' /tmp
    copying +DATA/ORCL/PASSWORD/pwdorcl.258.1093934281 -> /tmp/pwdorcl.258.1093934281
    [grid@racnode1 ~]$ exit
    logout
    [oracle@racnode1 ~]$ scp /tmp/pwdorcl.258.1093934281 racnodest1:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwORCLST1
    The authenticity of host 'racnodest1 (172.16.1.152)' can't be established.
    ECDSA key fingerprint is SHA256:Uyw5pJXq3/44UqvpBPJAG3oMOnfdcukl9uqNKsI3dPA.
    ECDSA key fingerprint is MD5:7d:90:6b:fc:9e:ff:7c:2e:77:87:e9:98:13:1b:73:27.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'racnodest1,172.16.1.152' (ECDSA) to the list of known hosts.
    oracle@racnodest1's password:
    pwdorcl.258.1093934281

スタンバイに配置されたことを確認します。

    ★スタンバイサイトで確認
    [oracle@racnodest1 ~]$ cd $ORACLE_HOME/dbs
    [oracle@racnodest1 dbs]$ ls
    orapwORCLST1

##5-2.adump ディレクトリ作成
スタンバイサイトに adump ディレクトリを作成します。

    [oracle@racnodest1 ~]$ mkdir -p /u01/app/oracle/admin/ORCLST/adump

##5-3.補助インスタンスの起動
RMAN duplicate で接続するための補助インスタンスをスタンバイサイトで起動します。
補助インスタンス用の PFILE を作成し、それを用いて nomount で起動します。

    [oracle@racnodest1 ~]$ vi /tmp/pfileORCLST
    db_name=ORCL
    db_unique_name=ORCLST
    [oracle@racnodest1 ~]$ echo $ORACLE_SID
    ORCLST1
    [oracle@racnodest1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 26 05:58:07 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.

    Connected to an idle instance.

    SQL> startup nomount pfile='/tmp/pfileORCLST'
    ORACLE instance started.

    Total System Global Area  432009920 bytes
    Fixed Size                  8897216 bytes
    Variable Size             364904448 bytes
    Database Buffers           50331648 bytes
    Redo Buffers                7876608 bytes
    SQL> exit

##5-4.プライマリから接続確認

    ★プライマリサイトで確認
    [oracle@racnode1 ~]$ sqlplus /nolog

    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 26 06:00:00 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.

    SQL> conn sys/oracle@ORCLST as sysdba
    Connected.
    SQL> select instance_name from v$instance;

    INSTANCE_NAME
    ----------------
    ORCLST1

    SQL> exit

##5-5.複製時のパラレル度設定
Duplicate は時間のかかる処理の為、パラレル度を設定して高速化します。

    [opc@atest-dkr19cdg-1 ~]$ rac1
    [oracle@racnode1 ~]$ rman target /

    Recovery Manager: Release 19.0.0.0.0 - Production on Tue Jan 25 04:50:13 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

    connected to target database: ORCL (DBID=1621715199)

    RMAN> show all;

    RMAN configuration parameters for database with db_unique_name ORCL are:
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
    CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
    CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/snapcf_ORCL1.f'; # default

    RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;

    using target database control file instead of recovery catalog
    new RMAN configuration parameters:
    CONFIGURE DEFAULT DEVICE TYPE TO DISK;
    new RMAN configuration parameters are successfully stored

    RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

    new RMAN configuration parameters:
    CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
    new RMAN configuration parameters are successfully stored

    RMAN> show all;

    RMAN configuration parameters for database with db_unique_name ORCL are:
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK;              ★同じだが# default が外れている。
    CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;              ★変更
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
    CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
    CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
    CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/snapcf_ORCL1.f'; # default

    RMAN> exit

    Recovery Manager complete.
    [oracle@racnode1 ~]$ 

##5-6.RMAN Duplicate
プライマリサイトにて RMAN Duplicate を実行し、スタンバイデータベースを作成します。

    ★プライマリサイトで実施
    [oracle@racnode1 ~]$ rman target sys/oracle auxiliary sys/oracle@ORCLST

    Recovery Manager: Release 19.0.0.0.0 - Production on Wed Jan 26 06:02:53 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

    connected to target database: ORCL (DBID=1621715199)
    connected to auxiliary database: ORCL (not mounted)

    RMAN>


Duplicate コマンドは以下で実施しました。

    RMAN> run {
    allocate channel prmy1 type disk;
    allocate auxiliary channel stby type disk;
    duplicate target database for standby from active database dorecover nofilenamecheck
    SPFILE
      SET AUDIT_FILE_DEST='/u01/app/oracle/admin/ORCLST/adump'
      SET DB_UNIQUE_NAME='ORCLST'
      SET CONTROL_FILES='+DATA'
      SET DB_FILE_NAME_CONVERT='+DATA/ORCL/','+DATA/ORCLST/'
      SET LOG_FILE_NAME_CONVERT='+DATA/ORCL/','+DATA/ORCLST/'
      SET FAL_SERVER='ORCL'
      SET LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCLST'
      SET LOG_ARCHIVE_DEST_2='SERVICE=ORCL ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL REOPEN=60'
      SET CLUSTER_DATABASE='FALSE'
    ;
    }

以下のような Finished Duplicate が出力されれば完了です。

    Finished Duplicate Db at 2022/01/26 06:11:31
    released channel: prmy1
    released channel: stby

    RMAN>

##5-7.複製された DB の状態確認
正常に作成され、MOUNT 状態で起動、DATABASE_ROLE が PHYSICAL STANDBY になっていることを確認します。

    [oracle@racnodest1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 26 09:10:28 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> set pages 1000 lin 1000
    SQL> select NAME, DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, FLASHBACK_ON from V$DATABASE ;

    NAME      DB_UNIQUE_NAME                 OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
    --------- ------------------------------ -------------------- ---------------- ------------------
    ORCL      ORCLST                         MOUNTED              PHYSICAL STANDBY NO

    SQL>

#6.DataGuard 構築 - 事後作業

##6-1.SPFILEの作成
SPFILE から PFILE を作成し、必要な編集を行って ASM に登録します。

    [oracle@racnodest1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 26 06:47:35 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> create pfile='/tmp/pfile' from spfile;

    File created.

    SQL> shutdown immediate
    ORA-01109: database not open


    Database dismounted.
    ORACLE instance shut down.
    SQL> exit

PFILE を確認し、プライマリインスタンス名から始まるパラメータでスタンバイインスタンス名から始まるものが存在しない場合、コピーして追加します。
ここで実施している環境では以下3つがプライマリにあってスタンバイにないパラメータでしたので追加しました。
**SINGLE 環境を作成する場合は instance_number、thread は設定不要です。**

    [oracle@racnodest1 ~]$ vi /tmp/pfile
    ORCLST1.instance_number=1
    ORCLST1.thread=1
    ORCLST1.undo_tablespace='UNDOTBS1'

編集した PFILE で起動し、SPFILE を ASM へ登録します。

    SQL> startup mount pfile='/tmp/pfile';
    ORACLE instance started.

    Total System Global Area 3942642408 bytes
    Fixed Size                  9143016 bytes
    Variable Size             805306368 bytes
    Database Buffers         3120562176 bytes
    Redo Buffers                7630848 bytes
    Database mounted.
    SQL> create spfile='+DATA' from pfile='/tmp/pfile';

    File created.

    SQL> shutdown immediate
    ORA-01109: database not open


    Database dismounted.
    ORACLE instance shut down.
    SQL> exit

##6-2.リソース登録
スタンバイサイトで DB とインスタンスリソースを Clusterware に登録します。
**RAC の場合と SINGLE の場合で登録の方法が異なります。**

    ★RACの場合
    [oracle@racnodest1 dbs]$ srvctl add database -db ORCLST -oraclehome $ORACLE_HOME -dbtype RAC -role PHYSICAL_STANDBY -startoption "MOUNT" -dbname ORCL -diskgroup 'DATA'
    [oracle@racnodest1 dbs]$ srvctl add instance -db ORCLST -instance ORCLST1 -node racnodest1

**SINGLE 環境の場合は以下の点が RAC の場合と異なります。
・ -dbtype に指定する値が RAC ではなく SINGLE　
・ instance の登録が不要。
・ -node オプションが必要。**

    ★SINGLEの場合
    [oracle@racnodest1 dbs]$ srvctl add database -db ORCLST -oraclehome $ORACLE_HOME -dbtype SINGLE -role PHYSICAL_STANDBY -startoption "MOUNT" -dbname ORCL -diskgroup 'DATA' -node racnodest1

起動して確認します。MOUNT になっていれば正常です。

    [oracle@racnodest1 ~]$ srvctl start database -db ORCLST
    [oracle@racnodest1 ~]$ crsctl stat res -t
    --------------------------------------------------------------------------------
    Name           Target  State        Server                   State details
    --------------------------------------------------------------------------------
    Local Resources
    --------------------------------------------------------------------------------
    ora.LISTENER.lsnr
                   ONLINE  ONLINE       racnodest1               STABLE
    ora.chad
                   ONLINE  ONLINE       racnodest1               STABLE
    ora.net1.network
                   ONLINE  ONLINE       racnodest1               STABLE
    ora.ons
                   ONLINE  ONLINE       racnodest1               STABLE
    --------------------------------------------------------------------------------
    Cluster Resources
    --------------------------------------------------------------------------------
    ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.DATA.dg(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.LISTENER_SCAN1.lsnr
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.asm(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               Started,STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.asmnet1.asmnetwork(ora.asmgroup)
          1        ONLINE  ONLINE       racnodest1               STABLE
          2        OFFLINE OFFLINE                               STABLE
          3        OFFLINE OFFLINE                               STABLE
    ora.cvu
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.orclst.db
          1        ONLINE  INTERMEDIATE racnodest1               Mounted (Closed),HOM
                                                                 E=/u01/app/oracle/pr
                                                                 oduct/19.3.0/dbhome_
                                                                 1,STABLE
    ora.qosmserver
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.racnodest1.vip
          1        ONLINE  ONLINE       racnodest1               STABLE
    ora.scan1.vip
          1        ONLINE  ONLINE       racnodest1               STABLE
    --------------------------------------------------------------------------------

##6-3.Redo 適用プロセス（MRP）の起動
立ち上げたばかりのスタンバイ DB は Redo 適用プロセス（MRP）が起動していません。
まず、MRP の状態とラグを確認します。
MRP0 プロセスが存在せず、Redo 適用はされていないことがわかります。
また、ラグの確認でも apply lag が表示されておらず Redo 適用がされていないことが確認できます。

    [oracle@racnodest1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 26 10:56:18 2022
    Version 19.3.0.0.0

    Copyright (c) 1982, 2019, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    Version 19.3.0.0.0

    SQL> set line 1000 pages 1000
    SQL> col value for a32
    SQL> select PROCESS,PID,STATUS,THREAD#,SEQUENCE# from v$managed_standby where process='MRP0';

    no rows selected

    SQL> select SOURCE_DB_UNIQUE_NAME, NAME, VALUE, UNIT from v$dataguard_stats;

    SOURCE_DB_UNIQUE_NAME            NAME                             VALUE                            UNIT
    -------------------------------- -------------------------------- -------------------------------- ------------------------------
    ORCL                             transport lag                    +00 00:00:00                     day(2) to second(0) interval
    ORCL                             apply lag                                                         day(2) to second(0) interval
    ORCL                             apply finish time                                                 day(2) to second(3) interval
                                     estimated startup time           47                               second

    SQL>

以下のコマンドで MRP を起動します。

    SQL> alter database recover managed standby database disconnect;

再度 MRP の状態とラグを確認します。
MRP0 プロセスのステータスが APPLYING_LOG となり、apply lag の値が +00 00:00:00 （適用遅延なし）となったことが確認できました。

    SQL> select PROCESS,PID,STATUS,THREAD#,SEQUENCE# from v$managed_standby where process='MRP0';

    PROCESS   PID                      STATUS          THREAD#  SEQUENCE#
    --------- ------------------------ ------------ ---------- ----------
    MRP0      25658                    APPLYING_LOG          1         17

    SQL> select SOURCE_DB_UNIQUE_NAME, NAME, VALUE, UNIT from v$dataguard_stats;

    SOURCE_DB_UNIQUE_NAME            NAME                             VALUE                            UNIT
    -------------------------------- -------------------------------- -------------------------------- ------------------------------
    ORCL                             transport lag                    +00 00:00:00                     day(2) to second(0) interval
    ORCL                             apply lag                        +00 00:00:00                     day(2) to second(0) interval
    ORCL                             apply finish time                                                 day(2) to second(3) interval
                                     estimated startup time           47                               second

    SQL>

参考に、MRP を止める際は以下のコマンドで停止します。

    SQL> alter database recover managed standby database cancel;


##6-4.Oracle Net の再設定

listener.ora に記載した静的リスナは Duplicate 用のため、既に不要となっているため削除します。

    [oracle@racnodest1 ~]$ cd $ORACLE_HOME/network/admin
    [oracle@racnodest1 admin]$ ls
    listener.ora  samples  shrept.lst  tnsnames.ora
    [oracle@racnodest1 admin]$ rm listener.ora
    [oracle@racnodest1 admin]$ lsnrctl stop

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 31-JAN-2022 08:56:19

    Copyright (c) 1991, 2019, Oracle.  All rights reserved.

    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    TNS-01190: The user is not authorized to execute the requested listener command
    [oracle@racnodest1 admin]$ lsnrctl status

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 26-JAN-2022 07:09:09

    Copyright (c) 1991, 2019, Oracle.  All rights reserved.

    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Start Date                26-JAN-2022 07:08:07
    Uptime                    0 days 0 hr. 1 min. 1 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/19.3.0/grid/network/admin/listener.ora
    Listener Log File         /u01/app/grid/diag/tnslsnr/racnodest1/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.1.152)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.1.162)(PORT=1521)))
    Services Summary...
    Service "+ASM" has 1 instance(s).
      Instance "+ASM1", status READY, has 1 handler(s) for this service...
    Service "+ASM_DATA" has 1 instance(s).
      Instance "+ASM1", status READY, has 1 handler(s) for this service...
    Service "ORCLST" has 1 instance(s).
      Instance "ORCLST1", status READY, has 1 handler(s) for this service...        ★静的リスナで登録したORCLSTサービスのUNKNOWNがなくなり、動的リスナのステータスREADYになっていることを確認
    The command completed successfully

tnsnames.ora の (UR=A) の記述も同じく不要となっているため削除します（両サイトで実施）

    [oracle@racnode1 ~]$ cd $ORACLE_HOME/network/admin
    [oracle@racnode1 admin]$ vi tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.

    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnode-scan)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCL)
        )
      )

    ORCLST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = racnodest1)(PORT = 1521))
        (CONNECT_DATA =               ★(UR=A)を削除
          (SERVER = DEDICATED)
          (SERVICE_NAME = ORCLST)
        )
      )