CLUSTERPRO構築備忘録⑤~Oracle のインストールと設定~

CLUSTERPRO® X for Windows PPガイド (Oracle® Database)

※本記事は上記ドキュメントをベースに構成しています。

CLUSTERPRO構築備忘録①~NEC CLUSTERPRO X とは~ CLUSTERPRO構築備忘録②~CLUSTERPRO X インストール手順~ CLUSTERPRO構築備忘録③~フェイルオーバーグループの構築方法~ CLUSTERPRO構築備忘録④~フェイルオーバテスト~

インストール前提知識

まず、CLUSTERPRO 環境において、Oracle ソフトウェアはローカルディスクにインストールします。共有ボリュームではありません。

共有ボリュームに配置するのは以下のファイル群です。

  1. 初期化パラメーターファイル
  2. サーバーパラメーターファイル
  3. 制御ファイル
  4. データファイル
  5. REDOログファイル
  6. アーカイブファイル

また、Oracle のインストールは組み込みの Administrator でも行うことはできますが、セキュリティ上の理由から利用は非推奨です。その為、一般的には Oracle 用のユーザを作成します。

CLUSTERPRO のマニュアルでも専用のユーザを作成する手順ですが、そういうものだとして難しく考える必要はありません。

Oracle ソフトウェアのインストール

Oracleインストール・ユーザー」と「Database用Oracleホーム・ユーザー」を作成する必要があります。マニュアル通り “orasys” と “oradb” とします。

orasys ユーザを作成

oradb ユーザを作成

「Oracleインストール・ユーザー」は管理者グループ(Administratorsグループ)に所属させます。
「Database用Oracleホーム・ユーザー」は管理者グループ(Administratorsグループ)に所属する必要はありません。

上記のことから、orasys は Administrators に所属させます

orasys を Administrators に

同じように2号機でもユーザの作成とグループ追加を行ってください

Oracle インストール

準備が出来たので Oracle を1号機と2号機にインストールしていきます。なお、要点のみを手順として記載します。

まず初めに Oracleインストール・ユーザー(orasys)でログインしてください

インストール・オプションは「データベース・ソフトウェアのみインストール」にしてください。

データベース・インストール・オプションは「単一インスタンス・データベースのインストール」にしてください。

Oracleホーム・ユーザーの設定は「既存のWindowsユーザーの使用」にし、「oradb(Database用Oracleホーム・ユーザー)」にしてください。

インストール場所の指定はローカルディスクにしてください。

データベースの作成

次に DBCA(Oracle Database Configuration Assistant) を使用してデータベースを作成していきます。

データベースの作成場所は共有ボリュームのため、ホスト1号機でのみ作業を行います。(そもそも2号機はスタンバイ側なので共有ボリュームが見えません)

以下の手順で DB を作成してください。

orasys ユーザでサーバにログインします。 ※ログイン済みのはずです。

Administrator で DB を作成してしまった場合

 

間違って Administrator で DB を作成してしまった場合、本来であれば「orasys」にアクセス権があるファイルが、下図のようになってしまいます。

 

ホスト名が違うのは別環境だからです

こうなってしまうと再構築ですので、くれぐれも気を付けましょう。

%ORACLE_HOME%¥bin¥dbca.batを右クリックし、「管理者として実行」を選択します。今回の構成だと以下のパスになります。

C:\app\oradb\product\12.2.0\dbhome_1\bin\dbca.bat

管理者として実行しなかった場合

 

管理者として実行しなかった場合、手順⑯のインストール開始を実行した時点で以下のエラーとなりインストーラが強制終了します。

 

Oracleサービス・ユーザーのパスワードを入力してください:DIM-00019: サービスの作成エラー O/S-Error: (OS 5) アクセスが拒否されました。

 

ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しました

管理者として実行から再度インストーラを走らせてください。

「データベースの作成」を選択します。

データベース作成モードとして「拡張構成」を選択します。

データベースタイプは「Oracle単一インスタンス・データベース」でテンプレートは「カスタム・データベース」を選択します。

データベースの詳細は下図を参照して適当な感じにしてください。

データベースファイルの位置は共有ボリュームにしてください

ここが管理者として実行していなかった時の気づきポイント

 

管理者として実行しているので、事前にフォルダを作成する必要はありません。逆に言うと、管理者として実行していなかった場合は以下のエラーとなり弾かれます。

 

[DBT-06006] ディレクトリを作成できません

高速リカバリ領域の位置も共有ボリュームにしてください。また、アーカイブ有効化にチェックを入れてください。

リスナーは後で構成する為そのまま「次へ」で進んでください。

使用するデータベース・コンポーネントを選択します。別途ライセンスが必要なコンポーネントもあるため注意が必要ですが、評価版の為そのまま「次へ」で進みます。

構成オプションは CLUSTERPRO 上の要件はないので、適当に設定して「次へ」で進んでください。

管理オプションの「Enterprise Manager (EM) Database Expressの構成」のチェックを外してください。今回は使いません。

データベース管理者用のパスワードを設定してください。ここでは全て”Passw0rd”に設定しています。Oracleホームのユーザー・パスワードは sysdb のパスワードを入力します。

「データベースの作成」にチェックが入っていることを確認します。

「終了」をクリックしデータベースの作成を開始してください。

データベースの作成には1時間以上時間がかかります。

インストール後のこまごま

Oracle のインストールが終了したので、CLUSTERPRO 的に必要な設定作業を行っていきます。なお、orasys ユーザでログインして作業してください。※ログイン済みのはずです。

2号機にファイルをコピー①

1号機の以下のファイル/ディレクトリを2号機の同じディレクトリにコピーします。

%ORACLE_HOME%\database\hc_sid1.dat

%ORACLE_BASE%\diag\rdbms\sid1

今回の構成だと以下のパスになります。

C:\app\oradb\product\12.2.0\dbhome_1\database\hc_sid1.dat

C:\app\oradb\diag\rdbms\sid1

アクセス権限の追加

以下のファイルに orasys アクセス権を追加します

%ORACLE_BASE%¥admin¥sid1¥xdb_wallet¥ewallet.p12

今回の構成だと以下のパスになります。

C:\app\oradb\admin\sid1\xdb_wallet\ewallet.p12

「ewallet.p12」を右クリックし「プロパティ」を選択します。

セキュリティタブの「詳細設定」をクリックします。

「所有者」欄にある「変更」をクリックします。

オブジェクト名に「orasys」を入力し「OK」をクリックします。

所有者が orasys になっていることを確認し「OK」をクリックします。

プロパティを一度「OK」で閉じます。

再度プロパティを開くとセキュリティタブの様子が変わっているので、「編集」をクリックします。

「追加」をクリックします。

オブジェクト名に「orasys」を入力し「OK」をクリックします。

orasys を選択し、許可の「フルコントロール」にチェックを入れて「OK」をクリックします。

2号機にファイルをコピー②

1号機の以下のファイル/ディレクトリを2号機の同じディレクトリにコピーします。

%ORACLE_BASE%\admin\sid1

今回の構成だと以下のパスになります。

C:\app\oradb\admin\sid1

2号機に admin フォルダは無いと思うので、作成してください。

データベースサービスの作成

データベースを作成していない2号機でコマンドプロンプトを管理者として実行で開き、以下のコマンドを実行してください。なお、ここからの作業は一気に走ることをお勧めします。コマンドで色々手動に変更していく関係上、「再起動後に作業再開したらエラーで先に進めなくなりました」ということになりかねません。

C:\> oradim -new -sid SID名 -startmode manual

実行すると以下のようになります。パスワードは oradb ユーザのパスワードを指定します。

C:\Windows\system32> oradim -new -sid sid1 -startmode manual
Oracleサービス・ユーザーのパスワードを入力してください:
インスタンスが作成されました。

管理者として実行で開かなかった場合

 

こうなります。

C:\Windows\system32> oradim -new -sid sid1 -startmode manual
Oracleサービス・ユーザーのパスワードを入力してください:
DIM-00019: サービスの作成エラー

O/S-Error: (OS 5) アクセスが拒否されました

パスワードファイルの作成

データベースを作成していない2号機でコマンドプロンプトを管理者として実行で開き、以下のコマンドを実行してください。

C:\> cd %ORACLE_HOME%\database

C:\> orapwd file=PWDSID名.ora password=sysユーザのパスワード

orasysではない

sys ユーザは Oracle のユーザです。Windows に作成した orasys ユーザではないので注意してください。具体的には以下の画面で設定したパスワードです。

sys ユーザのパスワードは DBCA でデータベースを構築した際に設定しています。実行すると以下のようになります。

C:\Windows\system32> cd c:\app\oradb\product\12.2.0\dbhome_1\database

c:\app\oradb\product\12.2.0\dbhome_1\database> orapwd file=PWDsid1.ora password=Passw0rd

OPW-00029 SYSユーザーのパスワードの難易度が失敗しました

 

パスワードの強度が低いと、例え sys ユーザとして設定可能であったパスワードであったとしても “パスワードファイル” の作成には以下のように失敗してしまいます。

C:\Windows\system32> cd c:\app\oradb\product\12.2.0\dbhome_1\database

c:\app\oradb\product\12.2.0\dbhome_1\database> orapwd file=PWDsid1.ora password=Passw0rd

OPW-00029: SYSユーザーのパスワードの難易度が失敗しました: Password must contain at least 1 special character。

c:\app\oradb\product\12.2.0\dbhome_1\database>

その場合は「format=12」を文末に追加してください。例えば以下のようになります。

c:\app\oradb\product\12.2.0\dbhome_1\database> orapwd file=PWDsid1.ora password=Passw0rd format=12

データベースサービスの修正

データベースを作成した1号機側では「OracleServiceSID名」というサービスが作成されており、自動起動するようになっています。それを制御するために以下のコマンドを1号機でのみ実行します。コマンドプロンプトを管理者として実行で開き、以下のコマンドを実行してください。

C:\> oradim -edit -sid SID名 -startmode manual

実行すると以下のようになります。

C:\Windows\system32>oradim -edit -sid sid1 -startmode manual

管理者として実行で開かなかった場合

 

こうなります。

C:\Users\orasys> oradim -edit -sid sid1 -startmode manual
DIM-00077: サービス構成の変更に失敗しました。
O/S-Error: (OS 5) アクセスが拒否されました。

リスナーの作成

リスナーの作成は1号機2号機の両方で実行してください

まず、以下の「listener.ora」ファイルを作成し、1号機と2号機の %ORACLE_HOME%¥NETWORK¥ADMIN に配置します。

リスナーサービス

Windows のサービスとしてのリスナーは後ほど作成します。ここではまず “listener.ora” ファイルの作成に留めます。

今回の場合は「C:\app\oradb\product\12.2.0\dbhome_1\network\admin」です。勿論 IP アドレスは環境に合わせたものを設定してください。

LISTENER =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.11)(PORT = 1521))

次に以下の「tnsnames.ora」ファイルを作成し、先ほどと同じく1号機と2号機の %ORACLE_HOME%¥NETWORK¥ADMIN に配置します。IP アドレスは環境に合わせたものを設定してください。なお、この値は CDB か 非CDB かで変わるので、マニュアルを参照してください。以下は CDB のものです。

LISTENER =
(DESCRIPTION =
 (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.11)(PORT = 1521))
 )
)
SID1 =
(DESCRIPTION =
 (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.11)(PORT = 1521))
 )
(CONNECT_DATA =
 (SERVICE_NAME = sid1)
 )
)
SID1PDB =
(DESCRIPTION =
 (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.11)(PORT = 1521))
 )
(CONNECT_DATA =
 (SERVICE_NAME = sid1pdb)
 )
)

次にパラメータ「LOCAL_LISTENER」の変更を実施します。1号機もしくは2号機のどちらかで以下のコマンドを実行してください

C:\> sqlplus / as sysdba
SQL> ALTER SYSTEM SET LOCAL_LISTENER=’listener’;

ALTER がエラーになる

以下のようなエラーになる場合があります。

SQL> ALTER SYSTEM SET LOCAL_LISTENER=’listener’;
ALTER SYSTEM SET LOCAL_LISTENER=’listener’
*
行1でエラーが発生しました。:
ORA-02097: 指定した値が無効なので、パラメータを変更できません。
ORA-00119: システム・パラメータLOCAL_LISTENERの指定が無効です
ORA-00141: パラメータLOCAL_LISTENERに指定されたすべてのアドレスが無効です
ORA-00132: 構文エラーまたは未解決のネットワーク名’listener’

何が間違っているかと言うと、tnsnames.ora の書き方が間違っています。具体的に言うと行頭のスペースが無い場合に上記エラーが発生します。

例えば以下だとエラーにならず、

LISTENER =
(DESCRIPTION =
 (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.11)(PORT = 1521))
 )
)

以下だとエラーになります。

(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.11)(PORT = 1521))
)
)

参考サイト:ORA-12154 TNS:指定された接続識別子を解決できませんでした

パラメータファイルの配置

spfile もしくは pfile を作成して共有ディスクに配置します。作成方法はどちらもマニュアルに記載されていますが、今回は pfile にします。

この pfile を startup するときにオプションで指定することになりますが、startup は別途スクリプトで実行するような流れになるので、そのスクリプトファイル内の startup にパスを記述する形になります。

また、pfile を配置するフォルダに ORACLE ホーム・ユーザのフルコントロールアクセス権が必要なので付与しておきます。

以下のコマンドを実行してください。

C:\> sqlplus / as sysdba

SQL> create pfile=’初期化パラメーターファイル’ from spfile=’サーバーパラメーターファイル’;

サーバパラメータファイルは以下の場所にあります。

C:\app\oradb\product\12.2.0\dbhome_1\database

実行すると以下のようになります。

SQL> create pfile=’E:\oradata\sid1\INITSID1.ORA’
2 from spfile=’C:\app\oradb\product\12.2.0\dbhome_1\database\SPFILESID1.ORA’;

共有ディスクの権限追加

待機系サーバで Oracle Database を起動するために共有ディスク上のファイルにアクセス権限を追加します。

まずアクティブ側でデータベースを停止します。

C:\> sqlplus / as sysdba
SQL> shutdown immediate;

データベースが停止したらフェイルオーバを実行してください。実行後、元スタンバイ機はアクティブになったことで共有ディスクにアクセスできるようになるので、共有ディスク上の以下フォルダに orasysoradb のNTFSアクセス許可のフルコントロールアクセス権を付与します。

  • E:\oradata\sid1\SPFILESID1.ORA ←今回はないので無視
  • E:\oradata\sid1\INITSID1.ORA
  • E:\oradata\sid1
  • E:\oradata\sid1\CONTROL01.CTL
  • E:\oradata\sid1\REDO01.LOG
  • E:\oradata\sid1\REDO02.LOG
  • E:\oradata\sid1\REDO03.LOG
  • E:\oradata\sid1\SYSAUX01.DBF
  • E:\oradata\sid1\SYSTEM01.DBF
  • E:\oradata\sid1\TEMP01.DBF
  • E:\oradata\sid1\UNDOTBS01.DBF
  • E:\oradata\sid1\USERS01.DBF
  • E:\oradata\sid1\pdbseed\SYSAUX01.DBF
  • E:\oradata\sid1\pdbseed\SYSTEM01.DBF
  • E:\oradata\sid1\pdbseed\TEMP01.DBF
  • E:\oradata\sid1\pdbseed\UNDOTBS01.DBF
  • E:\fast_recovery_area
  • E:\fast_recovery_area\sid1\CONTROL02.CTL
権限付与が漏れていたらどうなる?

次回でもトラブルシューティング事例として紹介しますが、以下のようなエラーになりフェイルオーバができなくなる場合があります。

ORA-01157: データファイル11を識別/ロックできません –
2019/09/16 15:08:44.204 INFO [P:000018f0][T:000018f4] scrpl.c:89 main -DBWRトレース・ファイルを参照してください
2019/09/16 15:08:44.204 INFO [P:000018f0][T:000018f4] scrpl.c:89 main -ORA-01110: データファイル11: ‘E:\ORADATA\SID1\SID1PDB\USERS01.DBF’

上記エラーが発生していた時は「E:\ORADATA\SID1\SID1PDB\USERS01.DBF」に oradb のフルコントロール権限が付与されていませんでした。

リスナーサービスの作成

フェイルオーバを実行して1号機をアクティブにします。フェイルオーバ後、以下の手順でデータベースを起動します。

C:\> set ORACLE_SID=SID名
C:\> sqlplus / as sysdba
SQL> startup pfile=初期化パラメーターファイルのフルパス

実行すると以下のようになります。

C:\Users\orasys> set ORACLE_SID=sid1

C:\Users\orasys> sqlplus / as sysdba

SQL> startup pfile=E:\oradata\sid1\INITSID1.ORA

データベース起動後にコマンドプロンプトを管理者として実行で開き、以下のコマンドを実行します。

C:\> lsnrctl start リスナー名

実行すると以下のようになります。

C:\Windows\system32> lsnrctl start listener

以下のコマンドでリスナーとデータベースを停止後にフェイルオーバを実行し、もう片方でも同じようにリスナーサービスを作成します

C:\> lsnrctl stop リスナー名

C:\> sqlplus / as sysdba

C:\> shutdown immediate;

サービスの手動化

データベースサービスとリスナーサービスは、CLUSTERPROによって起動/停止を制
御するため、各サービスがOSの開始に合わせて自動起動しないように、以下の設定を行う必要があります。

1号機と2号機の両方で設定

  • 「OracleServiceSID名」のスタートアップの種類を手動に設定
  • 「OracleOraDB12Home1TNSListener」のスタートアップの種類を手動に設定

※既に手動になっている場合もあります。

苦い思い出

ここでスタートアップの種類が自動だと、OS が自身でサービスを起動してしまいます。そうするとどうなるかというと、CLUSTERPRO はサービスの異常だと判断して回復動作を行います。

CLUSTERPRO で Oracle を制御する

ここまでで Oracle 側の準備は完了です。後は CLUSTERPRO で Oracle をキックする仕組みづくりなどをしないといけないのですが、流石に長くなってしまったのでそれは次回とします。

CLUSTERPRO構築備忘録⑥~CLUSTERPRO で Oracle を制御する~

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)