DBサーバ構築、Oracle 26ai(6)2ノードRAC構築 3

DBサーバ・Oracle RAC

アーカイブログ設定、バックアップ設定、HugePages設定、Oracle Netサービス作成

アーカイブログ設定

ASM:アーカイブログ出力ディレクトリ作成

DBのガラが一通りできたのでアーカイブログ・モードに切り替えます。

まずはアーカイブログ出力先を用意です。asmcmdでASMディスク・グループ(DG02)にアーカイブログ出力ディレクトリを作成します。

【新DBサーバ・prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# DG02にPRDBの最上位ディレクトリ作成
asmcmd --privilege sysdba mkdir +DG02/PRDB

# DG02にアーカイブログ格納用ディレクトリ作成
asmcmd --privilege sysdba mkdir +DG02/PRDB/archivelog

# アーカイブログ格納用ディレクトリ確認
asmcmd --privilege sysdba ls -ld +DG02/PRDB/archivelog

DB:アーカイブログ出力設定

アーカイブログ出力ディレクトリの作成が終わったらsqlplusでDBをアーカイブログ・モードに切り替えます。

【新DBサーバ・prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# sqlplus起動、DBにログイン
sqlplus / as sysdba

-- SPファイルから初期化パラメータ・ファイルを作成(事前バックアップ)
CREATE PFILE='/opt/app/oracle/admin/prdb/pfile/init_bef.ora' from SPFILE;

-- 初期化パラメータにアーカイブログ出力先を設定
alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=+DG02/PRDB/archivelog' scope=both sid = '*';

-- DBとの接続を一旦切断
disconnect

-- srvctlで全ノードのDBを停止
! srvctl stop database -db prdb

-- 停止状態のDBインスタンス(prdb1)に接続
conn / as sysdba

-- DBマウント
startup mount

-- アーカイブログモードに切り替え
alter database archivelog;

-- DBオープン
alter database open;

-- ログモード確認
select LOG_MODE from V$DATABASE;

-- 現在のアーカイブログ出力状況を確認
! asmcmd --privilege sysdba ls +DG02/PRDB/archivelog

-- 未アーカイブのREDOログをアーカイブ
alter system archive log current;

-- 最新のアーカイブログ出力状況を確認
! asmcmd --privilege sysdba ls +DG02/PRDB/archivelog
--> アーカイブログがalter system実行前より増えていればOK

-- SPファイルから初期化パラメータ・ファイルを作成(事後バックアップ)
CREATE PFILE='/opt/app/oracle/admin/prdb/pfile/init_aft.ora' from SPFILE;

-- DBインスタンスprdb1停止
shutdown immediate;

-- sqlplus終了
exit

# prdb(全ノード)を起動
srvctl start database -db prdb

*:Oracle 21cのアーカイブログ設定手順では事前バックアップとしてrmanで初期化パラメータをバックアップしています。しかし実際に初期化パラメータを戻すとなるとrmanのバックアップをリストアするよりもテキスト形式の初期化パラメータ・ファイルから戻す方が全然ラク。なので今回はrmanによる初期化パラメータの事前(事後)バックアップをやめてテキスト形式の初期化パラメータ・ファイルの生成でバックアップするようにしています。

RMANバックアップ設定

DBバックアップ用NFSマウント・シェル作成

アーカイブログを出力するディスクが一杯になるとDBはログ・スイッチができず処理が停止してしまいまうので定期的に削除しなければなりません。また、必要なアーカイブログが欠落するとDBリカバリができなくなるのでディスクから削除する前に別のディスク(あるいはテープ)へのバックアップが必要です。

アーカイブログの出力先となるASMディスクはファイルシステムを使わずディスク・デバイス上に直接データを書き込みます。OSコマンドでASMディスク上にあるファイルを操作することはできまないのでアーカイブログのバックアップや削除にはRMAMを使用*1します。

RMANによるバックアップの出力先はデフォルトで高速リカバリ領域(設定していなければLinuxだとDBサーバの${ORACLE_HOME}/dbs)となっているのでこれを管理サーバのDBバックアップ用NFSディレクトリ*2に変更します。

まずは新DBサーバのrootユーザでDBバックアップ用NFSディレクトリのマウントシェルとアンマウント・シェル*3を作成します。

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

# DBバックアップ用NFSディレクトリ アンマウントシェル作成
vi /usr/local/bin/dbbkumount

# 作成したシェルに実行権限付与
chmod u+x /usr/local/bin/dbbk*mount
/usr/local/bin/dbbkmount(クリックで表示)
#!/bin/bash
MNT_DIR=/mnt/dbbkup
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 "db backup directory already mounted !!"
exit 0
fi

$(mount -t nfs -o rw ${NFS_SVR}:/db26 ${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 "db backup directory mount check failed!!"
exit 1
fi

exit
/usr/local/bin/dbbkumount(クリックで表示)
#!/bin/bash
MNT_DIR=/mnt/dbbkup
WAIT_TIME=10
ITVL_TIME=1

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

if [ ${MNT_CHK} -eq 0 ] ; then
echo "db backup 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 "db backup directory unmount failed !!"
exit 1
fi

exit

シェルを作成したらDBバックアップ用NFSディレクトリをマウントしてRMANバックアップ・ファイル格納用のサブディレクトリを作成します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# 管理サーバ上のOracle 26ai用ディレクトリにマウント確認用ファイルを作成
ssh prsmg00 "touch /nfsdisk/exports/db26/ora26_bkup_dir"

# DBバックアップ用NFSディレクトリ・マウント
dbbkmount

# マウント確認用ファイルの存在チェック
ls /mnt/dbbkup/
-> ora26_bkup_dirがあればOK

# ディレクトリ作成とオーナー・チェンジ
mkdir -p /mnt/dbbkup/prdb/dbbackup
chown -R oracle:oinstall /mnt/dbbkup/prdb


# DBバックアップ用NFSディレクトリのマウント・シェル/アンマウント・シェルを別ノードに転送
scp /usr/local/bin/dbbk*mount prsdb02:/usr/local/bin/
scp /usr/local/bin/dbbk*mount prsdb03:/usr/local/bin/

*1:ここではしれっとアーカイブログのバックアップについてしか書いていませんがDB本体のバックアップも普段はRMANで取得します。建前上、DBはストレージの高速バックアップ(ボリューム・コピー)機能の使用を前提に設計しています。しかし実際には高速バックアップ機能はおろかストレージ自体がこのシステムにはありません。もしボリューム・コピーっぽいことをやるのであればddコマンドでASMディスク(ディスク・デバイス)の中身をファイルに書き出すかESXi側で仮想ディスクをコピーするか、いずれにせよぜんぜん高速じゃないし手間もかかります。
本物の大規模DBであれば当然ストレージを備えているのでボリューム・コピー一択ですが、データファイル・サイズが合計でせいぜい20GiB、しかも中身はスッカスカのDBをバックアップするのに毎回上に挙げたようなボリューム・コピーの真似事をするぐらいならRMANを使ってコマンド一行でバックアップする方がはるかに楽ちんでございます(DBのリカバリ検証はちゃんと似非ボリューム・コピーでやります)。

*2:新DBサーバ用のNFSマウント・シェルを作成する過程で今更ながら衝撃的な事実に気づいたんですが管理サーバのPacemakerでexportsfsリソースに設定してあるclientspec、アレまったく効いてません。現行DBバックアップ用NFSディレクトリのexportsfsリソースにはclientspecで現行DBサーバに絞ってアクセスを許可したつもりが新DBサーバだろうがAPサーバだろうが普通にマウントできてしまいます(詳細は管理サーバ構築の修正履歴(2026/10/05修正)に書いてます)。まあDBバックアップ用ディレクトリのNFSマウントができなくなるわけではないんで修正しませんがこれまでのやらかし踏まえて環境をきれいに作り直す折に修正しようと思います。

*3:現行DBサーバではDBバックアップ用NFSディレクトリのマウント・シェル/アンマウント・シェルをそれぞれdbmount/dbumountというシェル名で作成しましたんですけどこれじゃDBのマウントっぽくてどうよ、ということで新DBサーバではシェル名を変えました。

RMANバックアップ設定

新DBサーバ#1のoracleユーザでRMANの設定とDBバックアップを実施します。

【新DBサーバ・prsdb01で実行】
-----------------------------------------------------------------------------
# oracleユーザにスイッチ
su - oracle

# rmanでDBに接続
rman target /

# 現在の設定を確認
show all;

# DISKバックアップの出力先を含んだバックアップファイルの命名規則を設定
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/mnt/dbbkup/prdb/dbbackup/%d_%T_%t_%s';

# アーカイブログ削除ポリシーを設定
# -> 1回ディスク・バックアップを取得しているアーカイブログは削除可能に
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DEVICE TYPE DISK;

# 最新の設定を確認
show all;

# バックアップ動作確認
backup database plus archivelog delete all input;

# バックアップが取れていることを確認
host 'ls /mnt/dbbkup/prdb/dbbackup/';

# rman終了
exit

DB及びアーカイブログのバックアップが正常に取得できればRMANのバックアップ設定は完了です。

HugePages設定

事前調査(hugepages_settings.shの準備及び実行)

「Grid Infrastructureインストレーションおよびアップグレード・ガイドfor Linux」にはMy Oracle Supportからダウンロードしたhugepages_settings.shを使ってDBサーバに必要なHugePagesのサイズ(ページ数)を取得する手順が記載されています。

My Oracle SupportにアクセスするにはOracleのサポート・ライセンスが必要です。もちろんこのシステムにそんなものはないので代わりにGitHub上に公開されているhugepages_setting.shを使ってHugePagesの算出を行います。

新DBサーバのrootユーザで/tmp/hugepages_setting.shを新規に作成してGitHubにあるhugepages_setting.shのコードをコピペ、もしくはダウンロードしたhugepages_setting.shを新DBサーバ#1の/tmpに格納してからviエディタで開きます。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# hugepages_setting.shを作成
vi /tmp/hugepages_setting.sh
-> リンク先のコードをコピペ(もしくはダウン・ロードして新DBサーバ#1の/tmpに転送)

このhugepages_setting.shが対応しているカーネル・バージョンは5.4までなので新DBサーバ(RHEL9.6)のカーネル・バージョン(5.14.0)で動作するよう89行目にあるケース文のパターン*を5.4 -> 5.14に変更してシェルを保存します。

hugepages_setting.shの修正が終わったら実行権限を付けて実行します。

*:GitHubのコード表示では93行目ですがコードをコピペするとなぜか34、35、74、76行目の空白行が除外されて89行目になります。なんでそうなるのかはわかりません。不思議ですねぇ。

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

hugepages_setting.shの実行結果が1793(SGA分のページ数+1)なのでここはキリ良く1800ページ分のHugPagesを設定しようと思います。

新DBサーバ#2、新DBサーバ#1の順にCRSを停止します。

【新DBサーバ・prsdb01,prsdb02 / rootユーザで実行】
-----------------------------------------------------------------------------
# prsdb02 -> prsdb01の順に停止
/opt/app/26.0.0/grid/bin/crsctl stop crs

新DBサーバ#1でoracleユーザのgid(こちらの環境では1100になっているはず)を確認してからOracle用に作成したカーネル・パラメタ設定ファイルにvm.hugetlb_shm_groupとvm.nr_hugepagesの設定を追加*します。

【新DBサーバ・prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# oracleユーザのgidを確認
id oracle
-> groupsのidを確認(この環境では1100のはず)

# Oracle用カーネル・パラメタ設定ファイルをバックアップ
cp /etc/sysctl.d/97-oracle-database-sysctl.conf /tmp/97-oracle-database-sysctl.conf.bk

# vm.hugetlb_shm_group(oracleのGID)とvm.nr_hugepages(HugePages数)を設定ファイルに追記
cat >> /etc/sysctl.d/97-oracle-database-sysctl.conf <<EOF
vm.hugetlb_shm_group = 1100
vm.nr_hugepages = 1800
EOF


# 設定ファイルの変更内容を確認
cat /etc/sysctl.d/97-oracle-database-sysctl.conf

-> vm.hugetlb_shm_group = 1100、vm.nr_hugepages = 1800の2行が追加されていることを確認

# 現在のHugePagesの設定状況を確認
grep ^HugePages /proc/meminfo
-> まだHugePagesを設定していないのでHugePages_Totalは0

# 設定ファイルを適用
sysctl -q --system

# 最新のパラメータ値を確認
sysctl -a | grep hugepages

-> 設定ファイルを適用OKならvm.hugetlb_shm_groupが1100、vm.nr_hugepagesが1800

# 設定したサイズのHugePages_Totalが確保されていることを確認
grep ^HugePages /proc/meminfo
-> HugePages_Totalが1800であればOK

# 設定ファイルを他の新DBサーバに転送
scp /etc/sysctl.d/97-oracle-database-sysctl.conf prsdb02:/etc/sysctl.d/
scp /etc/sysctl.d/97-oracle-database-sysctl.conf prsdb03:/etc/sysctl.d/

すべての新DBサーバを再起動してから各サーバに1800ページのHugePagesが設定されていることを確認します。

*:「Grid Infrastructureインストレーションおよびアップグレード・ガイド」と「Oracle AI データベース・インストレーション・ガイド」ではHugePagesの設定に関する内容が食い違っておりまして前者はvm.nr_hugepagesだけ、後者はvm.hugetlb_shm_groupとvm.nr_hugepagesを設定しています。このシステムはASMとDB本体以外にHugePagesを使用するものはいないはずなのでGrid Infrastructure側の記述通りvm.nr_hugepagesだけ設定してvm.hugetlb_shm_groupの設定は不要かとも考えたんですがDBの構築に関する投稿ですから結局DBのインストレーションガイドに従ってvm.hugetlb_shm_groupも設定することにしました。

HugePages割り当て確認

新DBサーバ#1 -> 新DBサーバ#2の順にCRSを起動します。

【新DBサーバ・prsdb01,prsdb02 / rootユーザで実行】
-----------------------------------------------------------------------------
# prsdb01 → prsdb02の順にCRSを起動
/opt/app/21.0.0/grid/bin/crsctl start crs -wait

新DBサーバ#1でoracleユーザにスイッチして各ノードでDBが起動していることを確認します。

新DBサーバ#1、新DBサーバ#2でもう一度/proc/meminfoでHugePagesの状況を確認します。HugePages_Total – HugePages_Free + HugePages_Rsvdの結果がSGAサイズ(1792ページ)に一致すればHugePagesの設定は完了です。

Oracle Netサービス作成

GUIを使ってOracle Netサービスを構成します。DBCAでDB構築スクリプトを生成したときの新DBサーバ#1へのVNC接続が残っていればその接続で、DBサーバ#1のVNC Serverが停止している場合はVNC Serverを起動してVNC Viewerで新DBサーバ#1に接続します。

【新DBサーバ・prsdb01 /oracleユーザで実行】
-----------------------------------------------------------------------------
# VNC Server起動(VNC Serverが停止している場合)
vncserver :1

ターミナルを立ち上げてコマンドでNETCAを起動、ノード間及びPDBの接続に使用するOracle Netサービスを作成作成します。

【NETCA操作手順】

No.画面操作
1Real Application Cluster-構成「クラスタ構成(C)」を選択
2ようこそ「ローカル・ネット・サービス名構成(S)」を選択
3ネット・サービス名の構成「追加(A)」を選択
4サービス名サービス名(S):下表「Netサービス設定値」(a.サービス名)参照
5プロトコルの選択「TCP」を選択
6TCP/IPプロトコルホスト名(H):下表「Netサービス設定値」(b.ホスト名)参照
「標準ポート番号の1521を使用(S)」を選択
7テスト「はい、テストを実行します(Y)」を選択
8接続①「ログインの変更」をクリック
②以下を入力して「OK(O)」をクリック
——————————————
名前(U):system
パスワード(P):<DB管理者パスワード>
——————————————
③「テストは成功しました。」と表示されることを確認
④「次へ(N)」クリック
9ネット・サービス名ネット・サービス名(S):下表「Netサービス設定値」(c.ネット・サービス名)参照
10別のサービス名を構成すべてのNetサービスの構成が終わった場合は「いいえ(O)」をクリック
→ No.11へ
構成するNetサービスが残っている場合は「はい(Y)」をクリック
→ No.4へ
11サービス名の構成が終了しました「次へ(N)」クリック
12ようこそ「終了(E)」クリック

【Netサービス設定値】

a.サービス名b.ホスト名c.ネット・サービス名
prdbprsscan.exsample.lanprdb
prdbprsdb01-vip.exsample.lanprdb1
prdbprsdb02-vip.exsample.lanprdb2
prpdbprsscan.exsample.lanprpdb
prpdbprsdb01-vip.exsample.lanprpdb1
prpdbprsdb02-vip.exsample.lanprpdb2

作成したサービスを使用して CDB、PDBに接続できることを確認します。

【新DBサーバ・prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# SCABアドレス(CDB)接続確認
sqlplus system@prdb

-- 接続DBバージョン確認
select BANNER from V$VERSION;
-- >「Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0」が戻ればOK

/* インスタンスprdb1(CDB)接続確認 */
conn system@prdb1
select HOST_NAME from V$INSTANCE;
-- >「prsdb01.exsample.lan」が戻ればOK

/* インスタンスprdb2(CDB)接続確認 */
conn system@prdb2
select HOST_NAME from V$INSTANCE;
-- >「prsdb02.exsample.lan」が戻ればOK

/* SCABアドレス(PDB)接続確認 */
conn pdbadmin@prpdb
select BANNER from V$VERSION;
-- >「Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0」が戻ればOK

/* インスタンスprdb1(PDB)接続確認 */
conn pdbadmin@prpdb1

/* インスタンスprdb2(PDB)接続確認 */
conn pdbadmin@prpdb2

exit

接続に問題がなければ DBサーバ#1のtnsnames.oraをDBサーバ#2のORACLE_HOME*に転送します。

【新DBサーバ・prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# tnsnames.oraをDBサーバ#2に転送
scp /opt/app/oracle/product/26.0.0/dbhome_1/network/admin/tnsnames.ora prsdb02:/opt/app/oracle/product/26.0.0/dbhome_1/network/admin/

NETCAがまだ上がっていれば終了してターミナルを閉じ、VNC VewerからログアウトしたらOracle Netサービス作成は完了です。

* :Oracle21cではORACLE_HOMEが読み取り専用に変更されましたがOracle26aiだとまた元の形式のORACLE_HOMEに戻っています。

2ノード RACの構成はここまで。次はOracle RAC環境に3ノード目を追加します。

DBサーバ構築(Oracle 26ai)・関連ページ
DBサーバ構築、Oracle 26ai(1)概要
DBサーバ構築、Oracle 26ai(2)OS、N/W、ストレージ
DBサーバ構築、Oracle 26ai(3)Gridインストール1
DBサーバ構築、Oracle 26ai(4)Gridインストール2
DBサーバ構築、Oracle 26ai(5)DBインストール
DBサーバ構築、Oracle 26ai(6)2ノードRAC構築 1 (DB設計)
DBサーバ構築、Oracle 26ai(6)2ノードRAC構築 2 (DB構築)
DBサーバ構築、Oracle 26ai(6)2ノードRAC構築 3 (アーカイブログ、HugePages他)

メニュー

トップページ

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

投稿一覧

過去投稿一覧

自己紹介

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

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

問合せ(メール)

お問い合わせ | バカメのとなり

参考情報

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

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

コメント

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