Oracle RAC環境へのノード追加
「DBサーバ構築 6(Oracle DB 2ノードRAC)」で構築した Oracle RAC環境に新しいノードを追加します。
通常、Oracle RAC環境へのノード追加は「1. 追加ノード用DBサーバの構築」→「2. クラスタ・ノードの追加」→「3. Oracle Databaseホームの拡張」→「4. Oracle RAC DBインスタンスの追加」という流れで進めますが、今回は追加ノードとなるDBサーバ#3をすでに構築しているのでクラスタ・ノードの追加から作業を始めます。
クラスタ・ノードの追加
SSH接続手動構成
クラスタ・ノードの追加にはGrid Infrastructureインストーラを使用します。ただし普通にインストーラを操作してもgridユーザのパスワードなしSSH接続の設定でエラーとなってしまい先に進めません。
[INS-06003]次のノードとのパスワードなしのSSH接続の設定に失敗しました:[prsdb03]
原因 - 失敗したノードで異なるオペレーティング・システムが実行されているか、アクセスできない可能性があります。アクセス可能な場合、ローカル・マシンと同じオペレーティング・システムを実行している場合は、SSHデーモンが選択したノードで構成されていない可能性があります。
処置 - 失敗したノードにアクセス可能で、同じオペレーティング・システムが実行されており、SSH接続がサポートされていることを確認してください。
Oracleサポートやナレッジを利用できないのでエラーの原因を調べるのはちょっと難しそうですが、Grid Infrastructureのアップグレード・ガイドに記述されている「すべてのクラスタ・ノードでの手動によるSSHの構成」を実行すれば問題の操作をスキップすることができます。
この手順は既存ノードのauthorized_keysとknown_hostsに変更を加えるので、念のためOracle RAC環境を停止してこの2つのファイルをバックアップします。
【prsdb01、prsdb02 / rootユーザで実行】
-----------------------------------------------------------------------------
# CRS停止(prsdb02 → prsdb01の順に停止)
/opt/app/21.0.0/grid/bin/crsctl stop crs
# gridユーザにスイッチしてauthorized_keys、known_hostsをバックアップ
su - grid
cd .ssh
cp authorized_keys authorized_keys.bk
cp known_hosts known_hosts.bk
2ノードRAC構成時にインストーラがどの暗号タイプで鍵ペアを作成したかをlsコマンドで確認します。
[grid@prsdb01 .ssh]$ ls -l
合計 28
-rw------- 1 grid oinstall 1737 6月 2 22:32 authorized_keys
-rw------- 1 grid oinstall 1158 6月 2 15:01 authorized_keys.bk
-rw------- 1 grid oinstall 2610 5月 11 22:56 id_rsa
-rw-r--r-- 1 grid oinstall 579 5月 11 22:56 id_rsa.pub
-rw------- 1 grid oinstall 4512 6月 3 14:41 known_hosts
-rw------- 1 grid oinstall 2256 6月 2 15:01 known_hosts.bk
[grid@prsdb01 .ssh]$
鍵ペアのファイル名を見ると暗号タイプはRSAです。これに合わせてDBサーバ#3のgridユーザもRSAで鍵ペアを生成します。
【prsdb03で実行】
-----------------------------------------------------------------------------
# gridユーザにスイッチ
su - grid
# RSAで鍵ペア生成(入力要求はすべてEnterキーのみ押下)
ssh-keygen -t rsa
ここで気をつけなければならないことがひとつ。
アップグレード・ガイドの次の手順では Oracle RAC 環境全ノードの gridユーザの公開鍵情報を authorized_keys に記述してして各ノードに配布します。
ノードを追加する場合は新しくRAC環境に加わる gridユーザの公開鍵情報を既存の authorized_keys に追記して各ノードに配布することになるわけですが、この作業をアップグレード・ガイドの手順通りに実行しちゃうと各ノードのknown_hostsがこうなってしまいます。
【prsdb01 known_hosts】
prsdb02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDE …
prsdb01 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCy …
192.168.30.22 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA …
192.168.30.21 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA …
prsdb03,192.168.30.23 ecdsa-sha2-nistp256 AAAAE2 …
【prsdb02 known_hosts】
prsdb02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDE …
prsdb01 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCy …
192.168.30.21 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA …
192.168.30.22 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA …
prsdb03,192.168.30.23 ecdsa-sha2-nistp256 AAAAE2 …
【prsdb03 known_hosts】
prsdb01,192.168.30.21 ecdsa-sha2-nistp256 AAAAE2 …
prsdb02,192.168.30.22 ecdsa-sha2-nistp256 AAAAE2 …
prsdb03,192.168.30.23 ecdsa-sha2-nistp256 AAAAE2 …
RHEL8のデフォルト設定でsshのホスト認証を行うと暗号スイートはDBサーバ#3(prsdb03)のように「ecdsa-sha2-nistp256」となるはずですが、どうやらインストーラは明示的にRSAでホスト認証を行っていたようです。
ノード間のユーザ認証をRSAで統一してもホスト認証の暗号タイプが違っているとトラブルの原因になりかねないので追加ノードと既存ノードのホスト認証にはRSAを使うようにssh-keyscanで設定します。また、 known_hosts のデフォルトのパーミッションは744ですがインストーラはを600に設定しています。こちらも合わておきましょう。
【prsdb01、prsdb02 / gridユーザで実行】
-----------------------------------------------------------------------------
# RSAを指定してpsdb03のホスト鍵を収集
ssh-keyscan -t rsa prsdb03 >> known_hosts
ssh-keyscan -t rsa 192.168.30.23 >> known_hosts
-----------------------------------------------------------------------------
【prsdb03 / gridユーザで実行】
-----------------------------------------------------------------------------
# RSAを指定して各DBサーバのホスト鍵を収集
cd .ssh
ssh-keyscan -t rsa prsdb01 >> known_hosts
ssh-keyscan -t rsa prsdb02 >> known_hosts
ssh-keyscan -t rsa prsdb03 >> known_hosts
ssh-keyscan -t rsa 192.168.30.21 >> known_hosts
ssh-keyscan -t rsa 192.168.30.22 >> known_hosts
ssh-keyscan -t rsa 192.168.30.23 >> known_hosts
# known_hostsのパーミッションを600に設定
ls -l
chmod 600 known_hosts
ls -l
DBサーバ#1の authorized_keysにDBサーバ#3のgridユーザが生成した公開鍵を追記して各ノードに配布します。
【prsdb03 / gridユーザで実行】
-----------------------------------------------------------------------------
# DBサーバ#1からauthorized_keysを取得
scp prsdb01:~/.ssh/authorized_keys ./
# DBサーバ#3のgridユーザ公開鍵を追記
cat id_rsa.pub >> authorized_keys
# 各ノードに配布
scp authorized_keys prsdb01:~/.ssh/
scp authorized_keys prsdb02:~/.ssh/
各ノードが相互にパスワードなしでssh接続できることを確認します。最後の3つはインストーラ内部で発行しているSSH接続確認と同じコマンドです。
【prsdb01、prsdb02、prsdb03 / gridユーザで実行】
-----------------------------------------------------------------------------
# ノード間のパスワードなしssh接続確認
ssh prsdb01 date
ssh prsdb02 date
ssh prsdb03 date
ssh 192.168.30.21 date
ssh 192.168.30.22 date
ssh 192.168.30.23 date
# インストーラによるSSH接続確認コマンド(/usr/bin/ssh~/bin/trueまで1行で記述。コマンド失敗時はエラー出力)
/usr/bin/ssh -o FallBackToRsh=no -o PasswordAuthentication=no -o StrictHostKeyChecking=yes -o NumberOfPasswordPrompts=0 prsdb01 -n /bin/true
/usr/bin/ssh -o FallBackToRsh=no -o PasswordAuthentication=no -o StrictHostKeyChecking=yes -o NumberOfPasswordPrompts=0 prsdb02 -n /bin/true
/usr/bin/ssh -o FallBackToRsh=no -o PasswordAuthentication=no -o StrictHostKeyChecking=yes -o NumberOfPasswordPrompts=0 prsdb03 -n /bin/true
パスワードなしのSSH接続に問題がないことを確認できたらDBサーバ#1、DBサーバ#2のCRSを起動します。
【prsdb01、prsdb02 で実行】
-----------------------------------------------------------------------------
# gridユーザからrootユーザに復帰
exit
#CRS起動(prsdb01 → prsdb02の順に起動)
/opt/app/21.0.0/grid/bin/crsctl start crs -wait
Grid Infrastructureインストーラの使用
DBサーバ#1のgridユーザでVNC Serverを起動します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# gridユーザにスイッチ
su - grid
# VNC server起動
vncserver :1
ターミナルからgridSetup.shを実行してGrid Infrastructureインストーラを起動します。
【prsdb01 / gridユーザ VNC Viewerで実行】
-----------------------------------------------------------------------------
/opt/app/21.0.0/grid/gridSetup.sh
インストーラを以下のように操作してDBサーバ#3をクラスタ・ノードに追加します。
No. | 画面 | 操作 |
1 | 構成オプションの選択 | 「クラスタに、さらにノードを追加してください」選択 |
2 | クラスタのノード追加情報 | ①「追加(A…)」クリック → 「クラスタ・ノードの情報の追加」画面表示 ② 以下の通り入力して「OK(O)」クリック —————————————————- パブリックホスト名(H):prsdb03.exsample.lan 仮想ホスト名(V) :prsdb03-vip.exsample.lan —————————————————- ③ 「SSH接続'(C…)」クリック ④ 「ユーザー・ホームに存在する…」にチェックが入っていることを確認 ⑤ 「次へ(N)」クリック |
3 | 前提条件チェックの実行 | エラーが出力されないことを確認。 zeroconf、avahi-daemon関連の警告は無視して問題なし。 「すべて無視(I)」にチェックを入れて「次へ(N)」をクリック 何も問題がなければ画面操作不要でサマリーに遷移 |
4 | サマリー | 設定内容に問題がなければ「送信(I)」クリック |
5 | 製品のインストール | 「構成スクリプトの実行」が表示されたら画面指示に従ってrootユーザでスクリプトを実行 /opt/app/oraInventory/orainstRoot.sh /opt/app/21.0.0/grid/root.sh ※入力要求はすべてEnterキー押下 スクリプトの実行にエラーがなく正常終了メッセージ「CLSRSC-325: Configure Oracle Grid Infrastructure for a Cluster … succeeded」が表示されたら「OK(O)」をクリックして「構成スクリプトの実行」画面終了 |
6 | 終了 | 正常終了メッセージ「クラスタ用のOracle Grid Infrastructureのノードの追加が成功しました」を確認して「閉じる(C)」クリック |
インストーラ終了後、DBサーバ#1(VNC Viewer)からログアウトします。また、DBサーバ#3でgridユーザの .bash_profile に環境変数設定を追記して保存します。
【prsdb03 / gridユーザの.bash_profileに追記】
-----------------------------------------------------------------------------
export ORACLE_BASE=/opt/app/grid
export ORACLE_HOME=/opt/app/21.0.0/grid
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export ORACLE_SID=+ASM3
export PATH=${ORACLE_HOME}/bin:${PATH}
DBサーバ#3のgridユーザがローカルのASMインスタンスに接続できることを確認します。接続に問題がなければCRSの自動起動を無効化してクラスタ・リソース状態の確認を行います。
【prsdb03 / gridユーザで実行】
-----------------------------------------------------------------------------
# gridユーザからログアウト
exit
# gridユーザで再ログイン(スイッチ・ユーザ)
su - grid
# sqlplusを起動してASMインスタンスに接続
sqlplus / as sysasm
# 接続しているインスタンスが+ASM3であることを確認
select instance_name from v$instance;
# sqlplus終了
exit
# gridユーザからログアウト(grid → rootにユーザ復帰)
exit
# CRS自動起動無効化
/opt/app/21.0.0/grid/bin/crsctl disable crs
# クラスタ・リソース確認(リソース状態が確認できればOK)
/opt/app/21.0.0/grid/bin/crsctl status res -t
Oracle Databaseホームの拡張
SSH接続手動構成
Oracle Databaseホームの拡張でもインストーラによるパスワードなしSSH接続設定がエラーとなるかどうかはわかりませんが、念のためここでも手動で構成を実施します。
DBサーバ#1のoracleユーザで本番DB(PRDB)を停止して既存のauthorized_keys 、known_hostsをバックアップします。
【prsdb01 で実行】
-----------------------------------------------------------------------------
# oracleユーザにスイッチ
su - oracle
# PRDB停止
srvctl stop database -db prdb
srvctl stop database -db prdb
# authorized_keys 、known_hostsをバックアップ
cd .ssh
cp authorized_keys authorized_keys.bk
cp known_hosts known_hosts.bk
ls -l
-----------------------------------------------------------------------------
【prsdb02 で実行】
-----------------------------------------------------------------------------
# oracleユーザにスイッチ
su - oracle
# authorized_keys 、known_hostsをバックアップ
cd .ssh
cp authorized_keys authorized_keys.bk
cp known_hosts known_hosts.bk
ls -l
DBサーバ#3のoracleユーザでRSAタイプの鍵ペアを生成します。
【prsdb03 で実行】
-----------------------------------------------------------------------------
# oracleユーザにスイッチ
su - oracle
# 鍵ペア生成
sh-keygen -t rsa
DBサーバ#1、DBサーバ#2のoracleユーザでDBサーバ#3のRSAホスト鍵を収集します。DBサーバ#3のoracleユーザはRAC環境全ノードのRSAホスト鍵を収集してknown_hostsのパーミッションを 600 に設定します。
【prsdb01、prsdb02 / oracleユーザで実行】
-----------------------------------------------------------------------------
# RSAを指定してpsdb03のホスト鍵を収集
ssh-keyscan -t rsa prsdb03 >> known_hosts
ssh-keyscan -t rsa 192.168.30.23 >> known_hosts
-----------------------------------------------------------------------------
【prsdb03 / oracleユーザで実行】
-----------------------------------------------------------------------------
# RSAを指定してpsdb03のホスト鍵を収集
cd .ssh
ssh-keyscan -t rsa prsdb01 >> known_hosts
ssh-keyscan -t rsa prsdb02 >> known_hosts
ssh-keyscan -t rsa prsdb03 >> known_hosts
ssh-keyscan -t rsa 192.168.30.21 >> known_hosts
ssh-keyscan -t rsa 192.168.30.22 >> known_hosts
ssh-keyscan -t rsa 192.168.30.23 >> known_hosts
# known_hostsのパーミッションを600に設定
ls -l
chmod 600 known_hosts
ls -l
DBサーバ#1の authorized_keysにDBサーバ#3のoracleユーザが生成した公開鍵情報を追記して各ノードに配布します。
【prsdb03 / oracleユーザで実行】
-----------------------------------------------------------------------------
# DBサーバ#1からauthorized_keysを取得
scp prsdb01:~/.ssh/authorized_keys ./
# DBサーバ#3のoracleユーザ公開鍵を追記
cat id_rsa.pub >> authorized_keys
# 各ノードに配布
scp authorized_keys prsdb01:~/.ssh/
scp authorized_keys prsdb02:~/.ssh/
各ノードが相互にパスワードなしでssh接続できることを確認します。
【prsdb01、prsdb02、prsdb03 / oracleユーザで実行】
-----------------------------------------------------------------------------
# ノード間のパスワードなしssh接続確認
ssh prsdb01 date
ssh prsdb02 date
ssh prsdb03 date
ssh 192.168.30.21 date
ssh 192.168.30.22 date
ssh 192.168.30.23 date
# インストーラによるSSH接続確認コマンド(/usr/bin/ssh~/bin/trueまで1行で記述。コマンド失敗時はエラー出力)
/usr/bin/ssh -o FallBackToRsh=no -o PasswordAuthentication=no -o StrictHostKeyChecking=yes -o NumberOfPasswordPrompts=0 prsdb01 -n /bin/true
/usr/bin/ssh -o FallBackToRsh=no -o PasswordAuthentication=no -o StrictHostKeyChecking=yes -o NumberOfPasswordPrompts=0 prsdb02 -n /bin/true
/usr/bin/ssh -o FallBackToRsh=no -o PasswordAuthentication=no -o StrictHostKeyChecking=yes -o NumberOfPasswordPrompts=0 prsdb03 -n /bin/true
パスワードなしのSSH接続に問題がないことを確認できたらDBサーバ#1から本番DB(PRDB)を起動します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# PRDB起動
srvctl start database -db prdb
Oracle Databaseインストーラの使用
DBサーバ#1のoracleユーザでVNC Serverを起動します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
vncserver :1
ターミナルから以下のコマンドを実行してOracle Databaseインストーラを起動します。
【prsdb01 / oracleユーザ VNC Viewerで実行】
-----------------------------------------------------------------------------
/opt/app/oracle/product/21.0.0/dbhome_1/addnode/addnode.sh "CLUSTER_NEW_NODES=prsdb03"
インストーラを以下のように操作してOracle DatabaseホームをDBサーバ#3に拡張します。
No. | 画面 | 操作 |
1 | ノードの選択 | 「prsdb03」チェック 「SSH接続(C)…」をクリックして「ユーザー・ホームに存在する…」にチェックが入っていることを確認 |
2 | 前提条件チェックの実行 | エラーが出力されないことを確認。 何も問題がなければ画面操作不要でサマリーに遷移 |
3 | サマリー | 設定内容に問題がなければ「送信(I)」クリック |
4 | 製品のインストール | 「構成スクリプトの実行」が表示されたら画面指示に従ってrootユーザでスクリプトを実行 /opt/app/oracle/product/21.0.0/dbhome_1/root.sh ※入力要求はすべてEnterキー押下 スクリプトの実行にエラーがなければ「OK(O)」をクリックして「構成スクリプトの実行」画面終了 |
6 | 終了 | 正常終了メッセージ「Oracle Databaseのノードの追加が成功しました」を確認して「閉じる(C)」クリック |
Oracle Dataase環境の拡張が正常終了したらターミナルを閉じてDBサーバ#1(VNC Viewer)からログアウトします。
Oracle RAC DBインスタンスの追加
準備作業
Oracle Databaseホームの拡張ではインストーラが最後にDBCAでインスタンスを追加するよう言ってきていますが、DBCAは既存インスタンスの構成を考慮せず機械的に追加インスタンスのREDOログやPDBのUNDO表領域を作ってしまいます。そのためOracle RAC DBインスタンスの追加はスクリプトで実行します。
Oracle RAC DBインスタンスを追加する前に、念のためDBサーバ#1のoracleユーザでDBのバックアップを取得します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# DBバックアップ用NFSディレクトリをマウント
su - -c "dbmount"
# RMANでDBに接続
rman target /
# SPファイルのバックアップ取得
backup database plus archivelog delete all input;
# RMAN終了
exit
# DBバックアップ用NFSディレクトリをアンマウント
su - -c "dbumount"
DBサーバ#1にスクリプトを格納するためのディレクトリを作成します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
mkdir /opt/app/oracle/admin/prdb/scripts_addnode
cd /opt/app/oracle/admin/prdb/scripts_addnode
Oracle RAC DBインスタンス追加スクリプトを作成してシェルに実行権限を設定します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
vi prdb1.sh
vi preADDNode.sql
vi prdb1.sql
chmod u+x prdb1.sh
各スクリプトの内容は以下の通りです。(スクリプト名クリックでコード表示)
prdb1.sh
#!/bin/sh
PERL5LIB=$ORACLE_HOME/rdbms/admin:$PERL5LIB; export PERL5LIB
PATH=$ORACLE_HOME/perl/bin:$PATH; export PATH
EXEC_NODE=`hostname -s`
ssh prsdb03 "umask 0027;mkdir -p /opt/app/oracle/admin/prdb/adump"
ssh prsdb03 "umask 0027;mkdir -p /opt/app/oracle/admin/prdb/dpdump"
ssh prsdb03 "umask 0027;mkdir -p /opt/app/oracle/admin/prdb/hdump"
ssh prsdb03 "umask 0027;mkdir -p /opt/app/oracle/admin/prdb/pfile"
ssh prsdb03 "umask 0027;mkdir -p /opt/app/oracle/admin/prdb/scripts"
ssh prsdb03 "umask 0027;mkdir -p /opt/app/oracle/audit"
if [ `LANG=C;srvctl status instance -db prdb -node ${EXEC_NODE}|grep -c "is running on node"` -eq 0 ] ; then
srvctl start instance -db prdb -node ${EXEC_NODE}
fi
sqlplus /nolog @/opt/app/oracle/admin/prdb/scripts_addnode/preADDNode.sql
if [ $? -ne 0 ] ; then
echo "Failed to set parameters for additional node!"
exit 1
fi
srvctl stop database -db prdb
srvctl start database -db prdb
if [ `LANG=C;srvctl status instance -db prdb -node ${EXEC_NODE}|grep -c "is running on node"` -eq 0 ] ; then
echo "Failed to start instance on worker node!"
exit 1
fi
if [ `LANG=C;srvctl status pdb -db prdb | grep "is running on nodes" | grep -c ${EXEC_NODE}` -eq 0 ] ; then
srvctl start pdb -db prdb -pdb prpdb
fi
srvctl add instance -db prdb -i prdb3 -n prsdb03
srvctl disable instance -db prdb -instance prdb3
sqlplus /nolog @/opt/app/oracle/admin/prdb/scripts_addnode/prdb1.sql
DBサーバ#3のローカル・ディレクトリ作成、初期化パラメータ追加、DB再起動、CRSへのDBインスタンス登録、ノード追加スクリプトのコールを実行します。
preADDNode.sql
SET VERIFY OFF
whenever sqlerror exit 1
connect / as SYSDBA
spool /opt/app/oracle/admin/prdb/scripts_addnode/preADDNode.log append
alter system set instance_number=3 sid='prdb3' scope=spfile;
alter system set thread=3 sid='prdb3' scope=spfile;
alter system set undo_tablespace=UNDOTBS3 sid='prdb3' scope=spfile;
exit
追加インスタンス関連の初期化パラメータを設定します。
prdb1.sql
SET VERIFY OFF
connect / as SYSDBA
set echo on
-- Create Instance 3 CDB Undo Tablespace
spool /opt/app/oracle/admin/prdb/scripts_addnode/CreateDBFiles.log append
CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS3" DATAFILE '+DG21/PRDB/rbs/undotbs03.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED;
spool off
-- Create Instance 3 CDB Redo Log Groups
spool /opt/app/oracle/admin/prdb/scripts_addnode/postDBCreation.log append
select group# from v$log where group# =31;
select group# from v$log where group# =32;
select group# from v$log where group# =33;
ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 31 ('+DG11/PRDB/log/redo31_1.log','+DG11/PRDB/log/redo31_2.log') SIZE 256M,
GROUP 32 ('+DG11/PRDB/log/redo32_1.log','+DG11/PRDB/log/redo32_2.log') SIZE 256M,
GROUP 33 ('+DG11/PRDB/log/redo33_1.log','+DG11/PRDB/log/redo33_2.log') SIZE 256M;
ALTER DATABASE ENABLE PUBLIC THREAD 3;
set echo on
host srvctl enable instance -db prdb -instance prdb3;
spool off
-- Create Instance 3 PDB Undo Tablespace
alter session set container="prpdb";
set echo on
spool /opt/app/oracle/admin/prdb/scripts_addnode/postPDBCreation.log append
CREATE UNDO TABLESPACE "UNDOTBS3" DATAFILE '+DG21/PRDB/prpdb/undotbs03.dbf'
SIZE 1024M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED;
ALTER SYSTEM SET undo_tablespace = 'UNDOTBS3' SID = 'prdb3';
host srvctl start instance -db prdb -instance prdb3
host srvctl start pdb -db prdb
-- Check CDB Tablespace and Data Files
alter session set container = CDB$ROOT;
col TS_NAME format a10
col DF_NAME format a40
col CID format 999
col SIZE_MB format 9999
col MEXT_MB format 9999
set lines 120 pages 9999
select
TABLESPACE_NAME TS_NAME,FILE_NAME DF_NAME,
BYTES / 1024 / 1024 SIZE_MB,
INCREMENT_BY * 8 / 1024 NEXT_MB
from DBA_DATA_FILES
order by 1,2;
-- Check PDB Tablespace and Data Files
alter session set container="prpdb";
select
TABLESPACE_NAME TS_NAME,FILE_NAME DF_NAME,
BYTES / 1024 / 1024 SIZE_MB,
INCREMENT_BY * 8 / 1024 NEXT_MB
from DBA_DATA_FILES
order by 1,2;
-- Check CDB and PDB Status
host srvctl status database -db prdb
host srvctl status pdb -db prdb -pdb prpdb
exit;
追加インスタンス用にCDBのUNDO表領域、REDOログ・グループ、PDBのUNDO表領域を作成した後でCDB、PDBの表領域情報とリソース状態を出力します。
Oracle RAC DBインスタンス追加スクリプトの実行
DBサーバ#1のoracleユーザでインスタンス追加スクリプトを実行します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
./prdb1.sh
スクリプトの実行中にエラーメッセージが出力されず、CDB・PDBともに追加インスタンス用のUNDO表領域が作成されていること、スクリプトの終了時にすべてのノードでCDB・PDBが起動していることを確認できればOracle RAC DBインスタンスの追加は完了です。
インスタンスの追加が終わったらDBサーバ#3でoracleユーザの.bash_profile に環境変数設定を追記して保存します。
【prsdb03 / oracleユーザの.bash_profileに追記】
-----------------------------------------------------------------------------
export LANG=ja_JP.UTF-8
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/21.0.0/dbhome_1
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
export ORACLE_SID=prdb3
export PATH=${ORACLE_HOME}/bin:${PATH}
DBサーバ#3のoracleユーザがローカルのDBインスタンスに接続できること、自ノードのHugePagesが正常に使用されていることを確認します。
【prsdb03 / oracleユーザで実行】
-----------------------------------------------------------------------------
# oracleユーザからログアウト
exit
# oracleユーザで再ログイン(スイッチ・ユーザ)
su - oracle
# sqlplusを起動してDBインスタンスに接続
sqlplus / as sysdba
# 接続しているインスタンスがprdb3であることを確認
select instance_name from v$instance;
# sqlplus終了
exit
# HugePages使用状況確認
grep HugePages /proc/meminfo
バッチ・アプリケーション接続用サービスの追加
一応、DBサーバ#3のDBインスタンス(PDB)は更新処理用を想定しています。このインスタンスをプライマリ・ノードとするバッチ・アプリケーション接続用サービスを作成します。
DBサーバ#1のoracleユーザで以下のコマンドを実行します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# バッチ・アプリケーション接続用サービス作成(1行で記述)
srvctl add service -database prdb -service batch_srv -pdb prpdb -preferred prdb3 -available prdb2 -failback NO -tafpolicy BASIC -policy AUTOMATIC -notification TRUE -failovertype SESSION -failoverretry 3 -failoverdelay 5
# バッチ・アプリケーション接続用サービス作成起動
srvctl start service -db prdb -service batch_srv
# バッチ・アプリケーション接続用サービス状態確認
srvctl status service -db prdb
# バッチ・アプリケーション接続用サービス設定確認
srvctl config service -db prdb -service batch_srv
# batch_srv接続確認(1行で記述)
sqlplus pdbadmin@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = prsdb03)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = batch_srv)))
Oracle Netサービス追加
DBサーバ#3のDBインスタンス接続及びPDB接続に使用するOracle Netサービスを追加します。
まずDBサーバ#1 oracleユーザでVNC Serverを起動します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
vncserver :1
VNC ViewerでDBサーバ#1に接続してターミナルからNETCAを起動します。
【prsdb01 / VNC Viewerで実行】
-----------------------------------------------------------------------------
netca
下の操作でDBサーバ#3のOracle Netサービスを作成します。
No. | 画面 | 操作 |
1 | Real Application Cluster-構成 | 「クラスタ構成(C)」を選択 |
2 | ようこそ | 「ローカル・ネット・サービス名構成(S)」を選択 |
3 | ネット・サービス名の構成 | 「追加(A)」を選択 |
4 | サービス名 | サービス名(S):下表「Netサービス設定値」参照 |
5 | プロトコルの選択 | 「TCP」を選択 |
6 | TCP/IPプロトコル | ホスト名(H):下表「Netサービス設定値」参照 「標準ポート番号の1521を使用(S)」を選択 |
7 | テスト | 「はい、テストを実行します(Y)」を選択 |
8 | 接続 | ①「ログインの変更」をクリック ②以下を入力して「OK(O)」をクリック —————————————— 名前(U):system パスワード(P):<DB管理者パスワード> —————————————— ③「テストは成功しました。」と表示されることを確認 ④「次へ(N)」クリック |
9 | ネット・サービス名 | ネット・サービス名(S):下表「Netサービス設定値」参照 |
10 | 別のサービス名を構成 | すべてのNetサービスの構成が終わった場合は「いいえ(O)」をクリック → No.11へ 構成するNetサービスが残っている場合は「はい(Y)」をクリック → No.4へ |
11 | サービス名の構成が終了しました | 「次へ(N)」クリック |
12 | ようこそ | 「終了(E)」クリック |
【Netサービス設定値】
サービス名 | ホスト名 | ネット・サービス名 |
prdb | prsdb03-vip.exsample.lan | prdb3 |
prpdb | prsdb03-vip.exsample.lan | prpdb3 |
作成したサービスを使用してDBサーバ#3のCDB、PDBに接続できることを確認します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# SCANでCDBに接続
sqlplus system@prdb3
conn system@prpdb3
exit
接続に問題がなければtnsnames.oraを DBサーバ#2、DBサーバ#3 に転送します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
scp /opt/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora prsdb02:/opt/app/oracle/homes/OraDB21Home1/network/admin/
scp /opt/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora prsdb03:/opt/app/oracle/homes/OraDB21Home1/network/admin/
DBサーバ構築は以上で終了です。次はアプリケーション・サーバの構築を行います。
コメント