DBサーバ構築、Oracle 26ai(3)Gridインストール1

DBサーバ・Oracle RAC

DBサーバ構築(Oracle製品インストール環境設定)

OpenSSHのホストキー自動学習・同期機能無効化

私はこのページを書くまで知らなかったのですが、実はRHEL9のOpenSSLではそれまでのバージョンと仕様が変わって「ホストキー自動学習・同期機能」なる設定がデフォルトで有効化されています。

Geminiさんによるとこれは「接続先サーバーからそのサーバーが持つすべてのホスト名やIPアドレス、別形式の公開鍵のリスト(known_hosts エントリ)を自動で受け取り、ローカルの known_hosts に自動追加・更新する機能」とか。なるほど、OpenSSH間で動的に情報共有を図ろうというわけですか。いや、まったく余計なことをするものです。

こちらがあずかり知らぬところで勝手にknown_hostsに情報が書き加えられてしまうわけですからはっきり言ってこれは非常に気持ち悪い。ましてこちらの環境では現行DBサーバ(Oracle 21c)と同じホスト名、IPアドレス(パブリック・ネットワークの場合)で新DBサーバを構築しようとしています。

新DBサーバのエントリに現行DBサーバのフィンガープリントやプライベート・ネットワークのIPアドレスがセットされているなんてことが有り得るわけでして*、DBノード間で透過的なssh通信を前提とするRAC環境ではこれが致命的な問題を引き起こすかもしれません。

まあ、新DBサーバのホスト名やIPアドレスを現行DBサーバからそのまま引き継ぐなんて横着はせず新しく振りなおせば仮に現行DBサーバの情報が新DBサーバのknown_hostsに書かれたとしてもあまり問題にはならないんじゃないかと思います。しかし新DBサーバのホスト名、IPアドレスを現行DBサーバから引き継ぐという方針は既に投稿しちゃってますからね。

今更この方針を変えるのもどうかと思うのでOpenSSHのホストキー自動学習・同期機能を無効化することで対応しようと思います。

以下、OpenSSHのホストキー自動学習・同期機能無効化手順です。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# 現在のホストキー自動学習・同期機能の状態を確認
ssh -G localhost | grep -i updatehostkeys
-> trueであれば有効、後続の作業を実施

# 既存のknown_hosts削除
rm /root/.ssh/known_hosts

# updatehostkeysがtrueであれば無効化
cat > /etc/ssh/ssh_config.d/disable-updatehostkeys.conf <<EOF
Host *
UpdateHostKeys no
EOF

# 無効化後のホストキー自動学習・同期機能の状態を確認
ssh -G localhost | grep -i updatehostkeys
-> falseが返されれば無効化済み(OK)

なお、この機能の有効化によって直接的な問題が生じるのは今のところ、ホスト名やIPアドレスが現新でかぶってしまうDBサーバのみですが、他のサーバでも自動的にknown_hostsの内容を書き換えるなどという余計なことをやられるのは嫌なのでRHEL9またはRocky Linux9を使っているサーバ(=現行DBサーバ以外のサーバ)はすべて無効化します。また、RHEL9及びRocky Linuxの初期構築手順もそのように修正しておきます。

【ホストキー自動学習・同期無効化対象】

サーバ種別デストリビューションホスト名
管理サーバRHEL9prsmg01、prsmg02
APサーバRHEL9prsap01、prsap02
WebサーバRocky Linux9prswb01、prswb02
ロード・バランサRocky Linux9prslb01、prslb02

*私がこの問題に気づいたのは新DBサーバ#1のudev設定ファイルをホスト名指定で新DBサーバ#2に転送しようとして警告が出されたのがきっかけです。新DBサーバのknown_hostsなのに現行DBサーバのインターコネクト用IPのエントリや一度も通信したホストのエントリが含まれていました。

ローカル・リポジトリ設定

管理サーバのDVDマウント用シェルローカル・リポジトリ用repoファイルをDBサーバに転送します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# 管理サーバ#1のDVDマウント用シェルをDBサーバ#1に転送
scp 172.16.10.11:/usr/local/bin/dvdmount /usr/local/bin

# 管理サーバ#1からローカル・リポジトリ用repoファイルを取得
scp 172.16.10.11:/etc/yum.repos.d/RHEL-DVD.repo /etc/yum.repos.d/

# DVDマウント用シェルをDBサーバ#2、DBサーバ#3へ配布
scp /usr/local/bin/dvdmount 172.16.10.32:/usr/local/bin/
scp /usr/local/bin/dvdmount 172.16.10.33:/usr/local/bin/

# ローカル・リポジトリ用repoファイルをDBサーバ#2、DBサーバ#3へ配布
scp /etc/yum.repos.d/RHEL-DVD.repo 172.16.10.32:/etc/yum.repos.d/
scp /etc/yum.repos.d/RHEL-DVD.repo 172.16.10.33:/etc/yum.repos.d/

メディア用NFSディレクトリ・マウントシェル作成

メディア用NFSディレクトリへのマウント用シェル、アンマウント用シェルを作成して各DBサーバに配布します。

NFSディレクトリへ・マウント用シェル(mdmount)
#!/bin/bash
MNT_DIR=/mnt/media
WAIT_TIME=10
ITVL_TIME=1
NFS_SVR=prsmg00

if [ ! -d "${MNT_DIR}" ] ; then
mkdir ${MNT_DIR}
fi

MNT_CHK=`mount | grep -c ${MNT_DIR}`

if [ ${MNT_CHK} -ne 0 ] ; then
echo "media directory already mounted !!"
exit 0
fi

$(mount -t nfs -o ro ${NFS_SVR}:/media ${MNT_DIR} &)

sleep ${ITVL_TIME}

for ((i=0;i<${WAIT_TIME};i++)) ; do
jobs
JCNT=`jobs | wc -l`
if [ ${JCNT} -eq 0 ] ; then
break
fi
sleep ${ITVL_TIME}
done

MNT_CHK=`mount | grep -c ${MNT_DIR}`

if [ ${MNT_CHK} -eq 0 ] ; then
echo "media directory mount check failed!!"
exit 1
fi

exit
NFSディレクトリへ・アンマウント用シェル(mdumount)
#!/bin/bash
MNT_DIR=/mnt/media
WAIT_TIME=10
ITVL_TIME=1

MNT_CHK=`mount | grep -c ${MNT_DIR}`

if [ ${MNT_CHK} -eq 0 ] ; then
echo "media directory already unmounted !!"
exit 1
fi

$(umount ${MNT_DIR} &)

sleep ${ITVL_TIME}

for ((i=0;i<${WAIT_TIME};i++)) ; do
jobs
JCNT=`jobs | wc -l`
if [ ${JCNT} -eq 0 ] ; then
break
fi
sleep ${ITVL_TIME}
done

MNT_CHK=`mount | grep -c ${MNT_DIR}`

if [ ${MNT_CHK} -ne 0 ] ; then
echo "media directory unmount failed !!"
exit 1
fi

exit
【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# メディア用NFSディレクトリへのマウント用シェル作成
vi /usr/local/bin/mdmount

# メディア用NFSディレクトリへのアンマウント用シェル作成
vi /usr/local/bin/mdumount

# 実行権限付与
chmod u+x /usr/local/bin/md*mount

# NFSマウント動作確認(prsmg00:/mediaがマントされていることを確認)
mdmount
df -m

# NFSアンマウント動作確認(prsmg00:/mediaがマントされていないことを確認)
mdumount
df -m

# DBサーバ#2、DBサーバ#3へシェルを配布
scp /usr/local/bin/md*mount 172.16.10.32:/usr/local/bin/
scp /usr/local/bin/md*mount 172.16.10.33:/usr/local/bin/

パッケージ・インストール

Grid Infrastructureインストレーションガイド「x86-64用のサポート対象Red Hat Enterprise Linux 9ディストリビューション」のパッケージ一覧をベースにパッケージ・リストを作成します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# RHEL9 必要パッケージ・リスト作成
cat > /tmp/ora_pkg.lst <<EOF
bc
binutils
compat-openssl11
elfutils-libelf
fontconfig
glibc
glibc-devel
glibc-headers
ksh
libaio
libasan
liblsan
libX11
libXau
libXi
libXrender
libXtst
libxcrypt-compat
libgcc
libibverbs
librdmacm
libstdc++
libxcb
libvirt-libs
make
policycoreutils
policycoreutils-python-utils
smartmontools
sysstat
EOF

パッケージ・リストを現在インストールされているパッケージと突合して不足パッケージのインストール用コマンドを生成します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# 不足パッケージ追加インストール用コマンド生成(${INST_CMD}まで1行で記述)
rpm -qa > /tmp/all_pkg.lst;INST_CMD="dnf -y install";while read LINE; do PKG=${LINE}; P_NAME=`grep ^${PKG}\-[0-9] /tmp/all_pkg.lst`; if [ -z "${P_NAME}" ] ; then INST_CMD="${INST_CMD} ${LINE}"; else echo "${P_NAME} INSTALLED" > /tmp/installed_pkg_lst;fi; done < "/tmp/ora_pkg.lst";echo "-----------------------";echo ${INST_CMD}

-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# rpm -qa > /tmp/all_pkg.lst;INST_CMD="dnf -y install";while read LINE; do PKG=${LINE}; P_NAME=`grep ^${PKG}\-[0-9] /tmp/all_pkg.lst`; if [ -z "${P_NAME}" ] ; then INST_CMD="${INST_CMD} ${LINE}"; else echo "${P_NAME} INSTALLED" > /tmp/installed_pkg_lst;fi; done < "/tmp/ora_pkg.lst";echo "-----------------------";echo ${INST_CMD}
-----------------------
dnf -y install compat-openssl11 ksh libasan liblsan librdmacm
[root@prsdb01 ~]#

生成されたコマンドで各DBサーバに追加パッケージをインストールします。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# インストール・メディアをマウント
dvdmount

# 追加パッケージをインストール
dnf -y install compat-openssl11 ksh libasan liblsan librdmacm

# GUI操作用にtigervnc-serverも一緒にインストール
dnf -y install tigervnc-server

クロック・ソース設定の確認

Grid Infrastructureインストレーションガイド「Linux x86-64でのVMのクロック・ソースの設定」では仮想環境(VM)のパフォーマンスを向上させるためにクロック・ソースをtsc(Time Stamp Counter)に設定することを推奨しています。

現在のクロック・ソース設定を確認します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# 使用可能なクロック・ソースを確認
cat /sys/devices/system/clocksource/clocksource0/available_clocksource

# 現在のクロック・ソースを確認
cat /sys/devices/system/clocksource/clocksource0/current_clocksource


-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
[root@prsdb01 ~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
[root@prsdb01 ~]#

tscが選択されているのでこのままで問題なさそうです。このまま次の「透過的なHugePagesの設定」に進みます。

透過的なHugePagesの設定

Grid Infrastructureインストレーションガイド「透過的なHugePagesをmadviseに設定」ではお題の通り透過的HugePagesをmadvise(要求されたら割り当て)に設定することを推奨しています*

/etc/default/grubを開き、GRUB_CMDLINE_LINUXに”transparent_hugepage=madvise”を追加してからgrub.cfgを再生成します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# 現在の透過的HugePages設定を確認(デフォルトはalways)
cat /sys/kernel/mm/transparent_hugepage/enabled

# grubをバックアップ
cp /etc/default/grub /tmp/grub.bk

# grubを編集して透過的HugePagesをmadviseに設定
vi /etc/default/grub

# grub.cfgを再生成
grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline

# サーバ再起動
reboot

# 現在の透過的HugePages設定を確認(madviseが選択されていることを確認)
cat /sys/kernel/mm/transparent_hugepage/enabled

-----------------------------------------------------------------------------
【/etc/default/grub編集内容】
-----------------------------------------------------------------------------
【編集箇所】※赤字部分を追記
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/root_vg-swap rd.lvm.lv=root_vg/root rd.lvm.lv=root_vg/swap rhgb quiet"

GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/root_vg-swap rd.lvm.lv=root_vg/root rd.lvm.lv=root_vg/swap rhgb quiet transparent_hugepage=madvise"

*:Oracle21cまでは透過的HugePagesは無効化がOracleの推奨設定でした。ただ、これはかなり古いバージョンの設定を何も考えずに引き継いでずっと放置していただけなんでしょうね。次のI/Oスケジューラの推奨設定もそうですがOracle26aiのインストレーションガイドでそうした設定の見直しを行い、以前のバージョン(19c、21c)のインストレーションガイドにもそれをフィードバックしている模様です。

ディスクI/Oスケジューラの確認

Grid Infrastructureインストレーションガイド「Linux 8以降のシステムでのディスクI/Oスケジューラの検証」に従ってASMディスクのI/Oスケジューラの設定を確認します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
cat /sys/block/dm-*/queue/scheduler

-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# cat /sys/block/dm-*/queue/scheduler
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq

[root@prsdb01 ~]#

現在の設定はmq-deadline(従来のシングルキュー deadlineのマルチ版)です。

Oracle 26aiのGrid Infrastructureインストレーション・ガイドには「一般的に…回転ストレージ・デバイス(HDD)の場合はI/Oスケジューラをdeadlineに設定し、SSDやNVMeなどの非回転ストレージ・デバイスの場合はnoneに設定」とあります。

こちらの環境は仮想ディスクはSCSI接続ですがデータストアは内蔵SSD、建前的にも仮想ディスクはオールフラッシュ・ストレージとしているので”none”を設定した方が良さげです。

ディスクI/Oスケジューラの設定は後でASMディスクの所有者やパーミッションと一緒にUDEVで設定します。ここはひとまず現状が確認なので次の「カーネル・パラメータの設定」に進みます。

カーネル・パラメータの設定

Grid Infrastructureインストレーション・ガイド「インストールのための最小パラメータ設定」に従いカーネル・パラメータを設定します。

まず、DBサーバ#1で現在のパラメータ値を確認します。

【新DBサーバ・prsdb01 / rootユーザで実行】
最小値-----------------------------------------------------------------------------
# セマフォ制御(最小値 SEMMSL 250、SEMMNS 32000、SEMOPM 100、SEMMNI128)
sysctl -a | grep sem

# システム全体の共用メモリページ数の上限(ページ単位、最小値 shmmax以上)
sysctl -a | grep shmall

# 共有メモリセグメントの最大サイズ(バイト単位、最小値 物理メモリーの半分)
sysctl -a | grep shmmax

# 共有メモリーセグメントの最大数(最小値 4096)
sysctl -a | grep shmmni

# Oopsが発生した場合の挙動(1 意図的にカーネルパニック)
sysctl -a | grep panic_on_oops

# 致命的なシステムエラーで自動再起動するまでの待機時間(秒単位、最小値 10)
sysctl -a | grep "kernel.panic "

# 同時に開けるファイルディスクリプタの最大数(最小値 6815744)
sysctl -a | grep file-max

# 同時に処理できる非同期I/O(AIO)操作の最大数(最小値 1048576)
sysctl -a | grep aio-max-nr

# エフェメラルポート(一時ポート)の範囲(最小: 9000、最大: 65535)
sysctl -a | grep ip_local_port_range

# 受信バッファのデフォルト値(バイト単位、最小値 262144)
sysctl -a | grep rmem_default

# 受信バッファサイズの最大値(バイト単位、最小値 4194304)
sysctl -a | grep rmem_max

# 送信バッファサイズのデフォルト値(バイト単位、最小値 262144)
sysctl -a | grep wmem_default

# 送信バッファサイズの最大値(バイト単位、最小値 1048576)
sysctl -a | grep wmem_max
実行結果
[root@prsdb01 ~]# # セマフォ制御(SEMMSL 250、SEMMNS 32000、SEMOPM 100、SEMMNI 128)
sysctl -a | grep sem
kernel.sem = 32000 1024000000 500 32000
kernel.sem_next_id = -1
[root@prsdb01 ~]#
[root@prsdb01 ~]# # システム全体の共用メモリページ数の上限(ページ単位、shmmax以上)
sysctl -a | grep shmall
kernel.shmall = 18446744073692774399
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 共有メモリセグメントの最大サイズ(バイト、物理メモリーの半分)
sysctl -a | grep shmmax
kernel.shmmax = 18446744073692774399
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 共有メモリーセグメントの最大数(4096)
sysctl -a | grep shmmni
kernel.shmmni = 4096
[root@prsdb01 ~]#
[root@prsdb01 ~]# # Oopsが発生した場合の挙動(1 意図的にカーネルパニック)
sysctl -a | grep panic_on_oops
kernel.panic_on_oops = 1
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 致命的なシステムエラーで自動再起動するまでの待機時間(秒、10)
sysctl -a | grep "kernel.panic "
kernel.panic = 0
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 同時に開けるファイルディスクリプタの最大数(6815744)
sysctl -a | grep file-max
fs.file-max = 9223372036854775807
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 同時に処理できる非同期I/O(AIO)操作の最大数(1048576)
sysctl -a | grep aio-max-nr
fs.aio-max-nr = 65536
[root@prsdb01 ~]#
[root@prsdb01 ~]# # エフェメラルポート(一時ポート)の範囲(最小: 9000、最大: 65535)
sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 受信バッファのデフォルト値(バイト、262144)
sysctl -a | grep rmem_default
net.core.rmem_default = 212992
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 受信バッファサイズの最大値(バイト、4194304)
sysctl -a | grep rmem_max
net.core.rmem_max = 212992
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 送信バッファサイズのデフォルト値(バイト、262144)
sysctl -a | grep wmem_default
net.core.wmem_default = 212992
[root@prsdb01 ~]#
[root@prsdb01 ~]# # 送信バッファサイズの最大値(バイト、1048576)
sysctl -a | grep wmem_max
net.core.wmem_max = 212992
[root@prsdb01 ~]#

コマンドの実行結果を見ると黄色マーカーのパラメータが推奨値を下回っています。また、shmall、shmmaxは推奨値以上ですが物理メモリ以上の値となっています。

shmmaxは物理メモリサイズの半分(バイト数)、shmallは物理メモリサイズの90%(ページ数)で新しい値を算出し、黄色マーカーのパラメータとともに推奨値の範囲内にカーネル・パラメータを変更する設定ファイルを作成します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# shmmaxの値を算出
expr 12 \* 1024 \* 1024 \* 1024 / 2
→ 結果:6442450944

# shmallの値を算出(12GBをバイト換算した結果の 90%をページサイズ4kで除算)
expr 12 \* 1024 \* 1024 \* 1024 \* 9 / 10 / 4096
→ 結果:2831155ページ

# Oracle用カーネル・パラメータ設定ファイル作成
cat > /etc/sysctl.d/97-oracle-database-sysctl.conf <<EOF
kernel.shmall = 2831155
kernel.shmmax = 6442450944
kernel.panic = 10
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF

# 設定ファイルのパラメータ値をシステムに反映
sysctl --system

# カーネル・パラメータ値から変更したパラメータの値を抽出(1行で記述)
sysctl -a | grep -e shmall -e shmmax -e aio-max-nr -e "kernel.panic " -e ip_local_port_range -e [r,w]mem_default -e [r,w]mem_max

設定ファイルの内容がシステムに反映されたことを確認できたら設定ファイルをDBサーバ#2、DBサーバ#3に転送します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
scp /etc/sysctl.d/97-oracle-database-sysctl.conf 172.16.10.32:/etc/sysctl.d/
scp /etc/sysctl.d/97-oracle-database-sysctl.conf 172.16.10.33:/etc/sysctl.d/

DBサーバ#2、DBサーバ#3でパラメータ設定ファイルを適用してカーネル・パラメータを修正します。

【新DBサーバ・prsdb02、prsdb03 / ROOTユーザで実行】
-----------------------------------------------------------------------------
# パラメータ設定ファイルの内容をシステムに反映
sysctl --system

# カーネル・パラメータが変更されたことを確認
sysctl -a | grep -e shmall -e shmmax -e aio-max-nr -e "kernel.panic " -e ip_local_port_range -e [r,w]mem_default -e [r,w]mem_max

ネットワーク設定

DNSによる名前解決の確認

こちらのシステムでは「RACのスキャン・IPアドレスの名前解決をhostsに任せるとGrid Infrastructureのインストールでエラー(無視していいヤツ)が出てウザい」というだけのしょうもない理由で管理サーバ上にDNS(named)を構築しています。

念のためこのDNSに登録されたDBネットワーク上のホスト名について、すべての新DBサーバで名前解決ができることを確認します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
#新DBサーバのホスト名に対して名前解決を確認
nslookup prsdb01.exsample.lan
→ 192.168.30.21が返されること

nslookup prsdb02.exsample.lan
→ 192.168.30.22が返されること

nslookup prsdb03.exsample.lan
→ 192.168.30.23が返されること

# Oracle 26ai RAC環境のSCANに対して名前解決を確認
→ 192.168.30.121、192.168.30.122、192.168.30.123が返されること

# 新DBサーバ間のping疎通確認
ping -c 1 prsdb01.exsample.lan
ping -c 1 prsdb02.exsample.lan
ping -c 1 prsdb03.exsample.lan
→ すべて疎通OKとなること

# 新DBサーバのSCANにたいするping疎通確認
ping -c 1 prsscan.exsample.lan
→ エラーが返されること(現時点でSCANは本番用のDBネットワークにしか存在しない)

hosts設定

新DBサーバ#1のhostsファイルを編集します。hostsファイルに設定するアドレス情報は以下の通りです。

【hostsファイル設定内容】

ネットワークN/Wアドレスホスト名ホスト名(short)IPアドレス用途
管理ネットワーク172.16.10.0/24管理サーバ#1
管理サーバ#2
DBサーバ#1
DBサーバ#2
DBサーバ#3
prsmg01
prsmg02
prsdb01-mgt
prsdb02-mgt
prsdb03-mgt
172.16.10.11
172.16.10.12
172.16.10.21
172.16.10.22
172.16.10.23
サーバ管理用IPアドレス
DBネットワーク
(パブリックN/W)
192.168.30.0/24DBサーバ#1
DBサーバ#2
DBサーバ#3
prsdb01
prsdb02
prsdb03
192.168.10.21
192.168.10.22
192.168.10.23
DBサーバ・IPアドレス
DBネットワーク
(パブリックN/W)
192.168.30.0/24DBサーバ#1
DBサーバ#2
DBサーバ#3
prsdb01-vip
prsdb02-vip
prsdb03-vip
192.168.10.31
192.168.10.32
192.168.10.33
Oracle RAC用VIP
(DB接続用)
DBネットワーク
(パブリックN/W)
192.168.30.0/24SCANprsscan192.168.30.121
192.168.30.122
192.168.30.123
SCAN/IPアドレス
インターコネクト
(プライベートN/W)
10.10.21.0/24DBサーバ#1
DBサーバ#2
DBサーバ#3
DBサーバ#1-prv
DBサーバ#2-prv
DBサーバ#3-prv
10.10.21.1
10.10.21.2
10.10.21.3
インターコネクト用IPアドレス
(ノード間通信)
【新DBサーバ・hostsファイル】
-----------------------------------------------------------------------------
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.10.10 prsmg00.exsample.lan prsmg00
172.16.10.11 prsmg01.exsample.lan prsmg01
172.16.10.12 prsmg02.exsample.lan prsmg02
172.16.10.21 prsdb01-mgt.exsample.lan prsdb01-mgt
172.16.10.22 prsdb02-mgt.exsample.lan prsdb02-mgt
172.16.10.23 prsdb03-mgt.exsample.lan prsdb03-mgt

192.168.30.21 prsdb01.exsample.lan prsdb01
192.168.30.22 prsdb02.exsample.lan prsdb02
192.168.30.23 prsdb03.exsample.lan prsdb03

192.168.30.31 prsdb01-vip.exsample.lan prsdb01-vip
192.168.30.32 prsdb02-vip.exsample.lan prsdb02-vip
192.168.30.33 prsdb03-vip.exsample.lan prsdb03-vip

192.168.30.121 prsscan.exsample.lan prsscan
192.168.30.122 prsscan.exsample.lan prsscan
192.168.30.123 prsscan.exsample.lan prsscan

10.10.21.1 prsdb01-prv.exsample.lan prsdb01-prv
10.10.21.2 prsdb02-prv.exsample.lan prsdb02-prv
10.10.21.3 prsdb03-prv.exsample.lan prsdb03-prv

新DBサーバのhostsファイルは基本的に現行DBサーバと同じ内容です。ただしプライベート・ネットワーク(インターコネクト)は現行DBサーバのネットワーク・アドレス(10.10.20.0)ではなく新DBサーバ用として新規に割り当てたネットワーク・アドレス(10.10.21.0)となっています。

また、新DBサーバの管理ネットワークに対して現在設定されているIPアドレスは構築用の一時的なアドレスです。構築完了後に現行DBサーバのIPアドレスと切り替える予定なのでhostsファイルにはそちらのIPアドレスを設定しています。

構築期間中、管理ネットワークを使用して別のDBサーバとやり取りする場合はホスト名ではなくIPアドレスを使用します。

新DBサーバ#1でhostsファイルの編集が終わったらそれを新DBサーバ#2、新DBサーバ#3に配布します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# hostsファイルを編集
vi /etc/hosts

# DBサーバ#2、DBサーバ#3にhosts配布
scp /etc/hosts 172.16.10.32:/etc/
scp /etc/hosts 172.16.10.33:/etc/

ファイアウォール設定

ファイアウォール設定(DBサーバ内部及びVNC Viewer接続用)

現行DBサーバ(Oracle 21c)のDBネットワーク(パブリック・ネットワーク)は管理ネットワークとともにpublic zoneで管理していましたが新DBサーバ(Oracle 26ai)では専用のzoneで管理します。

すべての新DBサーバのfirewalldにdbzoneを追加、DBネットワーク用のインターフェースをそこに移動してからDBの通信に必要なアクセス許可を設定します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# DBネットワーク用のzoneを追加
firewall-cmd --new-zone dbzone --permanent

# DBネットワーク用インターフェースをzoneに移動
firewall-cmd --change-interface=ens224 --zone=dbzone --permanent

# サービス許可(ssh)
firewall-cmd --add-service=ssh --zone=dbzone --permanent

# mDNSのマルチキャストを許可
firewall-cmd --add-port=5353/udp --zone=dbzone --permanent


# DBサーバ(実IP)間のアクセスを許可 ※firewall-cmd ... --permanentまで1行で記述
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.21" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.22" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.23" accept' --zone=dbzone --permanent


# DBサーバ(VIP)間のアクセスを許可 ※firewall-cmd ... --permanentまで1行で記述
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.31" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.32" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.33" accept' --zone=dbzone --permanent

# SCANによるアクセスを許可 ※firewall-cmd ... --permanentまで1行で記述
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.121" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.122" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.123" accept' --zone=dbzone --permanent


# APサーバからのDBアクセスを許可 ※firewall-cmd ... --permanentまで1行で記述
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.51" port port="1521" protocol="tcp" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.52" port port="1521" protocol="tcp" accept' --zone=dbzone --permanent


# APサーバからのONSアクセスを許可 ※firewall-cmd ... --permanentまで1行で記述
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.51" port port="6200" protocol="tcp" accept' --zone=dbzone --permanent

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.52" port port="6200" protocol="tcp" accept' --zone=dbzone --permanent

# ファイアウォールの設定をリロード
firewall-cmd --reload

# dbzoneの内容を確認
firewall-cmd --list-all --zone=dbzone
dbzoneの設定内容(クリックで表示)
[root@prsdb03 ~]# firewall-cmd --list-all --zone=dbzone
dbzone (active)
target: default
icmp-block-inversion: no
interfaces: ens224
sources:
services: ssh
ports: 5353/udp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.30.51" port port="6200" protocol="tcp" accept
rule family="ipv4" source address="192.168.30.121" accept
rule family="ipv4" source address="192.168.30.23" accept
rule family="ipv4" source address="192.168.30.32" accept
rule family="ipv4" source address="192.168.30.52" port port="6200" protocol="tcp" accept
rule family="ipv4" source address="192.168.30.31" accept
rule family="ipv4" source address="192.168.30.51" port port="1521" protocol="tcp" accept
rule family="ipv4" source address="192.168.30.22" accept
rule family="ipv4" source address="192.168.30.123" accept
rule family="ipv4" source address="192.168.30.52" port port="1521" protocol="tcp" accept
rule family="ipv4" source address="192.168.30.122" accept
rule family="ipv4" source address="192.168.30.33" accept
rule family="ipv4" source address="192.168.30.21" accept
[root@prsdb03 ~]

インターコネクトはインターフェース・レベルですべてのアクセスを許可します。対象インターフェースをtrusted zoneに移動します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# DBサーバ#1からのアクセス許可
firewall-cmd --change-interface=ens256 --zone=trusted --permanent

# インターコネクト用のインターフェース(ens256)がtrusted zoneに移動したことを確認
firewall-cmd --list-all --zone=trusted

Oracle製品のインストールはPCからVNCでDBサーバに接続して実行します。管理ネットワークが所属するpublic zoneに対し、ESXi外部(つまり私の室内)のネットワークからVNCの接続ポート(5901/tcp)へのアクセスを許可します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# ESXi外部のネットワークから5901ポートへのTCP接続を許可 ※--permanentまで1行で記述
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.11.0/24" port port="5901" protocol="tcp" accept' --permanent

# ファイアウォールの設定をリロード
firewall-cmd --reload

# publicの内容を確認
firewall-cmd --list-all

Grid/Oracleユーザ設定

Grid/Oracleユーザ追加

Grid Infrastructure及びOracle Database用のグループ、ユーザを新DBサーバに追加、umaskを022に設定します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# Grid Infrastructure及びOracle Database用のグループを追加
groupadd -g 1100 oinstall
groupadd -g 1101 asmadmin
groupadd -g 1102 asmdba
groupadd -g 1103 racdba
groupadd -g 1104 dba

# Grid Infrastructure及びOracle Database用のユーザを追加
useradd -g oinstall -G asmadmin,asmdba,racdba,dba -u 1100 grid
useradd -g oinstall -G asmdba,racdba,dba -u 1101 oracle

# gridユーザ及びoracleユーザのパスワード設定
passwd grid
passwd oracle

# gridユーザ及びoracleユーザのUMASK設定
echo "umask 022" >> /home/grid/.bash_profile
echo "umask 022" >> /home/oracle/.bash_profile

# UMASK設定確認
su - grid -c "umask"
su - oracle -c "umask"

リソース制限設定

Grid Infrastructureインストレーション・ガイド「Oracleソフトウェア・インストール・ユーザーのリソース制限の確認」に従って新DBサーバ#1でOracleユーザの現在のリソース・リミットを確認します。

【インストレーション・ガイドのリソース制限に関する推奨範囲】

リソース・シェル制限リソースソフト制限ハード制限
オープン・ファイル記述子数nofile1024以上65536以上
単一ユーザーが使用可能なプロセス数nproc2047以上16384以上
プロセスのスタック・セグメントのサイズstack10240KB以上10240KB以上、32768KB以下
ロックされたメモリーの最大上限memlockHugePagesメモリーを有効にする場合は現在のRAMの90%以上、HugePagesメモリーを無効にする場合は、3145728 KB (3 GB)以上。HugePagesメモリーを有効にする場合は現在のRAMの90%以上、HugePagesメモリーを無効にする場合は、3145728 KB (3 GB)以上。
【新DBサーバ・prsdb01で実行 / rootユーザで実行】
-----------------------------------------------------------------------------
# gridユーザのリソース・リミット(soft)を確認
su - grid -c 'ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"'

# gridユーザのリソース・リミット(hard)を確認
su - grid -c 'ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"'
リソース・リミット確認結果(クリックで表示)
[root@prsdb01 ~]# su - grid -c 'ulimit -aS | grep -e "open files" -e "max user p
rocesses" -e "stack size" -e "max locked memory"'
max locked memory (kbytes, -l) 8192
open files (-n) 1024
stack size (kbytes, -s) 8192
max user processes (-u) 46544
[root@prsdb01 ~]# su - grid -c 'ulimit -aH | grep -e "open files" -e "max user p
rocesses" -e "stack size" -e "max locked memory"'
max locked memory (kbytes, -l) 8192
open files (-n) 524288
stack size (kbytes, -s) unlimited
max user processes (-u) 46544
[root@prsdb01 ~]#

リソース・リミットの確認結果を見るとmax locked memory(memlock)とstack size(stack)がsoft、hardの両方でインストレーション・ガイドの推奨範囲から外れてしまっています。limits.confを編集してこの2つのリソースを推奨範囲内に収めます。

なお、DBのSGAにはHugePagesを使用するのでmemlockの推奨値はRAMの90%以上です。実機のRAMサイズは12GBなのでその90&をキロバイトに直すとこんな感じです。

memlockの推奨値 = RAMサイズ 12(GB) x 1024 x 1024 x 0.9 = 11,324,620.8 =11,324,621

ただ、Geminiさんによると「memlockはRAMサイズの90%以上」というのはHugePagesの設定を誤って過大なページ(実メモリ以上とか)を割り当ててしまった場合の予防ということなので現行DBサーバ同様、新DBでもmemlockの制限はunlimitedで行こうと思います。

/etc/security/limits.confをエディタで開いて”End of file”行の手前にGrid及びOracleユーザのリソース制限(以下のリスト)を設定します。

【Grid及びOracleユーザののリソース制限】

oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock unlimited
oracle hard memlock unlimited
grid soft stack 10240
grid hard stack 32768
grid soft memlock unlimited
grid hard memlock unlimited
【新DBサーバ・prsdb01で実行 / rootユーザで実行】
-----------------------------------------------------------------------------
# リソース制限設定を追記
vi /etc/security/limits.conf

# 設定変更を確認
# gridユーザのリソース・リミット(soft)を確認
su - grid -c 'ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"'

# gridユーザのリソース・リミット(hard)を確認
su - grid -c 'ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"'

# oracleユーザのリソース・リミット(soft)を確認
su - oracle -c 'ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"'

# oracleユーザのリソース・リミット(hard)を確認
su - oracle -c 'ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"'

設定変更の結果を確認したらlimits.confを新DBサーバ#2、新DBサーバ#3に転送します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
scp /etc/security/limits.conf prsdb02:/etc/security/
scp /etc/security/limits.conf prsdb03:/etc/security/

udev設定

通常、ディスク・デバイス(/dev/sd*)の所有者:グループはroot:diskです。

ASMディスクの所有者はgridユーザとなっている必要がありますが、chownでディスク・デバイスの所有者を変更してもDBサーバを再起動するとroot:diskの所有に戻ってしまうため、udevを使ってgridの所有に固定します。

DBサーバ#1でASMディスクのWWNを取得します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# WWN取得(ls~doneまで1行で記述)
ls /dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:?:0 | while read DEVPATH ; do /lib/udev/scsi_id --whitelisted --device=${DEVPATH};done

ASMディスク用のudevルールファイルを作成します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
vi /etc/udev/rules.d/99-oracle-asmdevices.rules

-----------------------------------------------------------------------------
【設定内容】
-----------------------------------------------------------------------------
# ディスク・デバイスの所有者設定(KERNEL~"none"まで1行、各ASMディスクごとに記述)
KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="<取得したWWN>", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

# マルチパスデバイスの所有者設定(ディスク・デバイス設定後、最後に1行のみ記述)
KERNEL=="dm-*", ENV{DM_NAME}=="asmd*", ACTION=="add|change", OWNER="grid", GROUP="asmdba", MODE="0660"

※ASMディスク・デバイス及びマルチパス・デバイスの所有グループをasmadminからasmdbaに修正(詳細は修正履歴参照)

99-oracle-asmdevices.rules(クリックで表示)
KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c298cf55aaf4e043348caecf835d", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c296f2e0b0b31429a797906c22fe", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c29e0b73f4c63442ad55988c1b2c", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c29459a8bfa5edcd70fcb75a20d3", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c2925a3a530d645e541fb7959614", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c29e5635430624a6469a31612b71", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c2943ad9f11eb5ba4da5d1899fb1", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c29567593171173ca47b7b684594", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c2989426747993380896c92e9a25", OWNER="grid", GROUP="asmdba", MODE="0660", ATTR{queue/scheduler}="none"

KERNEL=="dm-*", ENV{DM_NAME}=="asmd*", ACTION=="add|change", OWNER="grid", GROUP="asmdba", MODE="0660"

ASMディスク用のudevルールを適用してASMディスクがgrid(asmadmin)の所有となったことを確認します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# ASMディスクのデバイス名を確認
readlink /dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:?:0
ls -l /dev/mapper/asmd*

# 現在の設定を確認
ls -l /dev/sd?
ls -l /dev/dm-*

# udevルールを適用
udevadm control --reload-rules
udevadm trigger

# ルール適用後の設定を確認
ls -l /dev/sd?
ls -l /dev/dm-*
cat /sys/block/sd[c-z]/queue/scheduler
ルール適用実行結果(クリックで表示)
[root@prsdb01 ~]# readlink /dev/disk/by-path/pci-0000:04:00.0-scsi-0:0:?:0
../../sdc    -> /dev/sdcから/dev/sdkまでがASMディスクのデバイス名
../../sdd
../../sde
../../sdg
../../sdh
../../sdj
../../sdk
../../sdf
../../sdi
[root@prsdb01 ~]# ls -l /dev/sd?
brw-rw---- 1 root disk 8, 0 7月 4 08:59 /dev/sda
brw-rw---- 1 root disk 8, 16 7月 4 08:59 /dev/sdb
brw-rw---- 1 root disk 8, 32 7月 4 08:59 /dev/sdc
brw-rw---- 1 root disk 8, 48 7月 4 08:59 /dev/sdd
brw-rw---- 1 root disk 8, 64 7月 4 08:59 /dev/sde
brw-rw---- 1 root disk 8, 80 7月 4 08:59 /dev/sdf
brw-rw---- 1 root disk 8, 96 7月 4 08:59 /dev/sdg
brw-rw---- 1 root disk 8, 112 7月 4 08:59 /dev/sdh
brw-rw---- 1 root disk 8, 128 7月 4 08:59 /dev/sdi
brw-rw---- 1 root disk 8, 144 7月 4 08:59 /dev/sdj
brw-rw---- 1 root disk 8, 160 7月 4 08:59 /dev/sdk
[root@prsdb01 ~]# ls -l /dev/dm-*
brw-rw---- 1 root disk 253, 0 7月 4 08:59 /dev/dm-0
brw-rw---- 1 root disk 253, 1 7月 4 08:59 /dev/dm-1
brw-rw---- 1 root disk 253, 10 7月 4 08:59 /dev/dm-10
brw-rw---- 1 root disk 253, 11 7月 4 08:59 /dev/dm-11
brw-rw---- 1 root disk 253, 12 7月 4 08:59 /dev/dm-12
brw-rw---- 1 root disk 253, 2 7月 4 08:59 /dev/dm-2
brw-rw---- 1 root disk 253, 3 7月 4 08:59 /dev/dm-3
brw-rw---- 1 root disk 253, 4 7月 4 08:59 /dev/dm-4
brw-rw---- 1 root disk 253, 5 7月 4 08:59 /dev/dm-5
brw-rw---- 1 root disk 253, 6 7月 4 08:59 /dev/dm-6
brw-rw---- 1 root disk 253, 7 7月 4 08:59 /dev/dm-7
brw-rw---- 1 root disk 253, 8 7月 4 08:59 /dev/dm-8
brw-rw---- 1 root disk 253, 9 7月 4 08:59 /dev/dm-9
[root@prsdb01 ~]# udevadm control --reload-rules
[root@prsdb01 ~]# udevadm trigger
[root@prsdb01 ~]# ls -l /dev/sd?
brw-rw---- 1 root disk 8, 0 7月 7 01:07 /dev/sda
brw-rw---- 1 root disk 8, 16 7月 7 01:07 /dev/sdb
brw-rw---- 1 grid asmdba 8, 32 7月 7 01:07 /dev/sdc
brw-rw---- 1 grid asmdba 8, 48 7月 7 01:07 /dev/sdd
brw-rw---- 1 grid asmdba 8, 64 7月 7 01:07 /dev/sde
brw-rw---- 1 grid asmdba 8, 80 7月 7 01:07 /dev/sdf
brw-rw---- 1 grid asmdba 8, 96 7月 7 01:07 /dev/sdg
brw-rw---- 1 grid asmdba 8, 112 7月 7 01:07 /dev/sdh
brw-rw---- 1 grid asmdba 8, 128 7月 7 01:07 /dev/sdi
brw-rw---- 1 grid asmdba 8, 144 7月 7 01:07 /dev/sdj
brw-rw---- 1 grid asmdba 8, 160 7月 7 01:07 /dev/sdk

[root@prsdb01 ~]# ls -l /dev/dm-*
brw-rw---- 1 root disk 253, 0 7月 7 01:07 /dev/dm-0
brw-rw---- 1 root disk 253, 1 7月 7 01:07 /dev/dm-1
brw-rw---- 1 grid asmdba 253, 10 7月 7 01:07 /dev/dm-10
brw-rw---- 1 grid asmdba 253, 11 7月 7 01:07 /dev/dm-11
brw-rw---- 1 grid asmdba 253, 12 7月 7 01:07 /dev/dm-12

brw-rw---- 1 root disk 253, 2 7月 7 01:07 /dev/dm-2
brw-rw---- 1 root disk 253, 3 7月 7 01:07 /dev/dm-3
brw-rw---- 1 grid asmdba 253, 4 7月 7 01:07 /dev/dm-4
brw-rw---- 1 grid asmdba 253, 5 7月 7 01:07 /dev/dm-5
brw-rw---- 1 grid asmdba 253, 6 7月 7 01:07 /dev/dm-6
brw-rw---- 1 grid asmdba 253, 7 7月 7 01:07 /dev/dm-7
brw-rw---- 1 grid asmdba 253, 8 7月 7 01:07 /dev/dm-8
brw-rw---- 1 grid asmdba 253, 9 7月 7 01:07 /dev/dm-9

[root@prsdb01 ~]# cat /sys/block/sd*/queue/scheduler
none [mq-deadline] kyber bfq
none [mq-deadline] kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq
[none] mq-deadline kyber bfq

[root@prsdb01 ~]#

新DBサーバ#1で作成したルールファイルを新DBサーバ#2、新DBサーバ#3に転送して適用します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
scp /etc/udev/rules.d/99-oracle-asmdevices.rules 172.16.10.32:/etc/udev/rules.d/
scp /etc/udev/rules.d/99-oracle-asmdevices.rules 172.16.10.33:/etc/udev/rules.d/

-----------------------------------------------------------------------------
【新DBサーバ・prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
# ルールを適用
udevadm control --reload-rules
udevadm trigger

# ルール適用後の設定を確認
ls -l /dev/sd?
ls -l /dev/dm-*
cat /sys/block/sd*/queue/scheduler

インストール・ディレクトリ作成

新DBサーバにGrid Infrastructureのベース・ディレクトリ、インストール・ディレクトリ、Oracle Databaseのベース・ディレクトリ作成します。

【新DBサーバ・prsdb01、prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
mkdir -p /opt/app/grid
mkdir -p /opt/app/26.0.0/grid
mkdir /opt/app/oracle
mkdir /opt/app/oraInventory

chown grid:oinstall /opt/app/grid
chown -R grid:oinstall /opt/app/26.0.0
chown oracle:oinstall /opt/app/oracle/
chown -R grid:oinstall /opt/app/oraInventory/

Grid Infrastructureのインストール準備はこれで一通り完了です。次はGrid Infrastructureのインストール及び構成を行います。

DBサーバ構築(Oracle 26ai)・関連ページ
DBサーバ構築、Oracle 26ai(1)概要
DBサーバ構築、Oracle 26ai(2)OS、N/W、ストレージ
DBサーバ構築、Oracle 26ai(3)Gridインストール1

メニュー

トップページ

3層Webシステム | バカメのとなり

自己紹介

タイトルの由来と自己紹介 | バカメのとなり

ぎゃらりい | バカメのとなり

参考情報

Grid Infrastructureインストレーションおよびアップグレード・ガイド 26ai for Linux

Oracle AI Database インストレーション・ガイド 26ai for Linux

修正履歴

2026/7/7

udev設定」のudevルールファイルでASMディスク・デバイスとマルチパス・デバイスの所有者をasmadminからasmdbaに修正しました。「Oracle VM VirtualBox を用いた Oracle Real Application
Clusters (RAC) 12c Release 1 環境の構築
」や11gの同じようなドキュメントだとASMディスクの所有グループはasmadminだったんで私はずっとそれでやってきたんですがOracle 26ai のGrid InfrastructureのインストールではASMディスクのグループが「Oracle ASM DBA(ASMのOSDBA)グループ」じゃないと事前チェックで引っかかってしまいます。投稿3日後にはやくも修正とは…

コメント

タイトルとURLをコピーしました