DBサーバ構築(Oracle製品インストール環境設定)
ローカル・リポジトリ設定
管理サーバのDVDマウント用シェルとローカル・リポジトリ用repoファイルを各DBサーバに配布します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# 管理サーバ#1からDVDマウント用シェルを取得
scp 172.16.10.11:/usr/local/bin/* /usr/local/bin
# 管理サーバ#1からローカル・リポジトリ用repoファイルを取得
scp 172.16.10.11:/etc/yum.repos.d/RHEL-DVD.repo /etc/yum.repos.d/
# DVDマウント用シェルをDBサーバ#2へ配布
scp /usr/local/bin/dvdmount 172.16.10.22:/usr/local/bin/
# DVDマウント用シェルをDBサーバ#3へ配布
scp /usr/local/bin/dvdmount 172.16.10.23:/usr/local/bin/
# ローカル・リポジトリ用repoファイルをDBサーバ#2へ配布
scp /etc/yum.repos.d/RHEL-DVD.repo 172.16.10.22:/etc/yum.repos.d/
# ローカル・リポジトリ用repoファイルをDBサーバ#3へ配布
scp /etc/yum.repos.d/RHEL-DVD.repo 172.16.10.23:/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
【prsdb01で実行】
-----------------------------------------------------------------------------
# メディア用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.22:/usr/local/bin/
scp /usr/local/bin/md*mount 172.16.10.23:/usr/local/bin/
パッケージ・インストール
Grid Infrastructureインストレーションガイド「x86-64でサポートされているRed Hat Enterprise Linux 8のディストリビューション」のパッケージ一覧をベースにパッケージ・リストを作成します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# RHEL8 必要パッケージ要件リスト作成
cat > /tmp/ora_pkg.lst <<EOF
bc
binutils
compat-openssl10
elfutils-libelf
glibc
glibc-devel
ksh
libaio
libXrender
libX11
libXau
libXi
libXtst
libgcc
libnsl
libstdc++
libxcb
libibverbs
make
policycoreutils
policycoreutils-python-utils
smartmontools
sysstat
EOF
パッケージ・リストを現在インストールされているパッケージと突合して不足パッケージのインストール用コマンドを生成します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# 不足パッケージ追加インストール用コマンド生成(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-openssl10 ksh libnsl
[root@prsdb01 ~]#
生成されたコマンドで各DBサーバに追加パッケージをインストールします。
【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# インストール・メディアをマウント
dvdmount
# 追加パッケージをインストール
dnf -y install compat-openssl10 ksh libnsl
# GUI操作用にtigervnc-serverも一緒にインストール
dnf -y install tigervnc-server
クロック・ソース設定の確認
Grid Infrastructureインストレーションガイド「Linux x86-64でのVMのクロック・ソースの設定」では仮想環境(VM)のパフォーマンスを向上させるためにクロック・ソースをtsc(Time Stamp Counter)に設定することを推奨しています。
「仮想環境(VM)のパフォーマンスを向上させるため」なんて書かれているので仮想環境向けの推奨っぽい感じを請けますがDBサーバがベアメタル(物理サーバ)だとしてもこの推奨は有効です(by Geminiさん)。
現在のクロック・ソース設定を確認します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# 使用可能なクロック・ソースを確認
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の設定
※このセクションはOracle 21c Grid Infrastructureインストレーションおよびアップグレード・ガイド最新版の設定内容を元に2026/6/26に修正しました。
Grid Infrastructureインストレーションガイド「透過的なHugePagesをmadviseに設定」ではお題の通り透過的HugePagesをmadvise(要求されたら割り当て)に設定することを推奨しています*。
/etc/default/grubを開き、GRUB_CMDLINE_LINUXに”transparent_hugepage=madvise”を追加してからgrub.cfgを再生成します。
【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# 現在の透過的HugePages設定を確認
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
# サーバ再起動
reboot
# 現在の透過的HugePages設定を確認(madviseが選択されていることを確認)
cat /sys/kernel/mm/transparent_hugepage/enabled
-----------------------------------------------------------------------------
【/etc/default/grub編集内容】
-----------------------------------------------------------------------------
【編集箇所】※赤字部分を追記
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/root_vg-swap rd.lvm.lv=root_vg/root rd.lvm.lv=root_vg/swap rhgb quiet"
↓
GRUB_CMDLINE_LINUX="crashkernel=auto 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スケジューラの確認
※このセクションはOracle 21c Grid Infrastructureインストレーションおよびアップグレード・ガイド最新版の設定内容を元に2026/6/26に修正しました。
Grid Infrastructureインストレーションガイド「Linux 7システムでのディスクI/Oスケジューラの検証」に従ってASMディスクのI/Oスケジューラの設定を確認します。
【prsdb01で実行】
-----------------------------------------------------------------------------
cat /sys/block/sd[c-z]/queue/scheduler
-----------------------------------------------------------------------------
【実行結果】
-----------------------------------------------------------------------------
[root@prsdb01 ~]# cat /sys/block/sd[c-z]/queue/scheduler
[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
[root@prsdb01 ~]#
現在の設定はmq-deadline(従来のシングルキュー deadlineのマルチ版)です。
Oracle 21cのGrid Infrastructureインストレーション・ガイドには「一般的に…回転ストレージ・デバイス(HDD)の場合はI/Oスケジューラをdeadlineに設定し、SSDやNVMeなどの非回転ストレージ・デバイスの場合はnoneに設定」とあります。
こちらの環境は仮想ディスクはSCSI接続ですがデータストアは内蔵SSD、建前的にも仮想ディスクはオールフラッシュ・ストレージとしているので”none”を設定した方が良さげです。
ディスクI/Oスケジューラの設定は後でASMディスクの所有者やパーミッションと一緒にUDEVで設定します。ここはひとまず現状が確認なので次の「カーネル・パラメータの設定」に進みます。
カーネル・パラメータの設定
Grid Infrastructureインストレーション・ガイド「インストールのための最小パラメータ設定」に従いカーネル・パラメータを設定します。
まず、DBサーバ#1で現在のパラメータ値を確認します。
【prsdb01で実行】
-----------------------------------------------------------------------------
sysctl -a | grep sem
sysctl -a | grep shmall
sysctl -a | grep shmmax
sysctl -a | grep shmmni
sysctl -a | grep panic_on_oops
sysctl -a | grep file-max
sysctl -a | grep aio-max-nr
sysctl -a | grep ip_local_port_range
sysctl -a | grep rmem_default
sysctl -a | grep rmem_max
sysctl -a | grep wmem_default
sysctl -a | grep wmem_max
実行結果
[root@prsdb01 ~]# sysctl -a | grep sem
kernel.sem = 32000 1024000000 500 32000
kernel.sem_next_id = -1
[root@prsdb01 ~]# sysctl -a | grep shmall
kernel.shmall = 18446744073692774399
[root@prsdb01 ~]# sysctl -a | grep shmmax
kernel.shmmax = 18446744073692774399
[root@prsdb01 ~]# sysctl -a | grep shmmni
kernel.shmmni = 4096
[root@prsdb01 ~]# sysctl -a | grep panic_on_oops
kernel.panic_on_oops = 1
[root@prsdb01 ~]# sysctl -a | grep file-max
fs.file-max = 1190694
[root@prsdb01 ~]# sysctl -a | grep aio-max-nr
fs.aio-max-nr = 1048576
[root@prsdb01 ~]# sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
[root@prsdb01 ~]# sysctl -a | grep rmem_default
net.core.rmem_default = 212992
[root@prsdb01 ~]# sysctl -a | grep rmem_max
net.core.rmem_max = 212992
[root@prsdb01 ~]# sysctl -a | grep wmem_default
net.core.wmem_default = 212992
[root@prsdb01 ~]# sysctl -a | grep wmem_max
net.core.wmem_max = 212992
[root@prsdb01 ~]#
コマンドの実行結果を見ると黄色マーカーのパラメータが推奨値を下回っています。また、shmall、shmmaxは推奨値以上ですが物理メモリ以上の値となっています。
shmmaxは物理メモリサイズの半分(バイト数)、shmallは物理メモリサイズの90%(ページ数)で新しい値を算出し、黄色マーカーのパラメータとともに推奨値の範囲内にカーネル・パラメータを変更する設定ファイルを作成します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# shmmaxの値を算出
expr 12 \* 1024 \* 1024 \* 1024 / 2
→ 結果:6442450944
# shmallの値を算出
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
fs.file-max = 6815744
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
# カーネル・パラメータ値から変更したパラメータの値を抽出
sysctl -a | grep -e shmall -e shmmax -e file-max -e ip_local_port_range -e [r,w]mem_default -e [r,w]mem_max
設定ファイルの内容がシステムに反映されたことを確認できたら設定ファイルをDBサーバ#2、DBサーバ#3に転送します。
【prsdb01で実行】
-----------------------------------------------------------------------------
scp /etc/sysctl.d/97-oracle-database-sysctl.conf 172.16.10.22:/etc/sysctl.d/
scp /etc/sysctl.d/97-oracle-database-sysctl.conf 172.16.10.23:/etc/sysctl.d/
DBサーバ#2、DBサーバ#3でパラメータ設定ファイルを適用してカーネル・パラメータを修正します。
【prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# パラメータ設定ファイルの内容をシステムに反映
sysctl --system
# カーネル・パラメータが変更されたことを確認
sysctl -a | grep -e shmall -e shmmax -e file-max -e ip_local_port_range -e [r,w]mem_default -e [r,w]mem_max
DNS/hosts設定
DNS設定
管理サーバ#1のnamedにスキャン・アドレスとDBサーバのアドレスを登録します。
/etc/named.conf
# 10.16.172.in-addr.arpaゾーン定義の次に以下のゾーン定義を挿入
zone "30.168.192.in-addr.arpa" IN {
type master;
file "30.168.192.in-addr.arpa.rev";
};
/var/named/exsample.foward.db
# シリアル値を編集日時に修正
2025051000 ; Serial
# 以下のAレコードを追加
prsdb01 IN A 192.168.30.21
prsdb02 IN A 192.168.30.22
prsdb03 IN A 192.168.30.23
prsscan IN A 192.168.30.121
prsscan IN A 192.168.30.122
prsscan IN A 192.168.30.123
/var/named/30.168.192.in-addr.arpa.rev
$TTL 86400
@ IN SOA prsmg01.exsample.lan.zone. root.exsample.lan.zone.(
2025051000 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; MinimumA TTL
)
IN NS prsmg01.exsample.lan.
IN NS prsmg02.exsample.lan.
121 IN PTR prsscan.exsample.lan.
122 IN PTR prsscan.exsample.lan.
123 IN PTR prsscan.exsample.lan.
21 IN PTR prsdb01.exsample.lan.
22 IN PTR prsdb02.exsample.lan.
23 IN PTR prsdb03.exsample.lan.
【prsmg01で実行】
-----------------------------------------------------------------------------
# DBサーバ用ネットワークの逆引きゾーンを追記
vi /etc/named.conf
# 正引きのゾーン・ファイルにスキャン・アドレスとDBサーバのアドレスを追記
vi /var/named/exsample.foward.db
# DBサーバ用ネットワークの逆引きゾーン・ファイルを作成
vi /var/named/30.168.192.in-addr.arpa.rev
編集内容をチェックして問題がなければnamed-chrootの再起動と名前解決の確認を行います。
【prsmg01で実行】
-----------------------------------------------------------------------------
# named.confのチェック
named-checkconf
# exsample.foward.dbのチェック
named-checkzone exsample.lan /var/named/exsample.foward.db
# 30.168.192.in-addr.arpa.revのチェック
named-checkzone 30.168.192.in-addr.arpa /var/named/30.168.192.in-addr.arpa.rev
# named-chroot再起動
systemctl restart named-chroot.service
# スキャン・アドレスの名前解決を確認
nslookup prsscan.exsample.lan
nslookup 192.168.30.121
# DBサーバの名前解決を確認
nslookup prsdb04
nslookup prsdb02
nslookup prsdb03
管理サーバ#2のnamed.confにDBサーバ用ネットワークの逆引きゾーンを追記します。
【prsmg02で実行】
-----------------------------------------------------------------------------
vi /etc/named.conf
-----------------------------------------------------------------------------
【named.conf編集内容】
-----------------------------------------------------------------------------
# 10.16.172.in-addr.arpaゾーン定義の次に以下のゾーン定義を挿入
zone "30.168.192.in-addr.arpa" IN {
type slave;
file "30.168.192.in-addr.arpa.slv.rev";
masters {
172.16.10.11;
};
};
管理サーバ#2のnamed-chrootを再起動して管理サーバ#1の変更が反映されていることを確認します。
【prsmg02で実行】
-----------------------------------------------------------------------------
# named-chrootを再起動
systemctl restart named-chroot.service
# MASTERの定義を反映します
rndc retransfer exsample.lan
# 正引きゾーン・ファイルのAレコード追加を確認
named-compilezone -f raw -F text -o - exsample.lan /var/named/exsample.foward.slv.db
# DBサーバ用ネットワークの逆引きゾーン情報確認
named-compilezone -f raw -F text -o - 30.168.192.in-addr.arpa. /var/named/30.168.192.in-addr.arpa.slv.rev
hosts設定
DBサーバ#1のhostsにOracle RACで使用するホスト情報を記述してDBサーバ#2、DBサーバ#3に配布します。
/etc/hots
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.20.1 prsdb01-prv.exsample.lan prsdb01-prv
10.10.20.2 prsdb02-prv.exsample.lan prsdb02-prv
10.10.20.3 prsdb03-prv.exsample.lan prsdb03-prv
【prsdb01で実行】
-----------------------------------------------------------------------------
# Oracle RAC用ホスト情報をhostsに追記
vi /etc/hosts
# hostsによる名前解決確認
ping -c 1 prsdb01.exsample.lan
ping -c 1 prsdb02.exsample.lan
ping -c 1 prsdb03.exsample.lan
ping -c 1 prsdb01-prv.exsample.lan
ping -c 1 prsdb02-prv.exsample.lan
ping -c 1 prsdb03-prv.exsample.lan
# DBサーバ#2、DBサーバ#3にhosts配布
scp /etc/hosts prsdb02:/etc/
scp /etc/hosts prsdb03:/etc/
ファイアウォール設定
ファイアウォール設定(DBサーバ内部及びVNC Viewer接続用)
DBサーバ間の通信はすべて許可するようにfirewalldを設定します。まず、各サーバ間でホスト・アドレス、仮想IPアドレスのアクセスを相互に許可します。
【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# DBサーバ#1からのアクセス許可
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.30.21" accept" --permanent
# DBサーバ#2からのアクセス許可
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.30.22" accept" --permanent
# DBサーバ#3からのアクセス許可
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.30.23" accept" --permanent
# DBサーバ#2(仮想IP)からのアクセス許可
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.31" accept' --permanent
# DBサーバ#2(仮想IP)からのアクセス許可
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.32" accept' --permanent
# DBサーバ#3(仮想IP)からのアクセス許可
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.33" accept' --permanent
※2025/9/25修正:アクセス許可を「DBサーバごとに設定」→「全DBサーバ共通」に修正(理由は修正履歴に記載)
SCANアドレス、プライベート・ネットワークからの許可も追加します。プライベート・ネットワーク用のインターフェース(ens254)ではDHCPアドレスを使った通信も行っているようなのでソースアドレスによる許可指定ではなくインターフェースそのものをtrustedゾーンに移動します。
【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# SCANアドレスからの接続許可
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.121" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.122" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.30.123" accept' --permanent
# 2026/5/8削除# 管理ネットワークの5353ポートへの接続許可
firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.16.10.0/24" port port=5353 protocol=tcp accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.16.10.0/24" port port=5353 protocol=udp accept' --permanent
# プライベート・ネットワーク用インターフェースをtrustedに移動
firewall-cmd --zone=trusted --change-interface=ens256 --permanent
# PCからのVNC接続許可(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
# 設定を確認
firewall-cmd --list-all
firewall-cmd --list-all --zone=trusted
ファイアウォール設定(APサーバ通信用)
APサーバの WebLogicからの JDBC接続を許可します。
設定手順:「APサーバ・JDBC接続許可設定」
Grid/Oracleユーザ設定
Grid/Oracleユーザ追加
Grid Infrastructure及びOracle Database用のグループ、ユーザをDBサーバと(NFS用アカウントとして)管理サーバに追加します。
【prsmg01、prsmg02、prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
groupadd -g 1100 oinstall
groupadd -g 1101 asmadmin
groupadd -g 1102 asmdba
groupadd -g 1103 racdba
groupadd -g 1104 dba
useradd -g oinstall -G asmadmin,asmdba,racdba,dba -u 1100 grid
useradd -g oinstall -G asmdba,racdba,dba -u 1101 oracle
passwd grid
passwd oracle
gridユーザ、oracleユーザの.bash_profileにumask 022を設定します。
【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# umask 022をプロファイルに追記
リソース制限設定
Grid Infrastructureインストレーション・ガイド「Oracleソフトウェア・インストール・ユーザーのリソース制限の確認」に従ってDBサーバ#1でOracleユーザの現在のリソース・リミットを確認します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# gridユーザのリソース・リミットを確認
su - grid
ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
exit
実行結果
[root@prsdb01 ~]# su - oracle
[oracle@prsdb01 ~]$ ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
max locked memory (kbytes, -l) 64
open files (-n) 1024
stack size (kbytes, -s) 8192
max user processes (-u) 46679
[oracle@prsdb01 ~]$ ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
max locked memory (kbytes, -l) 64
open files (-n) 262144
stack size (kbytes, -s) unlimited
max user processes (-u) 46679
[oracle@prsdb01 ~]$ exit
コマンドの実行結果によると「stack size」、「max locked memory」がsoft制限、hard制限ともに推奨値に適合していません。limits.confに設定を追加してリソース制限を修正します。
なお、Grid Infrastructureのインストールマニュアルでは「max locked memory」の推奨値について「HugePagesメモリーを有効にする場合は現在のRAMの90%以上、HugePagesメモリーを無効にする場合は、3145728 KB (3 GB)以上」となっていますがOracle Databaseのインストールマニュアルでは「max locked memory」は「無制限」なので”unlimited”に設定します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# リソース制限設定を追記
vi /etc/security/limits.conf
# 設定変更を確認
su - oracle
ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
exit
su - grid
ulimit -aS | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
ulimit -aH | grep -e "open files" -e "max user processes" -e "stack size" -e "max locked memory"
exit
-----------------------------------------------------------------------------
【limits.conf追記内容】
-----------------------------------------------------------------------------
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
設定変更の結果を確認したらlimits.confをDBサーバ#2、DBサーバ#3に転送します。
【prsdb01で実行】
-----------------------------------------------------------------------------
scp /etc/security/limits.conf prsdb02:/etc/security/
scp /etc/security/limits.conf prsdb03:/etc/security/
udev設定
ASMディスクはgridが所有している必要があります。udevを使用してディスクデバイスの所有者、グループ、権限を設定します。
DBサーバ#1でASMディスクのWWNを取得します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# WWN取得(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ルールファイルを作成します。
99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="36000c29a3f0a7b1c0cfce643cbd2998a", OWNER="grid", GROUP="asmadmin", 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=="36000c298625b80b185837f00f9a086de", OWNER="grid", GROUP="asmadmin", 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=="36000c295799d0b1c0e4c886066513186", OWNER="grid", GROUP="asmadmin", 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=="36000c298f4fde5ccf40d0b016a9464aa", OWNER="grid", GROUP="asmadmin", 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=="36000c29802c1077545367d572fcfe23f", OWNER="grid", GROUP="asmadmin", 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=="36000c29880c6e9c851e00d5f6537cc2a", OWNER="grid", GROUP="asmadmin", 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=="36000c29dc34668da2329d10889319d3e", OWNER="grid", GROUP="asmadmin", 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=="36000c298792b9280cdb2d7a4ecbfe242", OWNER="grid", GROUP="asmadmin", 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=="36000c2946ad523c016fbafd30ad31abb", OWNER="grid", GROUP="asmadmin", MODE="0660", ATTR{queue/scheduler}="none"
KERNEL=="dm-*", ENV{DM_NAME}=="asmd*", ACTION=="add|change", OWNER="grid", GROUP="asmadmin", MODE="0660"
【prsdb01で実行】
-----------------------------------------------------------------------------
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
-----------------------------------------------------------------------------
【設定内容】
-----------------------------------------------------------------------------
# デバイスファイルの所有者設定(1デバイス1行で記述)
KERNEL=="sd*", ENV{ID_BUS}=="scsi", ACTION=="add|change", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N", RESULT=="<取得したWWN>", OWNER="grid", GROUP="asmadmin", MODE="0660", ATTR{queue/scheduler}="none"
# マルチパスデバイスの所有者設定(1行のみ記述)
KERNEL=="dm-*", ENV{DM_NAME}=="asmd*", ACTION=="add|change", OWNER="grid", GROUP="asmadmin", MODE="0660"
※2026/6/26 I/Oスケジューラ設定追加(黄色マーカー箇所)
ASMディスク用のudevルールを適用してASMディスクがgrid(asmadmin)の所有となったことを確認します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# 現在の設定を確認
ls -l /dev/sd?
ls -l /dev/dm-*
# ルールを適用
udevadm control --reload-rules
udevadm trigger
# ルール適用後の設定を確認
ls -l /dev/sd?
ls -l /dev/dm-*
cat /sys/block/sd[c-z]/queue/scheduler
ルール適用実行結果
[root@prsdb01 ~]# udevadm control --reload-rules
[root@prsdb01 ~]# udevadm trigger
[root@prsdb01 ~]#
[root@prsdb01 ~]# ls -l /dev/sd?
brw-rw---- 1 root disk 8, 0 5月 11 04:13 /dev/sda
brw-rw---- 1 root disk 8, 16 5月 11 04:13 /dev/sdb
brw-rw---- 1 grid asmadmin 8, 32 5月 11 04:13 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 48 5月 11 04:13 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 64 5月 11 04:13 /dev/sde
brw-rw---- 1 grid asmadmin 8, 80 5月 11 04:13 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 96 5月 11 04:13 /dev/sdg
brw-rw---- 1 grid asmadmin 8, 112 5月 11 04:13 /dev/sdh
brw-rw---- 1 grid asmadmin 8, 128 5月 11 04:13 /dev/sdi
brw-rw---- 1 grid asmadmin 8, 144 5月 11 04:13 /dev/sdj
brw-rw---- 1 grid asmadmin 8, 160 5月 11 04:13 /dev/sdk
[root@prsdb01 ~]#
[root@prsdb01 ~]# ls -l /dev/dm-*
brw-rw---- 1 root disk 253, 0 5月 11 18:15 /dev/dm-0
brw-rw---- 1 root disk 253, 1 5月 11 18:15 /dev/dm-1
brw-rw---- 1 grid asmadmin 253, 10 5月 11 18:15 /dev/dm-10
brw-rw---- 1 grid asmadmin 253, 11 5月 11 18:15 /dev/dm-11
brw-rw---- 1 grid asmadmin 253, 12 5月 11 18:15 /dev/dm-12
brw-rw---- 1 root disk 253, 2 5月 11 18:15 /dev/dm-2
brw-rw---- 1 root disk 253, 3 5月 11 18:15 /dev/dm-3
brw-rw---- 1 grid asmadmin 253, 4 5月 11 18:15 /dev/dm-4
brw-rw---- 1 grid asmadmin 253, 5 5月 11 18:15 /dev/dm-5
brw-rw---- 1 grid asmadmin 253, 6 5月 11 18:15 /dev/dm-6
brw-rw---- 1 grid asmadmin 253, 7 5月 11 18:15 /dev/dm-7
brw-rw---- 1 grid asmadmin 253, 8 5月 11 18:15 /dev/dm-8
brw-rw---- 1 grid asmadmin 253, 9 5月 11 18:15 /dev/dm-9
[root@prsdb01 ~]#
[root@prsdb01 ~]# cat /sys/block/sd[c-z]/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 ~]#
ルールファイルをDBサーバ#2、DBサーバ#3に転送して適用します。
【prsdb01で実行】
-----------------------------------------------------------------------------
scp /etc/udev/rules.d/99-oracle-asmdevices.rules prsdb02:/etc/udev/rules.d/
scp /etc/udev/rules.d/99-oracle-asmdevices.rules prsdb03:/etc/udev/rules.d/
-----------------------------------------------------------------------------
【prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
# ルールを適用
udevadm control --reload-rules
udevadm trigger
# ルール適用後の設定を確認
ls -l /dev/sd?
ls -l /dev/dm-*
インストール・ディレクトリ作成
各DBサーバにGrid Infrastructureのベース・ディレクトリ、インストール・ディレクトリ、Oracle Databaseのベース・ディレクトリ作成します。
【prsdb01、prsdb02、prsdb03で実行】
-----------------------------------------------------------------------------
mkdir -p /opt/app/grid
mkdir -p /opt/app/21.0.0/grid
mkdir /opt/app/oracle
mkdir /opt/app/oraInventory
chown grid:oinstall /opt/app/grid
chown -R grid:oinstall /opt/app/21.0.0
chown oracle:oinstall /opt/app/oracle/
chown -R grid:oinstall /opt/app/oraInventory/
これでGrid Infrastructure、Oracle Databaseのインストール準備は完了です。次はGrid Infrastructureのインストール及び構成を行います。
DB構築(Oracle 21c)・関連ページ
DBサーバ構築、Oracle 21c(1)全体構成
DBサーバ構築、Oracle 21c(2)OS、ストレージ
DBサーバ構築、Oracle 21c(3)Gridインストール1
DBサーバ構築、Oracle 21c(4)Gridインストール2
DBサーバ構築、Oracle 21c(5)DBインストール
DBサーバ構築、Oracle 21c(6)2ノードRAC構築
DBサーバ構築、Oracle 21c(7)RACノード追加
メニュー
トップページ
投稿一覧
自己紹介
問合せ(メール)
参考資料
Oracle Grid Infrastructureインストレーションおよびアップグレード・ガイド 21c for Linux
修正履歴
2025/9/25
firewalld設定で DBサーバ間のアクセス許可を DBサーバごとに設定(自分以外のDBサーバに対するアクセス許可)としていたのを全サーバ共通にしました。また、管理ネットワーク5353ポートへのアクセスも追加しています。
firewalldのロギングを有効化して確認ところ、DBサーバのダウンが発生したときに生き残っているサーバは5353ポートにUDPでマルチキャストを流しているんですが、元々の設定だと自分自身は許可していないので自分が流した自分あてのパケットを拒否ってました。またこのパケットはDBサーバがつながっているすべてのネットワークで飛ばしているらしく、運用ネットワークでもアクセス拒否が発生していました。なお、実際に確認しtのはUDPのアクセス拒否だけですがマニュアルによると5353ポートは「マルチキャスト・ドメイン名サービス(mDNS)」で使用、プロトコルは「TCP/UDP」となってます。
まあ、インターコネクトはtrustedゾーンにあるんでこの問題は起きていないし、自分が流しているパケットを自分で受け取れなかったからといって何が問題? とも思ったんですが、「そもそもDBサーバごとに設定を分けると管理が面倒」「DBサーバ間の通信でのアクセス拒否は影響がなさそうでも気持ち悪い」ってことで上の通りに修正しました。サポート問合せができればいいんですけれどそれはムリなので疑わしきところは無駄かもしれなくても対応しておこうかと(ChatGptは「別にそんな設定追加しなくてもいいよー」みたいなこと言ってますけどアイツ結構あやしいところあるからなあ)
2026/4/30
サイト内リンク一覧を追記
2026/5/8
「ファイアウォール設定(DBサーバ内部及びVNC Viewer接続用)」から管理ネットワークの5353ポートの通信許可を削除しました。このポートを許可した経緯は2025/9/25の修正履歴に書いた通りですが本来、この通信はGrid Infrastructureのプライベートまたはパブリック・ネットワークで流れるものでそのどちらにも属していない管理ネットワークでは拒否するのが正解でした…orz
それが分かったのがDBのoracle26ai化の下調べの中でした。まあこのポートが開いていることで何か問題があるわけではない、と言いたいところですが新DBは現行DBは同じ管理ネットワーク上で構築するため余計なトラブルを避けるため管理ネットワークの5353ポートは閉じておこうかと。なお、新DBのDBネットワーク(パブリック・ネットワーク)と内部通信ネットワーク(プライベート・ネットワーク)には構築期間中本番環境と別のネットワークを割り当てるのでこちらについてはいじる必要がありません。
2026/6/26~2026/6/27
Oracle26aiの構築手順をまとめながら過去の投稿(Oracle 21cの構築、つまりこのページ)を参照していたらディスクI/Oスケジューラの設定がOracle 21c Grind Infrastructureインストレーション・ガイドと食い違っていることに気づきました。私の投稿ではOracleの推奨設定を”deadline”と記述、インストレーション・ガイドでは「HDDならdeadline、SSD/NVMeならnoneが推奨」となっています。最初、私の仕様の読み違いかと思ったものの、他にも無効化が推奨だったはずの透過的HugePagesでmadviseが推奨になっていたり、どう考えてもOracle 21cのインストレーション・ガイドの記述が投稿当時から書き換わっています。
しかしまあ、ドキュメントの設定と自分が投稿した内容に食い違いがあるのを放置しておくわけにもいかないので投稿の内容を現在のインストレーション・ガイドの記述に合わせて「透過的なHugePagesの設定」と「ディスクI/Oスケジューラの確認」は修正、実機の設定も変更しています。
これは私の勝手な推測ですが、元々は相当古いバージョンの設定内容を以降のドキュメントでも無条件に引き継いでいたのがさすがに実情に合わなくなってOracle 26aiのドキュメントで見直しを掛け、そこでの修正内容を19cとか21cとかの直近のバージョンのドキュメントにも反映する形でいつのまにかしれっと修正したんじゃなかろうかと思うんですけど、実際のところはどうなんでしょうかね?
Oracle21cのDBサーバ構築後、上の2か所以外にも推奨や設定内容がインストレーションガイドト内で変更されているところがあるかもしれませんがそれを全部追うのはしんどい(& 現在仕掛かり中の新DBの構築手順で最新化する)ので後は投稿内の書きっぷりをちょこちょこいじったりだけの修正にとどめます。
コメント