DBサーバ構築、Oracle 26ai(7)RACノード追加 3

DBサーバ・Oracle RAC

Oracle RAC DBインスタンスの追加 (2)

現行DB(oracle 21c)では2ノードRAC構築でDBCAが生成したスクリプトをコピってDBインスタンス追加に必要そうなところを残し、よしなに手を加えて実行しています。

しかし今になってその投稿を読み返してみると、DBインスタンスの追加に使用したスクリプトはDB構築スクリプトから2ノード目のインスタンス追加部分を抜き出して3ノード目のDBインスタンスに直しただけ。さすがにこれはちょっと乱暴だったと反省してます。

なので今回新DBにDBインスタンスを追加するにあたり、何をどう処理しなきゃならないかをかなり真面目に整理してそれをベースにゼロからDBインスタンス追加用のスクリプトを作成する方針でございます。

で、その整理した結果というのがこちら。

No.処理対象処理内容補足
1追加ノードPRDB用ディレクトリ作成
2作業ノードDBインスタンス起動作業ノード(prsdb01)のDBインスタンスが停止状態の場合
3DB初期化パラメータ設定(SPファイル)追加するDBインスタンス用のパラメータを設定
4既存ノードDB停止既存ノード(prsdb01、prsdb2)のDBインスタンスを停止
5クラスタDBインスタンス・リソース(prdb3)追加DBリソースの下にDBインスタンス・リソースを追加
6クラスタDBインスタンス・リソース(prdb3)無効化
7既存ノードDB起動既存ノード(prsdb01、prsdb2)のDBインスタンスを起動
8既存ノードPDB起動PDBが起動していない場合
9追加インスタンスCDB用UNDO表領域作成
10追加インスタンスREDOログ(スレッド、グループ、メンバ)作成
11追加インスタンスPDB用UNDO表領域作成、割り当て
12クラスタDBインスタンス・リソース(prdb3)有効化DBリソースのDISABLE/ENABLEでDBインスタンス・リソースを有効化
13追加ノードDBインスタンス(prdb3)起動
14追加ノードDBインスタンス(prdb3)・PDBオープン

これらの処理に前提条件チェックやDBインスタンス追加後の構成情報出力を追加して1本のシェル(DBインスタンス追加シェル)にまとめます。

なお、ここにあげた処理内容は一応GeminiさんにチェックしてもらっていますがDBインスタンス追加の公式手順はDBCAを使用します*1。この処理でDBインスタンス追加OKという(Oracleサポートの見解とかナレッジとかの)裏付けは何もありません*2。

しかしながらこのブログの目的の一つにやってみたらどうなるかをいろいろ試して見るというのもあるのでとりあえずこれでDBインスタンスを追加してしまおうと思います。

*1:私が探した限りではDBCA以外のDBインスタンス追加について書かれたOracleさんの公式ドキュメントは見つかりませんでした。もしかしたら手動によるDBインスタンス追加のナレッジがあるかもしれませんが確かめようがありません。

*2:公式以外の手順でDBインスタンスを追加しようというんですからもし仮にOracleサポートにこのやり方でOKか尋ねることができても「DBCA使えや」のひとことで終わりだと思います(たぶん)。

DBインスタンス追加シェルの準備

新DBサーバ#1のoracleユーザで作業用のディレクトリを作成してそこにDBインスタンス追加シェルを配置します。

DBインスタンス追加シェルの中身はコレ。

DBインスタンス追加シェルの実行

DBインスタンス追加シェルを実行します。

DBインスタンス追加シェル実行結果(クリックで表示)

シェルを実行すると最後にDBインスタンス追加に関する構成情報が表示されます*1。その内容が設計通りであればDBインスタンスの追加は完了です。

*1:<作業ディレクトリ>/log/DB_INFO.logにも構成情報が保存されています。

DBインスタンス追加シェルが失敗した場合の対応

DBインスタンス追加シェルが失敗した場合は作成途中のDBインスタンスを削除したりクラスタからリソースを削除したりといった原状回復が必要です。

もしある程度処理が進行してシェルが異常終了(あるいはシェルを強制終了)したのであればDBCAを使って原状回復ができます。

DBCAを起動して「Oracle RACデータベース・インスタンスの管理(I)」->「インスタンスの削除(D)」を選択、よしなに操作すると追加に失敗したDBインスタンスやクラスタ・リソースを削除してくれます。

ただしDBCAはシェルによるPDBの変更(UNDO表領域の追加、割り当て)を削除(解除)することができません。PDBの原状回復は手動で実行する必要があります。

また、DBインスタンス追加シェルが異常終了した状況によってはDBCAによる原状回復ができない可能性があります。

そのような場合の対応として何をどうするかは状況次第なので細かい説明は省略、代わりにすべての原状回復を手動で実行したときの証跡を記載しておきます。

ノード追加作業の手動による原状回復(クリックで表示)
DBインスタンス・リソースの無効化について

DBインスタンス追加シェルはDBリソースの下にDBインスタンス・リソースを追加します。また、必要な処理がすべて完了するまで追加したDBインスタンスが起動しないよう、DBインスタンス・リソースを無効化(disable)しています(DBインスタンス追加シェル・コメント6の処理)。

このDBインスタンス・リソースの無効化にちょっとした注意点というか、クセがあるのでそのことを書いておきたいと思います。

DBインスタンス・リソースを無効化(disable)すると(上位の)DBリソースにとってこのDBインスタンスのノードは「(DBリソースの設定に従わず)個別にDBが無効化されている」状態となります。

また、無効化したDBインスタンス・リソースを有効化(enable)しても「個別にDBが有効化されている」ノードとなるだけで「個別にDBが…されている」状態は解除されません。

なんだかちょっと気持ち悪い状況ですが、さらに気持ち悪いのがこのDBインスタンス・リソースを削除したとしてもDBリソースから「個別にDBが…されている」情報は消えずに残ったままとなってしまいます。

存在しないDBインスタンスのノードがDBリソースの構成情報に残っているというのはクラスタの構成に不整合が生じているわけで、それが直接トラブルの原因*1となるかどうかはともかくよろしい状態ではありません。

この「個別云々」の状態を解消するにはどうするかというと、DBインスタンス・リソースをいじってもどうにもならないのでその上位のDBリソースを一旦無効化します。それからまたDBリソースを有効化すると「個別云々」は解消されます。

*1:私はこの投稿ページの作成にあたり3日かけてスクリプトによるDBインスタンスの作成と削除をうんざりするほど繰り返しておりました。で、最終的に作成したDBインスタンスをプライマリ・ノードとするサービスを追加して接続テストをしたらなんとエラー。原因は追加ノードのローカル・リスナーが起動していなかったからでございます。なぜローカル・リスナーが起動していなかったのかといえば無効に設定されてたから。つまりDBインスタンス追加シェル作成の初日か2日目のどこかでローカル・リスナーが無効化されて3日目のCRS起動では立ち上がらなかったというわけです。
ローカル・リスナーはRAC(Grid Infrastructure)へのノード追加で作られgridユーザが管理します。oracleユーザが触ることは無く、いくらDBインスタンスの追加&削除を繰り返してもそれで無効化されるとは思えない。そうなった結局原因はわからずじまいだったのですが、おそらくDBインスタンス・リースを削除した後でもDBリソースに「個別云々」が残り、その不整合が原因でクラスタが追加ノードのローカル・リスナーを無効化してしまったんじゃなかろうか、というのがGeminiさんの推測です。

*2:DBインスタンス追加シェルの「12. DB instance resource enable」ではこのやり方でDBインスタンスを有効化しています。

新DBサーバ#3のoracleユーザの.bash_profileに環境変数設定を追記します。

再ログインまたはsourceで新DBサーバ#3のoracleユーザに.bash_profileに追記した環境変数を反映させてから内部接続でローカル・ノードのDBインスタンスに接続できることを確認します。

以上でスクリプトによるDBインスタンスの追加は終了です。ちょっと長くなったのでここで一旦切って、次は追加ノードのDBインスタンスをプライマリに指定したバッチ用サービスの追加とOracle Netの設定です。

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他)
DBサーバ構築、Oracle 26ai(7)RACノード追加 1(Gridノード追加、Oracleホーム拡張)
DBサーバ構築、Oracle 26ai(7)RACノード追加 2(DBインスタンス追加・DBCA版)
DBサーバ構築、Oracle 26ai(7)RACノード追加 3(DBインスタンス追加・スクリプト版)

メニュー

トップページ

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

投稿一覧

過去投稿一覧

自己紹介

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

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

問合せ(メール)

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

参考情報

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

Real Application Clusters管理およびデプロイメント・ガイド 26ai

コメント

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