Oracle DB構築(2ノードRAC)
DB構成概要
物理構成
「DBサーバ構築 1(全体構成)」にも書いた通りOracle 20c以降非マルチテナント構成はサポート対象外となったのでマルチテナントで構成します。安易なネーミングではありますが本番DB(CDB)名はPRDB、PDB名はPRPDBとします。
ASMディスク・グループ
DB用に用意したディスクグループはDG02(20GB)、DG11(20GB)、DG21(60GB)の3つです。ストレージ機能を使用したDBオンライン・バックアップではDG21を構成するASMディスク(asmd201、asmd202)を対象にスナップ・ショットを取得します。
制御ファイル
制御ファイルはDG11とDG21にひとつずつ作成します。DBのリカバリを行うときにどちらの制御ファイルを使用するかはケース・バイ・ケースですが、これはリカバリ検証で確認するとしましょう。
初期化パラメータファイル、パスワードファイル
初期化パラメータファイル、パスワードファイルはバックアップ対象に含めるためDG21に格納します。
REDOログ、一時ファイル
DBのリカバリを行うときにバックアップからのリストアが不要なREDOログ、CDBとPDBの一時ファイルはDG11に格納します。
データファイル、PDB Seed
CDB、PDBのデータファイルはDBリカバリ時のリストア対象となるのでDG21に格納します。サイズが小さいPDB Seedは一時ファイルも含めてすべてDG21に格納します。
現在のところアプリケーション要件はないのでユーザ表領域はとりあえずデフォルトのUSERSだけ作成します。今後何か要件がでてきたらよしなに追加します。
【制御ファイル】
制御ファイル | パス |
1 | DG11/PRDB/ctl/control01.ctl |
2 | DG21/PRDB/ctl/control01.ctl |
【REDOログ】
スレッド | グループ | メンバ | サイズ(M) |
1 | 11 | DG11/PRDB/log/redo11_1.log DG11/PRDB/log/redo11_2.log | 256 256 |
1 | 12 | DG11/PRDB/log/redo12_1.log DG11/PRDB/log/redo12_2.log | 256 256 |
1 | 13 | DG11/PRDB/log/redo13_1.log DG11/PRDB/log/redo13_2.log | 256 256 |
2 | 21 | DG11/PRDB/log/redo21_1.log DG11/PRDB/log/redo21_2.log | 256 256 |
2 | 22 | DG11/PRDB/log/redo22_1.log DG11/PRDB/log/redo22_2.log | 256 256 |
2 | 23 | DG11/PRDB/log/redo23_1.log DG11/PRDB/log/redo23_2.log | 256 256 |
【表領域】
コンテナ | 表領域 | データファイル | サイズ(M) | 自動拡張 | 増分(M) |
CDB | SYSTEM | +DG21/PRDB/dbf/system01.dbf | 1024 | ON | 16 |
CDB | SYSAUX | +DG21/PRDB/dbf/sysaux01.dbf | 2048 | ON | 16 |
CDB | UNDOTBS1(prdb1) UNDOTBS2(prdb2) | +DG21/PRDB/rbs/undotbs01.dbf +DG21/PRDB/rbs/undotbs02.dbf | 1024 1024 | ON | 16 |
CDB | TEMP | +DG11/PRDB/tmp/temp01.dbf | 2048 | ON | 16 |
CDB | USERS | +DG21/PRDB/prpdb/users01.dbf | 16 | ON | 4 |
SEED | SYSTEM | +DG21/PRDDB/pdbseed/system01.dbf | 210 | ON | 16 |
SEED | SYSAUX | +DG21/PRDDB/pdbseed/sysaux01.dbf | 165 | ON | 16 |
SEED | UNDOTBS1 | +DG21/PRDDB/pdbseed/undotbs01.dbf | 60 | ON | 16 |
SEED | TEMP | +DG21/PRDDB/pdbseed/temp01.dbf | 20 | ON | 16 |
PDB | SYSTEM | +DG21/PRDB/prpdb/system01.dbf | 1024 | ON | 16 |
PDB | SYSAUX | +DG21/PRDB/prpdb/sysaux01.dbf | 2048 | ON | 16 |
PDB | UNDOTBS1(prdb1) UNDOTBS2(prdb2) | +DG21/PRDB/prpdb/undotbs01.dbf +DG21/PRDB/prpdb/undotbs02.dbf | 1024 1024 | ON | 16 |
PDB | TEMP | +DG11/PRDB/prpdb/temp01.dbf | 2048 | ON | 16 |
PDB | USERS | +DG21/PRDB/prpdb/users01.dbf | 16 | ON | 4 |
メモリ割り当て
本番DBはHuge Pageを設定して自動共有メモリー管理(ASMM)を使用します。
ASMMではSGAとPGAのサイズを決めなきゃなりませんが、もともと性能要件があってサーバのリソースを決めているわけではありません。
本来とは逆となりますが現在搭載しているメモリのうちどれぐらいが使用可能かでSGAとPGAを決定します。ちなみに実機を確認してみたところGrid Infrastructureが4GB弱、OSが600MB程度使用しており残りは約7.5GBでした。
DBへのクライアント接続数は内部処理を除き通常時200本(2台のAPサーバから各100本)を想定しています。どちらかのDBインスタンスがダウンした場合は接続フェイルオーバによって片寄せされるので最大400本となります。
DB接続ごとに専用サーバ・プロセスが作業域とは別に確保するメモリ(PTEやスタック等の分)、DBバックグラウンド・プロセスが確保するメモリ、後で実装する予定の監視エージェント等の使用メモリをざっくり見積もってひとまず以下のようにSGA、PGA、processesを設定します。
【初期化パラメータ】
パラメータ | 値 |
sga_target | 3584M(3.5GB) |
pga_aggregate_target | 1024M(1.0GB) |
processes | 1000 |
DBサービス
本番DBのアプリケーション接続用にオンライン・アプリケーション接続用とバッチ・アプリケーション接続用の2種類のDBサービスを追加します。
バッチ・サービスは障害時に接続切り替えができればまあいいや、ぐらいの感じですが、オンライン・サービスはWebLogicのActive GridLinkを使ったワークロードの負荷分散やマルチ・データソースとの比較なんかをいろいろ試してみたいと思います。
サービス名 | 用途 | 設定 |
online_srv | オンライン・アプリケーション接続用 | PDB:prdpdb 優先インスタンス:prddb1,prddb2 フェイルバック:NO TAFポリシー:BASIC サービス管理ポリシー:AUTOMATIC 高速アプリケーション通知:TRUE 接続時ロード・バランシング目標:SHORT フェイルオーバー・タイプ:SESSION ランタイム・ロード・バランシングの目標:THROUGHPUT 接続リトライ回数:3 再接続試行間の時間遅延(秒):5 |
batch_srv | バッチ・アプリケーション接続用 | PDB:prdpdb 優先インスタンス:prddb3 使用可能インスタンス:prddb2 フェイルバック:NO TAFポリシー:BASIC 高速アプリケーション通知:TRUE フェイルオーバー・タイプ:SESSION 接続リトライ回数:3 再接続試行間の時間遅延(秒):5 |
DB構築
Oracle 21cのDBCAはOMFを使用しないDBを作成しようとするとエラーになったりPDBの構成を指定できなかったりなので(たぶんPDBは最低限のガラだけ作るから勝手にいじれという考え方じゃないかと)、DBCAでスクリプトを生成してカスタマイズ、実行という流れでDBを構築します。
ちなみにOMFを使用しないDBをDBCAで作成しようとするこうになります
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01501: CREATE DATABASE failed
ORA-01519: error while processing file '?/rdbms/admin/dcore.bsq' near line 1245
ORA-01519: error while processing file '?/rdbms/admin/dcore.bsq' near line 202
ORA-00604: error occurred at recursive SQL level 1
ORA-01119: error in creating database file '+DG21/TESTDB/pdbseed/system01.dbf'
ORA-17502: ksfdcre:4 Failed to create file +DG21/TESTDB/pdbseed/system01.dbf
ORA-15173: entry 'pdbseed' does not exist in directory 'TESTDB'
※DBCAで直接DBを作成せずスクリプトを生成して実行した場合はOMFを使用しなくてもエラーにならずDBができちゃったりします。なんなんすかね
DBCAによるDB作成スクリプトの生成
DBCAでDB構築スクリプトを生成します。
DBサーバ#1のOracleユーザでVNC Serverを起動、VNC VeiwerでDBサーバ#1に接続します。
【prsdb01で実行】
-----------------------------------------------------------------------------
# oracleユーザにスイッチ
su - oracle
# VNC Server起動
vncserver :1
VNC Veiwer上でターミナルを立ち上げてDBCAを起動、操作手順を参考にDB構築スクリプトを生成します。
【prsdb01 / VNC Viewerで実行】
-----------------------------------------------------------------------------
dbca
【DBCA操作手順】
No. | 画面 | 操作 |
1 | データベース操作の選択 | 「データベースの作成(C)」を選択 |
2 | 作成モード | 「拡張構成(V)」を選択 |
3 | データベース・デプロイメント ・タイプの選択 | データベース・タイプ(D):「Oracle Real Application Cluster…(C)」 データベース管理ポリシー(M):「自動」 テンプレート名:カスタム・データベース |
4 | ノード・リストの選択 | prsdb01、prsdb02にチェックが入っていることを確認 |
5 | データベースの詳細の指定 | グローバル・データベース名(G):prdb SID接頭辞(S):prdb PDB用のローカルUNDO表領域の使用(L):チェック 「1つ以上のPDBを含むコンテナ・データベースの作成(A)」を選択 PDBの数(U):1 PDB名(P):prpdb |
6 | データベース記憶域オプションの選択 | 「データベース記憶域属性に次を使用(F)」選択 データベース・ファイルの記憶域タイプ(D):「自動ストレージ管理(ASM)」選択 データベース・ファイルの位置(L):+DG21/{DB_UNIQUE_NAME} Oracle Managed Files(OMF)の使用(O):チェックしない ※OMFを使用しないことについての確認メッセージには「はい(Y)」クリック |
7 | 高速リカバリ・オプションの選択 | すべてチェックしない |
8 | データベース・オプションの選択 | コンポーネント選択のチェックをすべて外す |
9 | 構成オプションの指定 | 「メモリー(M)」タブ —————————————————– 「自動メモリー管理を使用(U)」を選択 SGAサイズ(G):3584 MB PGAサイズ(P):1024 MB —————————————————– 「サイズ設定(S)」タブ —————————————————– ブロック・サイズ(L):8192 処理(P):1000 |
10 | 管理オプションの指定 | 「クラスタ検証ユーティリティ(CVU)・チェックを定期的に実行(V)」のみチェック (上記以外はチェックしない) |
11 | データベース・ユーザー資格証明の指定 | 「すべてのアカウントに同じ管理パスワードを使用(U)」選択 パスワード(P):<DB管理者パスワード> パスワードの確認(C):<DB管理者パスワード> |
12 | データベース作成オプションの選択 | 「データベースの作成(C)」:チェックしない 「データベース・テンプレートとして保存(T)」:チェックしない 「データベース:作成スクリプトの生成」:チェック 宛先ディレクトリ:{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/scripys 「記憶幾の場所のカスタマイズ」をクリック |
「データベース作成オプションの選択」の「記憶幾の場所のカスタマイズ」をクリックすると「記憶域のカスタマイズ」画面が表示されます。スクリプトを手で直す箇所がなるべく少なくなるよう、ここでできる限り最終形に近い形に編集します。ただしデータファイルと一時ファイルのサイズはスクリプト内で設定するのでデフォルトのままにしておきます。
なお、「記憶幾の場所のカスタマイズ」をクリックした場合のデータファイル、一時ファイルのパスは小文字の”prdb”、制御ファイルとREDOログのパスは{DB_UNIQUE_NAME}で”PRDB”(大文字)がセットされます。いやらしいことにDB側は大文字小文字をしっかり識別しているのでデータファイル、一時ファイルのパスも{DB_UNIQUE_NAME}に統一します。
「記憶域のカスタマイズ」画面の設定内容は以下の通りです。
【記憶域のカスタマイズ画面操作】
No. | 設定対象 | 設定内容 |
1 | Control Files | ファイル名 パス control01.cll +DG11/{DB_UNIQUE_NAME}/ctl/ control02.cll +DG21/{DB_UNIQUE_NAME}/ctl/ |
2 | SYSAUX | ファイル名:+DG21/{DB_UNIQUE_NAME}/dbf/sysaux01.dbf |
3 | SYSTEM | ファイル名:+DG21/{DB_UNIQUE_NAME}/dbf/system01.dbf |
4 | TEMP | ファイル名:+DG11/{DB_UNIQUE_NAME}/tmp/temp01.dbf |
5 | UNDOTBS1 | ファイル名:+DG21/{DB_UNIQUE_NAME}/rbs/undotbs01.dbf |
6 | UNDOTBS2 | ファイル名:+DG21/{DB_UNIQUE_NAME}/rbs/undotbs0.dbf |
7 | USERS | ファイル名:+DG21/{DB_UNIQUE_NAME}/dbf/users01.dbf |
8 | Redo log Groups 11 ※Redo log Groups下の「1」をクリック | グループ番号(G):1 → 11に変更 ファイルサイズ(H):256 MB スレッド'(I):1 REDOログ・メンバー / ファイル名: +DG11/{DB_UNIQUE_NAME}/log/redo11_1.log +DG11/{DB_UNIQUE_NAME}/log/redo11_2.log (追加) |
9 | Redo log Groups 12 ※Redo log Groups下の「2」をクリック | グループ番号(G):2 → 12に変更 ファイルサイズ(H):256 MB スレッド'(I):1 REDOログ・メンバー / ファイル名: +DG11/{DB_UNIQUE_NAME}/log/redo11_1.log +DG11/{DB_UNIQUE_NAME}/log/redo11_2.log (追加) |
10 | Redo log Groups 13 ※Redo log Groups → 「追加(B)」をクリック | グループ番号(G):13 ファイルサイズ(H):256 MB スレッド'(I):1 REDOログ・メンバー / ファイル名: +DG11/{DB_UNIQUE_NAME}/log/redo13_1.log +DG11/{DB_UNIQUE_NAME}/log/redo13_2.log |
11 | Redo log Groups 21 ※Redo log Groups下の「3」をクリック | グループ番号(G):3 → 21に変更 ファイルサイズ(H):256 MB スレッド'(I):2 REDOログ・メンバー / ファイル名: +DG11/{DB_UNIQUE_NAME}/log/redo21_1.log +DG11/{DB_UNIQUE_NAME}/log/redo21_2.log (追加) |
12 | Redo log Groups 22 ※Redo log Groups下の「4」をクリック | グループ番号(G):4 → 22に変更 ファイルサイズ(H):256 MB スレッド'(I):2 REDOログ・メンバー / ファイル名: +DG11/{DB_UNIQUE_NAME}/log/redo22_1.log +DG11/{DB_UNIQUE_NAME}/log/redo22_2.log (追加) |
13 | Redo log Groups 23 ※Redo log Groups → 「追加(B)」をクリック | グループ番号(G):23 ファイルサイズ(H):256 MB スレッド'(I):2 REDOログ・メンバー / ファイル名: +DG11/{DB_UNIQUE_NAME}/log/redo23_1.log +DG11/{DB_UNIQUE_NAME}/log/redo23_2.log |
14 | – | 「OK(A)」クリック |
「記憶域のカスタマイズ」設定後はDBCAの指示に従い画面を先に進め、DB構築スクリプトの生成が正常に作成されたことを確認します。
DB作成スクリプトの編集と実行
DBCAによって生成されたスクリプトをバックアップしてから編集します。
【prsdb01 oracleユーザで実行】
-----------------------------------------------------------------------------
# DB作成スクリプトの作成フォルダに移動
cd /opt/app/oracle/admin/prdb
# DB作成スクリプトをバックアップ
zip -r /tmp/prdb_scripts_org.zip scripts/
# スクリプトを修正(編集内容は下に記載)
vi prdb1.sh
vi mkDir.sql
vi prdb1.sql
vi CreateDB.sql
vi CreateDBFiles.sql
vi plug_prpdb.sql
vi postPDBCreation_prpdb.sql
# 編集したシェルをバックアップ
zip -r /tmp/create_pdb_bkup.zip ../scripts/
スクリプト編集内容(ファイル名クリックでコードを表示)
prdb1.sh
#!/bin/sh
# edit prdb.sh begin
if [ -z "${ORACLE_HOME}" ] ; then
echo "ORACLE_HOME not set!! Please set ORACLE_HOME"
exit 1
fi
if [ ! -d "${ORACLE_HOME}" ] ; then
echo "ORACLE HOME directory does not exist"
exit 1
fi
/opt/app/oracle/product/21.0.0/dbhome_1/bin/asmcmd --privilege sysdba rm -rf +DG11/PRDB
/opt/app/oracle/product/21.0.0/dbhome_1/bin/asmcmd --privilege sysdba rm -rf +DG21/PRDB
# edit prdb.sh end
DB_HOME=$ORACLE_HOME
ASM_HOME=/opt/app/21.0.0/grid
ORACLE_HOME=$ASM_HOME; export ORACLE_HOME
ORACLE_SID=+ASM1; export ORACLE_SID
PERL5LIB=$ORACLE_HOME/rdbms/admin:$PERL5LIB; export PERL5LIB
/opt/app/21.0.0/grid/bin/sqlplus /nolog @/opt/app/oracle/admin/prdb/scripts/mkDir.sql
ORACLE_HOME=$DB_HOME; export ORACLE_HOME
OLD_UMASK=`umask`
umask 0027
mkdir -p /opt/app/oracle
mkdir -p /opt/app/oracle/admin/prdb/adump
mkdir -p /opt/app/oracle/admin/prdb/dpdump
mkdir -p /opt/app/oracle/admin/prdb/hdump
mkdir -p /opt/app/oracle/admin/prdb/pfile
mkdir -p /opt/app/oracle/admin/prdb/scripts
mkdir -p /opt/app/oracle/audit
# add prdb.sh begin
ssh prsdb02 "umask 0027;mkdir -p /opt/app/oracle/audit"
ssh prsdb02 "umask 0027;mkdir -p /opt/app/oracle/admin"
scp -rp /opt/app/oracle/admin/prdb prsdb02:/opt/app/oracle/admin/
# add prdb.sh end
umask ${OLD_UMASK}
PERL5LIB=$ORACLE_HOME/rdbms/admin:$PERL5LIB; export PERL5LIB
ORACLE_SID=prdb1; export ORACLE_SID
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/perl/bin:$PATH; export PATH
/opt/app/oracle/product/21.0.0/dbhome_1/bin/sqlplus /nolog @/opt/app/oracle/admin/prdb/scripts/prdb1.sql
スクリプトの実行が失敗してリトライするには前回実行時に作成したASMディレクトリ削除する必要があるため、既存のASMディレクトリを一旦すべて削除するコマンドを追加します。
mkDir.sql
SET VERIFY OFF
connect / as SYSDBA;
alter diskgroup DG11 add directory '+DG11/PRDB';
alter diskgroup DG11 add directory '+DG11/PRDB/ctl';
alter diskgroup DG11 add directory '+DG11/PRDB/log';
alter diskgroup DG11 add directory '+DG11/PRDB/tmp';
alter diskgroup DG11 add directory '+DG11/PRDB/prpdb';
alter diskgroup DG21 add directory '+DG21/PRDB';
alter diskgroup DG21 add directory '+DG21/PRDB/ctl';
alter diskgroup DG21 add directory '+DG21/PRDB/dbf';
alter diskgroup DG21 add directory '+DG21/PRDB/pdbseed';
alter diskgroup DG21 add directory '+DG21/PRDB/prpdb';
alter diskgroup DG21 add directory '+DG21/PRDB/rbs';
exit;
複数のディスクグループにまたがるDB作成スクリプト、DBCAの場所指定で入力したディスク・グループ(DG21)以外のディスク・グループ(DG11)の最上位ディレクトリ作成が抜けているんですよねぇ…
このまま実行するといきなりサブディレクトリの作成から始めて後続処理が軒並み失敗するのでDG11の最上位ディレクトリ作成を追加します。また、PDBの一時ファイルを格納するためのディレクトリもDG11に作成します。
prdb1.sql
set verify off
define sysPassword = 'oracle';
define systemPassword = '&&sysPassword';
define dbsnmpPassword = '&&sysPassword';
define pdbAdminPassword = '&&sysPassword';
host /opt/app/oracle/product/21.0.0/dbhome_1/bin/srvctl add database -d prdb -pwfile +DG21/PRDB/orapwprdb -o /opt/app/oracle/product/21.0.0/dbhome_1 -n prdb -a "DG11,DG21"
host /opt/app/oracle/product/21.0.0/dbhome_1/bin/srvctl add instance -d prdb -i prdb1 -n prsdb01
host /opt/app/oracle/product/21.0.0/dbhome_1/bin/srvctl add instance -d prdb -i prdb2 -n prsdb02
host /opt/app/oracle/product/21.0.0/dbhome_1/bin/srvctl disable database -d prdb
host /opt/app/oracle/product/21.0.0/dbhome_1/bin/orapwd file=+DG21/PRDB/orapwprdb force=y format=12 dbuniquename=prdb password=&&sysPassword
host /opt/app/21.0.0/grid/bin/setasmgidwrap o=/opt/app/oracle/product/21.0.0/dbhome_1/bin/oracle
@/opt/app/oracle/admin/prdb/scripts/CreateDB.sql
@/opt/app/oracle/admin/prdb/scripts/CreateDBFiles.sql
@/opt/app/oracle/admin/prdb/scripts/CreateDBCatalog.sql
@/opt/app/oracle/admin/prdb/scripts/CreateClustDBViews.sql
@/opt/app/oracle/admin/prdb/scripts/lockAccount.sql
@/opt/app/oracle/admin/prdb/scripts/postDBCreation.sql
@/opt/app/oracle/admin/prdb/scripts/PDBCreation.sql
@/opt/app/oracle/admin/prdb/scripts/plug_prpdb.sql
@/opt/app/oracle/admin/prdb/scripts/postPDBCreation_prpdb.sql
DBCA実行中に入力した管理者パスワードはスクリプトには反映されず手動入力が求められてしまいます。タイプミスの恐れもあるので管理者パスワードをベタギリで変数に設定します。また、DBリソース登録のディスクグループ指定からDG11が抜けているので追加します。
CreateDB.sql
SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool /opt/app/oracle/admin/prdb/scripts/CreateDB.log append
startup nomount pfile="/opt/app/oracle/admin/prdb/scripts/init.ora";
CREATE DATABASE "prdb"
MAXINSTANCES 32
MAXLOGHISTORY 1
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
DATAFILE '+DG21/PRDB/dbf/system01.dbf' SIZE 720M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '+DG21/PRDB/dbf/sysaux01.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '+DG11/PRDB/tmp/temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE '+DG21/PRDB/rbs/undotbs01.dbf' SIZE 256M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 11 ('+DG11/PRDB/log/redo11_1.log','+DG11/PRDB/log/redo11_2.log') SIZE 256M,
GROUP 12 ('+DG11/PRDB/log/redo12_1.log','+DG11/PRDB/log/redo12_2.log') SIZE 256M,
GROUP 13 ('+DG11/PRDB/log/redo13_1.log','+DG11/PRDB/log/redo13_2.log') SIZE 256M
USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword"
enable pluggable database
seed file_name_convert=('+DG21/PRDB/dbf/system01.dbf','+DG21/PRDB/pdbseed/system01.dbf','+DG21/PRDB/dbf/sysaux01.dbf','+DG21/PRDB/pdbseed/sysaux01.dbf','+DG11/PRDB/tmp/temp01.dbf','+DG21/PRDB/pdbseed/temp01.dbf','+DG21/PRDB/rbs/undotbs01.dbf','+DG21/PRDB/pdbseed/undotbs01.dbf') LOCAL UNDO ON;
spool off
PDB seed、PDBのデータファイル属性はCDBから継承するためCDBを作成する段階で増分サイズを設定します。データファイル・サイズの変更はCDBまたはPDBを作成した後で行います。
CreateDBFiles.sql
SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool /opt/app/oracle/admin/prdb/scripts/CreateDBFiles.log append
CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE '+DG21/PRDB/rbs/undotbs02.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED;
CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '+DG21/PRDB/dbf/users01.dbf' SIZE 16M REUSE AUTOEXTEND ON NEXT 4M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
ALTER DATABASE DEFAULT TABLESPACE "USERS";
ALTER DATABASE DATAFILE '+DG21/PRDB/dbf/sysaux01.dbf' RESIZE 2048M;
ALTER DATABASE DATAFILE '+DG21/PRDB/dbf/system01.dbf' RESIZE 1024M;
ALTER DATABASE DATAFILE '+DG21/PRDB/rbs/undotbs01.dbf' RESIZE 1024M;
ALTER DATABASE TEMPFILE '+DG11/PRDB/tmp/temp01.dbf' RESIZE 2048M;
spool off
USERS表領域と2番目のノードのUNDO表領域作成、CDBのデータファイル・リサイズをここで実行します。
plug_prpdb.sql
SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool /opt/app/oracle/admin/prdb/scripts/plugDatabase.log append
spool /opt/app/oracle/admin/prdb/scripts/plugDatabase.log append
select d.name||'|'||t.name from v$datafile d,V$TABLESPACE t where d.con_id=2 and d.ts#=t.ts# and d.con_id=t.con_id;
select d.name||'|'||t.name from v$tempfile d,V$TABLESPACE t where d.con_id=2 and d.ts#=t.ts# and d.con_id=t.con_id;
CREATE PLUGGABLE DATABASE "prpdb" ADMIN USER PDBADMIN IDENTIFIED BY "&&pdbadminPassword" ROLES=(CONNECT) file_name_convert=('+DG21/PRDB/pdbseed',
'+DG21/PRDB/prpdb','+DG21/PRDB/pdbseed/temp01.dbf','+DG11/PRDB/prpdb/temp01.dbf') STORAGE ( MAXSIZE UNLIMITED MAX_SHARED_TEMP_SIZE UNLIMITED);
select name from v$containers where upper(name) = 'PRPDB';
-- modfy plug_prpdb.sql begin
alter pluggable database "prpdb" open;
-- alter pluggable database "prpdb" open instances=all;
-- alter system register;
-- ALTER SESSION SET CONTAINER = "prpdb";
-- modfy plug_prpdb.sql end
PDB seedからPDBを作成するタイミングでfile_name_convertを使用してPDBの一時ファイルをDG11に配置します。
また、ローカルUNDO表領域がよろしくないネーミングで作成されてしまう問題に対応するため全ノードのPDBをオープンせず管理サーバ#1のインスタンスだけPDBをオープンするように変更します。
postPDBCreation_prpdb.sql
SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
alter session set container="prpdb";
set echo on
spool /opt/app/oracle/admin/prdb/scripts/postPDBCreation.log append
CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '+DG21/PRDB/prpdb/users01.dbf' SIZE 16M REUSE AUTOEXTEND ON NEXT 4M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
ALTER DATABASE DEFAULT TABLESPACE "USERS";
-- modify pluggable database begin
ALTER DATABASE DATAFILE '+DG21/PRDB/prpdb/sysaux01.dbf' RESIZE 2048M;
ALTER DATABASE DATAFILE '+DG21/PRDB/prpdb/system01.dbf' RESIZE 1024M;
ALTER DATABASE DATAFILE '+DG21/PRDB/prpdb/undotbs01.dbf' RESIZE 1024M;
ALTER DATABASE TEMPFILE '+DG11/PRDB/prpdb/temp01.dbf' RESIZE 2048M;
CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '+DG21/PRDB/prpdb/undotbs02.dbf'
SIZE 1024M REUSE AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED;
ALTER SYSTEM SET undo_tablespace = 'UNDOTBS1' SID = 'prdb1';
ALTER SYSTEM SET undo_tablespace = 'UNDOTBS2' SID = 'prdb2';
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER PLUGGABLE DATABASE "prpdb" close;
ALTER PLUGGABLE DATABASE "prpdb" OPEN INSTANCES=all;
ALTER SYSTEM REGISTER;
ALTER SESSION SET CONTAINER = "prpdb";
-- modify pluggable database end
host /opt/app/oracle/product/21.0.0/dbhome_1/OPatch/datapatch -skip_upgrade_check -db prdb1 -pdbs prpdb;
connect "SYS"/"&&sysPassword" as SYSDBA
select property_value from database_properties where property_name='LOCAL_UNDO_ENABLED';
connect "SYS"/"&&sysPassword" as SYSDBA
alter session set container="prpdb";
set echo on
spool /opt/app/oracle/admin/prdb/scripts/postPDBCreation.log append
connect "SYS"/"&&sysPassword" as SYSDBA
-- tablespace info prdb begin
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
union
select
TABLESPACE_NAME TS_NAME,FILE_NAME DF_NAME,
BYTES / 1024 / 1024 SIZE_MB,
INCREMENT_BY * 8 / 1024 NEXT_MB
from DBA_TEMP_FILES
order by 1;
-- tablespace info prdb end
alter session set container="prpdb";
set echo on
spool /opt/app/oracle/admin/prdb/scripts/postPDBCreation.log append
select TABLESPACE_NAME from cdb_tablespaces a,dba_pdbs b where a.con_id=b.con_id and UPPER(b.pdb_name)=UPPER('prpdb');
connect "SYS"/"&&sysPassword" as SYSDBA
alter session set container="prpdb";
set echo on
spool /opt/app/oracle/admin/prdb/scripts/postPDBCreation.log append
select TABLESPACE_NAME from cdb_tablespaces a,dba_pdbs b where a.con_id=b.con_id and UPPER(b.pdb_name)=UPPER('prpdb');
-- tablespace info prpdb begin
select
TABLESPACE_NAME TS_NAME,FILE_NAME DF_NAME,
BYTES / 1024 / 1024 SIZE_MB,
INCREMENT_BY * 8 / 1024 NEXT_MB
from DBA_DATA_FILES
union
select
TABLESPACE_NAME TS_NAME,FILE_NAME DF_NAME,
BYTES / 1024 / 1024 SIZE_MB,
INCREMENT_BY * 8 / 1024 NEXT_MB
from DBA_TEMP_FILES
order by 1;
-- tablespace info prpdb end
connect "SYS"/"&&sysPassword" as SYSDBA
alter session set container="prpdb";
set echo on
spool /opt/app/oracle/admin/prdb/scripts/postPDBCreation.log append
Select count(*) from dba_registry where comp_id = 'DV' and status='VALID';
alter session set container=CDB$ROOT;
exit;
2番目以降のノードのローカルUNDO表領域はそのノードでPDBが最初に起動したとき表領域名”UNDO_x”、データファイル名”system01_ix_undo.dbf”という変なネーミングで作成されてしまいます。
後で別のローカルUNDO表領域を作って差し替えてもいいですが、わざわざそれをやるのも面倒なので2番目のノードのPDBをオープンする前に1番目のノードで2番目のノードのローカルUNDO表領域を作ってしまいます。
また、Oracle DB21cはどうかわかりませんが以前のバージョンではPDBのローカルUNDO表領域がインスタンス固定ではなかったので(PDBをオープンする順序によって入れ替わったりする)、念のためローカルUNDO表領域のインスタンス固定もここでやってしまいます。
編集が終わったらスクリプトに含まれているシェル(prdb1.sh)を実行します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
./prdb1.sh
スクリプトの実行中にエラーメッセージが出力されず、最後に表示されるCDB及びPDBの表領域構成が設計通りであることを確認できればDB作成は完了です。
スクリプトの実行が失敗したり強制終了した場合の対応
スクリプトが異常終了したり実行中にエラーが出力されたことで強制終了した場合、ただ問題個所を修正して再実行するだけでは大半のケースで致命的かどうかはともかくエラーが発生します。
DBCAを使って作成がうまくいかなかったDBを削除できればいいのですが、そもそもDBが作成できていなければDBCAでの削除できません。環境を手動でスクリプト実行前の状態に戻す必要があります。
ということで、DB作成をしくじってリトライする前にやっておく手順を以下に記載します。
DBバックグラウンド・プロセス停止
DBの作成が失敗してもDBバックグラウンド・プロセスは起動したままということが結構あったります。スクリプトを再実行する前にDBバックグラウンド・プロセスの状態を確認して起動している場合は停止します。
【prsdb01、prdb02 / oracleユーザで実行】
-----------------------------------------------------------------------------
# バックグラウンド・プロセス起動有無の確認
ps -ef | grep ora_ | grep prdb
# ORACLE_SIDを設定
# インスタンス名 -> DBサーバ#1:prdb1、DBサーバ#2:prdb2
export ORACLE_SID=<インスタンス名>
# バックグラウンド・プロセス停止
sqlplus / as sysdba
shutdown abort
exit
DBリソース削除
スクリプトを再実行する前にクラスタから作成済みのDBリソースを削除します。この作業はDBサーバ#1からoracleアカウントで実行します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# PDBが存在する場合は削除。PDBが存在しないエラーが出た場合は無視
srvctl remove pdb -db prddb -pdb prdpdb
# CDBを削除
srvctl remove database -db prddb
初期化パラメータ・ファイルの復旧
DB作成スクリプトは途中でエラーが発生してもそこで止まらずにどんどん処理を進めてしまいます。で、ある程度のところまで進むとスクリプトに含まれているinit.oraに”cluster_database=true”というパラメータ設定を追加、このファイルを元にSPファイルを作成します。
このinit.oraはDB作成時のバックグラウンド・プロセス起動にも使用されるのですが、この段階ではまだDBはRAC構成ではないため、スクリプトを再実行したときに”cluster_database=true”が設定されていると「ORA-12720」でCreate Databaseコマンドが異常終了してしまいます。
CREATE DATABASE "testdb"
*
行1でエラーが発生しました。:
ORA-01501: CREATE DATABASE?????????????
→ 「ORA-01501: CREATE DATABASE文でエラーが発生しました。」
ORA-12720: ??????????????EXCLUSIVE????????????????
→ 「ORA-12720: この操作では、データベースをEXCLUSIVEモードに設定する必要があります。」
スクリプトを再実行する場合はinit.oraを確認してファイルの末尾に”cluster_database=true”が設定されていたらこのパラメータを削除します。
ORACLE_SID設定
管理DBサーバ#1と管理サーバ#2のoracleユーザの.bash_prfileにORACLE_SIDを設定します。
【prsdb01 / oracleユーザの.bash_profileに以下の環境変数を追加】
-----------------------------------------------------------------------------
export ORACLE_SID=prdb1
-----------------------------------------------------------------------------
【prsdb02 / oracleユーザの.bash_profileに以下の環境変数を追加】
-----------------------------------------------------------------------------
export ORACLE_SID=prdb2
oracleユーザで再ログインして環境変数が正しく設定されていることを確認します。
【prsdb01、prsdb02 / oracleユーザで実行】
-----------------------------------------------------------------------------
# oracleユーザからログアウト → rootユーザへ
exit
# oracleユーザにスイッチ
su - oracle
# sqlplusでPRDBに接続
sqlplus / as sysdba
select instance_name from V$INSTANCE;
-- ORACLE_SIDと同じインスタンス名が返されることを確認
デフォルト・プロファイル設定
Oracle DBのデフォルト・プロファイルに設定されているパスワード有効期限は180日です。個人ユーザならともかくシステム・ユーザやアプリケーション・ユーザのパスワードが期限切れになったら困るのでデフォルト・プロファイルのパスワード有効期限は無制限に変更します。
【prsdb01 / sqlplusで実行】
-----------------------------------------------------------------------------
-- 現在のデフォルト・プロファイルの設定を確認
col LIMIT format a20
set pages 999
select RESOURCE_NAME,LIMIT from DBA_PROFILES where PROFILE = 'DEFAULT';
-- PASSWORD_LIFE_TIME を無期限に変更
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
-- 設定変更後のデフォルト・プロファイルの設定を確認
select RESOURCE_NAME,LIMIT from DBA_PROFILES where PROFILE = 'DEFAULT';
サービス追加
アプリケーションからの接続に使用するDBサービスを追加します。サービスはオンライン・アプリケーション接続用、バッチ・アプリケーション接続用の2種類ですがバッチ・アプリケーション接続用はDBサーバ#3をプライマリ・ノードとして使用するためここではオンライン・アプリケーション接続用サービスのみ作成します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# オンライン・アプリケーション接続用サービス追加(1行で記述)
srvctl add service -database prdb -service online_srv -pdb prpdb -preferred prdb1,prdb2 -failback NO -tafpolicy BASIC -policy AUTOMATIC -notification TRUE -clbgoal SHORT -failovertype SESSION -rlbgoal THROUGHPUT -failoverretry 3 -failoverdelay 5
# オンライン・アプリケーション接続用サービス起動
srvctl start service -db prdb -service online_srv
# オンライン・アプリケーション接続用サービス状態確認
srvctl status service -db prdb -service online_srv
# オンライン・アプリケーション接続用サービス設定確認
srvctl config service -db prdb -service online_srv
# prdb1/online_srv接続確認(1行で記述)
sqlplus pdbadmin@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = prsdb01)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = online_srv)))
exit
sqlplus pdbadmin@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = prsdb02)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = online_srv)))
exit
アーカイブログ設定
アーカイブログはASMディスクグループDG02に格納します。まず管理サーバ#1のoracleユーザでDG02にアーカイブログ格納用ディレクトリを作成します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# ASMCA起動
asmcmd --privilege sysdba
# PRDBの最上位ディレクトリ作成
mkdir +DG02/PRDB
# アーカイブログ格納用ディレクトリ作成
mkdir +DG02/PRDB/archivelog
# アーカイブログ格納用ディレクトリ確認
ls -ld +DG02/PRDB/archivelog
exit
念のため初期化パラメータファイルのバックアップを取得します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
rman target /
backup spfile;
exit
アーカイブログの出力場所を設定します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=+DG02/PRDB/archivelog' scope=both sid = '*';
exit
アーカイブログモードに切り替えます。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# DB停止
srvctl stop database -db prdb;
# DB接続
sqlplus / as sysdba
-- DBマウント
startup mount
-- アーカイブログモードに切り替え
alter database archivelog;
-- DBオープン
alter database open;
-- 現在のアーカイブログ出力状況を確認
host asmcmd --privilege sysdba ls +DG02/PRDB/archivelog
-- アーカイブログ出力
alter system archive log current;
-- 現在のアーカイブログ出力状況を確認
host asmcmd --privilege sysdba ls +DG02/PRDB/archivelog
-- DB停止
shutdown immediate;
exit
# DB起動
srvctl start database -db prdb
RMANでSPファイルのバックアップは取得しましたが、正直に言えばこれをリストアするより初期化パラメータ・ファイルからSPファイルを再作成した方がよほど手間がかかりません。
今後のために構築時に使用した初期化パラメータファイルをコピーしてこちらにもアーカイブログ出力先を追記しておきます。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
cp /opt/app/oracle/admin/prdb/scripts/init.ora /opt/app/oracle/admin/prdb/pfile/
vi /opt/app/oracle/admin/prdb/pfile/init.ora
-----------------------------------------------------------------------------
【以下を追記】
-----------------------------------------------------------------------------
*.log_archive_dest_1='LOCATION=+DG02/PRDB/archivelog'
バックアップ設定
DBはストレージの高速バックアップ機能(スナップショット)を意識して構成を考えたわけですが、毎回ASMディスクのコピーでDBバックアップを取得するのは大変面倒です。
そこで管理サーバのNFSディレクトリにDB、アーカイブログのバックアップが取得できるようにrmanを構成します。
まず、DBサーバ#1のrootユーザでDBバックアップ用のNFSディレクトリをマウント/マウント解除するためのシェルを用意します。
【prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# 既存のNFSマウント用シェルをコピー
cp /usr/local/bin/mdmount /usr/local/bin/dbmount
cp /usr/local/bin/mdumount /usr/local/bin/dbumount
# DBバックアップ用NFSディレクトリ・マウント/マウント解除シェル編集
vi /usr/local/bin/dbmount
vi /usr/local/bin/dbumount
# 動作確認
dbmount;df -m
dbumount;df -m
/usr/local/bin/dbmount
#!/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}:/db ${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/dbumount
#!/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ディレクトリをマウントしてprdbバックアップ用のディレクトリを作成します。
【prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
# DBバックアップ用NFSディレクトリ・マウント
dbmount
# ディレクトリ作成
mkdir -p /mnt/dbbkup/prdb/dbbackup
chown -R oracle:oinstall /mnt/dbbkup/prdb
DBサーバ#1のoracleユーザでrmanのバックアップ設定を行います。
【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';
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DEVICE TYPE DISK;
# 現在の設定を確認
show all;
# バックアップ動作確認
backup database plus archivelog delete all input;
exit
# バックアップ取得確認
ls -l /mnt/dbbkup/prdb/dbbackup
HugePages設定
DBが起動している状態でHugePagesの計算を行います。
Oracle DBが稼働するLinux OSのHugePages設定値を計算してくれるhugepages_settings.shというシェルがいろんなサイトで公開されているのですが、RHEL8のカーネル・バージョン(4.18)に適合しているヤツじゃないとうまく算出してくれません。
hugepages_settings.sh · GitHub に公開されているhugepages_setting.shがカーネル・バージョン4.18に対応しているのでこのシェルをDBサーバ#1にコピーさせていただきます。
【prsdb01 / rootユーザで実行】
-----------------------------------------------------------------------------
vi /tmp/hugepages_setting.sh
chmod +x /tmp/hugepages_setting.sh
/tmp/hugepages_setting.sh
hugepages_settings.sh実行結果
[root@prsdb01 ~]# /tmp/hugepages_setting.sh
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments on Oracle Linux. Before proceeding with the execution please note following:
* For ASM instance, it needs to configure ASMM instead of AMM.
* The 'pga_aggregate_target' is outside the SGA and
you should accommodate this while calculating the overall size.
* In case you changes the DB SGA size,
as the new SGA will not fit in the previous HugePages configuration,
it had better disable the whole HugePages,
start the DB with new SGA size and run the script again.
And make sure that:
* Oracle Database instance(s) are up and running
* Oracle Database 11g Automatic Memory Management (AMM) is not setup
(See Doc ID 749851.1)
* The shared memory segments can be listed by command:
# ipcs -m
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 1794
[root@prsdb01 ~]#
DBサーバ#1、DBサーバ#2のCRSを停止します。
【prsdb01,prsdb02 / rootユーザで実行】
-----------------------------------------------------------------------------
# prsdb02 → prsdb01の順に停止
/opt/app/21.0.0/grid/bin/crsctl stop crs
hugepages_setting.shで取得した値をもとに、DBサーバ#3も含めたすべてのDBサーバのカーネル・パラメータにvm.nr_hugepagesを設定します。
【prsdb01,prsdb02、prsdb03 / rootユーザで実行】
-----------------------------------------------------------------------------
echo "vm.nr_hugepages = 1800" >> /etc/sysctl.d/97-oracle-database-sysctl.conf
sysctl -q --system
sysctl -a | grep hugepages
# 設定したサイズのHugePages_Totalが確保されていることを確認
grep HugePages /proc/meminfo
DBサーバ#1、DBサーバ#2のCRS、PRDBを起動してHugePages_Freeの減少量がhugepages_setting.shの結果にほぼ一致することを確認します。
【prsdb01,prsdb02 / rootユーザで実行】
-----------------------------------------------------------------------------
# prsdb01 → prsdb02の順に起動
/opt/app/21.0.0/grid/bin/crsctl start crs -wait
# SGAにHugePagesが割り当てられていることを確認
grep HugePages /proc/meminfo
Oracle Netサービス作成
VNC Veiwer上のターミナルからNETCAを起動、操作手順を参考にOracle Netサービスを作成します。
【prsdb01 / VNC Viewerで実行】
-----------------------------------------------------------------------------
netca
【NETCA操作手順】
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 | prsscan.exsample.lan | prdb |
prdb | prsdb01-vip.exsample.lan | prdb1 |
prdb | prsdb02-vip.exsample.lan | prdb2 |
prpdb | prsscan.exsample.lan | prpdb |
prpdb | prsdb01-vip.exsample.lan | prpdb1 |
prpdb | prsdb02-vip.exsample.lan | prpdb2 |
作成したサービスを使用してCDB、PDBに接続できることを確認します。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
# SCANでCDBに接続
sqlplus system@prdb
conn system@prdb1
conn system@prdb2
conn system@prpdb
conn system@prpdb1
conn system@prpdb2
exit
接続に問題がなければtnsnames.oraをDBサーバ#2に転送します。なお、Oracle 21cは読み取り専用のORACLE_HOMEとなっているため”tnsnames.ora”の場所は”${ORACLE_BASE}/homes”下になります。
【prsdb01 / oracleユーザで実行】
-----------------------------------------------------------------------------
scp /opt/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora prsdb02:/opt/app/oracle/homes/OraDB21Home1/network/admin/
2ノードRACの構成は以上です。次はOracle RAC環境へのノード追加を行います。
補足:リソースの管理ポリシーについて
DB作成・サービス追加後のCDB、PDB、サービス各リソースの管理ポリシーはCDBとサービスが”AUTOMATIC”、PDBが”MANUAL”となっています。
このような設定の場合、CRS停止時にCDBが起動していれば次回CRS起動時にすべてのリソースが自動起動します。
障害対応では対象ノードのリソース復旧タイミングを明示的に制御できることが望ましいので管理ポリシー設定は最終的にすべて”MANUAL”に設定します。ただしサーバを起動するたびにリソースをひとつひとつ起動するのは大変面倒なので構築期間中は管理ポリシーの設定を現状のままとします。
なお、手動でリソースを起動 / 停止その他の操作を行う場合は以下のコマンドを実行します。
【DBサーバのいずれかのノード / oracleユーザで実行】
-----------------------------------------------------------------------------
# DB起動
srvctl start database -db <DB名>
# DB停止
srvctl stop database -db <DB名>
# PDB起動
srvctl start pdb -db <DB名> -pdb <PDB名>
# PDB停止
srvctl stop pdb -db <DB名> -pdb <PDB名>
# サービス起動
srvctl start service -db <DB名> -service <サービス名>
# サービス停止
srvctl stop service -db <DB名> -service <サービス名>
コメント