11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-01-26

#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 環境を構築する

そのため、プライマリ側をまだ構築されていない方は、上記記事を参考にプライマリ環境を準備した上で本記事を読んでいただければと思います。
上記記事では 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

左下のリソースからブート・ボリュームを選択します。
image.png

対象のブートボリュームを選択します。
image.png

[編集]をクリックします。
image.png

今回、元のサイズが 600GB であったため、ASM 分の 100GB を足した 700GB としました。
image.png

再スキャンコマンドが表示されるため、メモしておきます。
image.png

アイコンが緑色になり、サイズの値も 700GB に変更されているため、OCI 上での作業は完了です。
image.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 環境を構築する
の 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)
    )
  )
11
4
0

Register as a new user and use Qiita more conveniently

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?