この章では、Sun Cluster ノード上で Sun Cluster HA for Oracle データサービスを構成、管理する方法について説明します。
この章で説明する手順は次のとおりです。
この節の説明に従って、Sun Cluster ノードに Sun Cluster HA for Oracle をインストールする準備をしてください。
Oracle のバイナリは、物理ホストのローカルディスクにインストールすることも、あるいは多重ホストディスクにインストールすることもできます。どちらにインストールする場合でもそれぞれ長所と短所があります。インストール場所を選択するにあたっては、次のことを考慮してください。
多重ホストディスクに Oracle のバイナリをインストールすると、1 つだけバイナリのコピーを管理すればよいことになるため、管理が容易になります。また、クラスタの再構成中の Oracle バイナリまたはサーバーの高可用性も保証されます。ただし、冗長性を犠牲にするため、障害が発生した場合の可用性が犠牲になります。スイッチオーバーが発生した場合、あるいは多重ホストディスクから Oracle のバイナリが誤って削除された場合は、データサービスが使用できなくなることに注意してください。多重ホストディスクにインストールされたバイナリは、ディスクグループの一部としてミラー化されるため、領域を割り当てる必要があります。
物理ホストのローカルディスクに Oracle のバイナリをインストールすると、冗長性が増すため、障害あるいは誤ってコピーの 1 つを削除した場合の可用性が増します。また、Oracle はバイナリを含む別の物理ノード上で動作できます。ただし、物理ホストのローカルディスクに Oracle のバイナリを配置すると、ファイルの複数のコピーを管理する必要があるため、管理上のオーバーヘッドは大きくなります。
スイッチオーバーやフェイルオーバーの場合にデータサービスを正しく起動および停止するには、/etc/nsswitch.conf ファイルを次のように設定する必要があります。
Sun Cluster HA for Oracle を実行する論理ホストをマスターできる各ノードにおいて、/etc/nsswitch.conf ファイルの group には次のエントリの 1 つが必要です。
group: group: files group: files [NOTFOUND=return] nis group: files [NOTFOUND=return] nisplus |
Sun Cluster HA for Oracle は、データベースノードを起動および停止するときに su user コマンドを使用します。この設定により、パブリックネットワークの障害のためにクラスタノード上でネットワーク情報ネームサービスが利用できなくなったときに、su user コマンドは NIS や NIS+ を参照しなくなります。
Solstice DiskSuite を使用している場合は、Sun Cluster HA for Oracle が UFS ロギングあるいはミラー化 raw メタデバイスを使用するように構成できます。メタデバイスの構成についての詳細は、付録 B 「Solstice DiskSuite の構成」 を参照してください。
VERITAS Volume Manager を使用している場合は、Sun Cluster HA for Oracle が VxFS ロギングあるいは raw デバイスを使用するように構成できます。VxFS ファイルシステムについての詳細は、付録 C 「VERITAS Volume Manager の構成」 を参照してください。
Sun Cluster ノードの準備と Oracle ソフトウェアのインストール、Oracle データベースの作成、Sun Cluster HA for Oracle の構成は、この節の手順に従って行なってください。
Sun Cluster HA for Oracle を構成する前に、第 3 章「Sun Cluster ソフトウェアのインストールと構成」で説明している手順に従って、各ノード上で Sun Cluster ソフトウェアを構成しておく必要があります。
Sun Cluster ノードに Oracle ソフトウェアをインストールする準備をして、実際に Oracle ソフトウェアをインストールするための主な作業は、次のとおりです。
$ORACLE_HOME ディレクトリの作成場所を選択する
ユーザー oracle 用の /etc/group および /etc/passwd エントリを作成し、pwconv(1M) コマンドにより /etc/shadow ファイルに対するエントリを作成する
Oracle ソフトウェアをインストールする
/var/opt/oracle/oratab ファイルを作成する (Oracle バージョン 7.xx から 8.xx のみ。Oracle8i の場合は、この手順は必要ありません。)
インストールを確認する
すべての Sun Cluster ノードに対して、この節で説明しているすべての手順を実行してください。
Sun Cluster ノードの準備をして、Oracle ソフトウェアをインストールする詳細な手順は、次のとおりです。
Oracle ソフトウェアをインストールする準備をします。
ローカルまたは多重ホストディスクから $ORACLE_HOME ディレクトリの作成場所を選択します。
各物理ホストのローカルディスクに Oracle のバイナリをインストールする場合は、できるかぎり、専用のディスク上に 1 つのファイルシステムとして Oracle ソフトウェアをマウントします。そうすることにより、オペレーティング環境を再インストールした場合でも、Oracle のバイナリが上書きされなくなります。
すべてのノードの /etc/group ファイルにデータベース管理者グループ用のエントリを作成し、グループにエントリを追加します。
通常、このグループの名前は dba です。root および oracle がこの dba グループのメンバーになっていることを確認し、必要に応じて、他の dba ユーザー用のエントリを追加してください。Sun Cluster HA for Oracle を実行するすべてのノードで、グループ ID が同じであることを確認してください。次のようになります。
dba:*:520:root,oracle |
NIS あるいは NIS+ などのネットワークネームサービス内にネームサービスのエントリを作成して、Sun Cluster HA for Oracle クライアントからその情報を利用できるようにすることができますが、ローカルの /etc ファイルにもエントリを作成して、ネットワークネームサービスに依存しないようにしてください。
すべてのノードで、この情報の複製を作成する必要があります。
すべてのノードの /etc/passwd ファイルに Oracle ユーザー ID (oracle_id) 用のエントリを作成してから、pwconv(1M) コマンドを実行して、/etc/shadow ファイルにエントリを作成します。 または、次のコマンドを実行します。
通常、この oracle_id は oracle です。
# useradd -u 120 -g dba -d $ORACLE_HOME oracle_id |
Sun Cluster HA for Oracle を実行するすべてのノードで、ユーザーID が同じであることを確認してください。
$ORACLE_HOME ディレクトリが oracle_id によって所有され、dba グループに含まれていることを確認します。
$ORACLE_HOME ディレクトリに対するアクセス権は 755 に設定すべきです。
# chown oracle $ORACLE_HOME # chgrp dba $ORACLE_HOME |
$ORACLE_HOME が Oracle のホームディレクトリへのシンボリックリンクの場合は、次のコマンドを使用します。
# chown oracle $ORACLE_HOME # chgrp dba $ORACLE_HOME # chown -h oracle $ORACLE_HOME # chgrp -h dba $ORACLE_HOME |
Oracle のインストール条件を確認します。
Oracle のバイナリは、物理ホストのローカルディスクにインストールすることも、あるいは多重ホストディスクにインストールすることもできます。詳細は、「Sun Cluster HA for Oracle のインストール場所の選択」を参照してください。
多重ホストディスクに Oracle ソフトウェアをインストールする場合は、まず、Sun Cluster を起動して、論理ホストの所有権を取得する必要があります。詳細は、「Oracle データベースの作成と Sun Cluster HA for Oracle の構成」を参照してください。
初めて Oracle のバージョン 7.x.x 〜 8.x.x をインストールする場合は、「Install/Upgrade/Patch Software Only」オプションを選択してください。これは、データベースの格納場所として論理ホストがデータベース初期化ファイルと構成ファイルに反映されるようにするためです。
Oracle ソフトウェアをインストールします。
標準の Oracle インストール手順に従って、すべてのノードの /etc/system ファイルを編集します。また、すべてのノードにユーザー oracle と dba グループ用の /var/opt/oracle ディレクトリを作成します。
この手順を行う前に oracle でログインして、/var/opt/oracle ディレクトリ全体の所有権を確保してください。Oracle ソフトウェアのインストール方法に関する詳細は、Oracle のマニュアルを参照してください。
(Oracle バージョン 7.x.x 〜 8.x.x のみ) /var/opt/oracle/oratab ファイルを作成します。
スーパーユーザーで、$ORACLE_HOME/orainst/oratab.sh スクリプトを実行し、適切なアクセス権を設定した /var/opt/oracle/oratab ファイルを作成します。
Oracle バージョン 8i 以降を使用する場合には、この手順は必要ありません。これらのバージョンでは、oratab ファイルの作成は Oracle インストーラが自動的に行います。
Oracle のインストール内容を確認します。
Oracle カーネルの $ORACLE_HOME/bin/oracle が oracle によって所有され、dba グループに含まれていることを確認します。
$ORACLE_HOME/bin/oracle に対するアクセス権が次のように設定されていることを確認します。
-rwsr-x--x |
$ORACLE_HOME/bin にリスナーのバイナリが存在することを確認します。
Oracle バージョン 7.x.x 〜 8.x.x に $ORACLE_HOME/orainst/RELVER ファイルが存在することを確認します。
ノードに Oracle Unix Installer をインストールすると、$ORACLE_HOME/orainst/RELVER が作成されます。$ORACLE_HOME/orainst/RELVER ファイルが存在しない場合は、手動で作成してください。ノードにインストールした Oracle ソフトウェアの正しいバージョン番号を記入してください。次に例を示します。
# cat $ORACLE_HOME/orainst/RELVER RELEASE_VERSION=8.0.4.0.0 |
この節で説明する 2 つの手順を使用して、Sun Cluster 構成内に Oracle データベースを作成、構成してください。データベースを追加して、構成する場合は、「Oracle データベースを作成するには」で説明している手順だけ実行します。
Sun Cluster が起動していて、使用ノードがディスクグループを所有していることを確認します。
root で scadmin(1M) コマンドを実行し、クラスタを起動します。クラスタが起動され、指定したノードにディスクグループの所有権が割り当てられます。
# scadmin startcluster physicalhost clustername |
クラスタがすでに存在し、指定するノードがクラスタ内にある場合は、次のコマンドを使ってディスクグループの所有権を確保します。
# haswitch physicalhost logicalhost |
ボリュームマネージャがディスクデバイスを使用できるように構成します。
Oracle は raw 物理デバイスと raw メタデバイス (ミラーかどうかを問わず) の両方に対する raw 入出力をサポートしていますが、Sun Cluster はミラー化 raw ボリュームまたはメタデバイスに対する Oracle の raw 入出力のみサポートしています。このため、Sun Cluster 上で /dev/rdsk/c1t1d1s2 などのデバイスを使用して、Oracle データを格納することはできません。
Solstice DiskSuite を使用している場合は、Sun Cluster HA for Oracle を実行するすべてのノードで UFS ロギングあるいはミラー化 raw メタデバイスを構成できます。メタデバイスについての詳細は、付録 B を参照してください。
ミラー化 raw デバイスを使用してデータベースを格納する場合は、すべてのミラー化 raw メタデバイスの所有者とグループ、モードを変更してください。ミラー化 raw デバイスを使用しない場合は、この手順を省略してください。ミラー化メタデバイスの作成方法は、付録 B 「Solstice DiskSuite の構成」 で説明しています。
ミラー化 raw デバイスを作成する場合は、その都度、次のコマンドを使用します。
# chown oracle_id /dev/md/disk_group/rdsk/dn # chgrp dba_id /dev/md/disk_group/rdsk/dn # chmod 600 /dev/md/disk_group/rdsk/dn |
VERITAS Volume Manager を使用している場合は、すべてのノードに VxFS ログあるいは raw デバイスを設定できます。
raw デバイスを使用してデータベースを格納する場合は、すべてのミラー化 raw メタデバイスの所有者とグループ、モードを変更してください。ミラー化 raw デバイスを使用しない場合は、この手順を省略してください。VxFS ログの設定に関する詳細は、VERITAS Volume Manager のマニュアルを参照してください。
raw デバイスを作成する場合は、その都度、次のコマンドを使用します。
# vxvol set owner=oracle_id group=dba_id mode=600 ¥ /dev/vx/rdsk/diskgroup_name/volume_name |
Oracle データベースの作成で行う主な作業は、次のとおりです。
データベース構成ファイルの準備
データベースの作成
v$sysstat ビューの作成
Oracle データベースを作成する詳細な手順は、次のとおりです。
データベース構成ファイルの準備をします。
パラメータファイル、データファイル、redolog ファイル、制御ファイルのすべてを、論理ホスト (すなわち、ディスクグループの多重ホストディスク) に置いてください。
場合によっては、init$ORACLE_SID.ora または config$ORACLE_SID.ora ファイル内の control_files と background_dump_dest の設定を、論理ホスト上の制御ファイルとアラートファイルの格納場所を示すように変更する必要があります。
データベースへのログインに Solaris の認証機能を使用する場合は、init$ORACLE_SID.ora ファイル内の remote_os_authent 変数を TRUE に設定する必要があります。 background_dump_dest には、完全パス名を指定してください。 ORACLE_HOME を指定する場合は、特殊文字の「?」を使用しないでください。
データベースを作成します。
データベースの作成中は、必ず、すべての構成ファイルとデータベースファイルを論理ホスト上に配置してください。
Oracle のインストーラ (orainst または runInstaller) を起動して、「Create New Database Objects」オプションを作成します。
もう 1 つの方法として、Oracle のバージョンによっては、Oracle の svrmgrl コマンドを使用してデータベースを作成することもできます。 Oracle8i 以降をインストールする場合は、Oracle の dbassist ユーティリティを使ってデータベースを後で作成することができます。詳細は、Oracle8i のマニュアルを参照してください。
orainst のセッション中は、すべてのデータベースファイルを論理ホスト上に配置します。
Oracle インストーラが提供するデフォルトのファイル格納場所を変更してください。
制御ファイルの名前が、構成ファイル内のファイル名と一致することを確認します。
v$sysstat ビューを確認します。
v$sysstat がまだ存在しない場合は、適切な Oracle カタログスクリプトを実行して作成します。v$sysstat ビューは、Sun Cluster 障害監視スクリプトによって使用されます。
Sun Cluster HA for Oracle を構成するための主な作業は、次のとおりです。
Sun Cluster HA for Oracle を実行するすべてのノードの /var/opt/oracle/oratab ファイルに対する全データベースインスタンス用のエントリを作成する
障害監視におけるユーザーとパスワードの使用を許可する、また、データベースへのアクセスにおける Solaris 認証の使用を許可する
Oracle リスナー による Sun Cluster HA for Oracle の監視を設定する
Oracle のリスナー、Sun Cluster ソフトウェアのインストールを確認する
hareg(1M) コマンドにより Oracle データサービスを起動する
Oracle データベースインスタンスの運用を開始する
Sun Cluster HA for Oracle を構成する詳細な手順は、次のとおりです。
Sun Cluster HA for Oracle データベースの全データベースインスタンスに対する SID エントリを作成します。
Sun Cluster HA for Oracle を実行するすべてのノード上の /var/opt/oracle/oratab ファイルに、データベースに関連付けられているインスタンスの SID を含める必要があります。フェイルオーバーが成功するには、Sun Cluster HA for Oracle を実行するすべてのノード上で、このファイルを最新に保つ必要があります。SID を追加あるいは削除した場合は、手動でファイルを更新してください。oratab ファイルに矛盾があると、エラーメッセージが返されて、haoracle start コマンドの実行は失敗します。
Solaris の再起動時にインスタンスが自動的に起動しないようにするには、/var/opt/oracle/oratab ファイル内のすべてのエントリに :N オプションを指定します。
oracle_sid:/oracle:N |
(Oracle または Solaris のどちらの) 認証機能を使用するか従って、次のいずれかの作業を行います。
障害監視におけるユーザーとパスワードの使用を許可します。
手順 b で説明している方法で Solaris 認証を有効にしない場合は、この手順を使用する必要があります。
次の例では、ユーザーは scott、パスワードは tiger です。Oracle 認証を使用する場合、このユーザーとパスワードのペアは、手順 1 で使用するペアと同じである必要があることに注意してください。
oracle ユーザーになり、srvmgrl(1M) コマンドによって表示される画面に次のスクリプトを入力することによって、アクセスを有効にします。この方法は、サポートされているすべてのバージョンの Oracle で共通です。
# svrmgrl connect internal; grant connect, resource to scott identified by tiger; alter user scott default tablespace system quota 1m on system; grant select on v_$sysstat to scott; grant create session to scott; grant create table to scott; disconnect; exit; |
データベースへのアクセス権に Solaris 認証を使用するようにします。
次の入力例では、Solaris 認証を有効にしています。
# svrmgrl connect internal; create user ops$root identified by externally default tablespace system quota 1m on system; grant connect, resource to ops$root; grant select on v_$sysstat to ops$root; grant create session to ops$root; grant create table to ops$root; disconnect; exit; |
Sun Cluster 用に listener.ora および tnsnames.ora ファイルを構成します。
すべてのノードの /var/opt/oracle に tnsnames.ora と listener.ora ファイルを作成して、更新してください。
Sun Cluster HA for Oracle には、リスナー名に関する制限はありません。 有効な Oracle リスナー名を使用できます。
次のコード例は、listener.ora 内の更新されている行を特定します。
LISTENER = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = hostname) <- use logical host name (PORT = 1527) ) ) . . SID_LIST_LISTENER = . . (SID_NAME = SID) <- Database name, default is ORCL |
次のコード例、tnsnames.ora 内の更新されている行を特定します。
service_name = . . (ADDRESS = <- listener address (HOST = server_name) <- logical host name (PORT = 1527) <- must match port in LISTENER.ORA ) ) (CONNECT_DATA = (SID = <SID>)) <---database name, default is ORCL |
Sun Cluster HA for Oracle は、/var/opt/oracle/tnsnames.ora ファイルを開きます。SID = instance name と server name=logical host を照合することによって、service_name までファイルを走査します。tnsnames.ora から取得した service_name は、Sun Cluster HA for Oracle の障害モニターがサーバーに接続するときに使用されます。
"HOST = host name" の行には、listener.ora ファイル内のホスト名ではなく、論理ホスト名を入力してください。
次の例は、Oracle インスタンスが表 5-1 の場合の listener.ora および tnsnames.ora ファイルの更新方法を示しています。
表 5-1 Oracle 構成の例
インスタンス |
論理ホスト |
リスナー |
---|---|---|
ora8 |
hadbms3 |
LISTENER-ora8 |
ora7 |
hadbms4 |
LISTENER-ora7 |
次の図は listener.oraa ファイルの例です。このファイルの構成方法については、使用する Oracle バージョンのマニュアルを参照してください。
LISTENER-ora7 = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = hadbms4) (PORT = 1530) ) ) SID_LIST_LISTENER-ora7 = (SID_LIST = (SID_DESC = (SID_NAME = ora7) ) ) LISTENER-ora8 = (ADDRESS_LIST = (ADDRESS= (PROTOCOL=TCP) (HOST=hadbms3)(PORT=1806)) ) SID_LIST_LISTENER-ora8 = (SID_LIST = (SID_DESC = (SID_NAME = ora8) ) ) |
次の図は tnsnames.ora ファイルの例です。このファイルの構成方法については、使用する Oracle バージョンのマニュアルを参照してください。
ora8 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = hadbms3) (PORT = 1806)) ) (CONNECT_DATA = (SID = ora8)) ) ora7 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = hadbms4) (PORT = 1530)) ) (CONNECT_DATA = ( SID = ora7)) ) |
Sun Cluster とクラスタのデーモンがすべてのホストにインストールされて、動作していることを確認します。
# hastat |
まだ動作していない場合は、scadmin startnode コマンドを使用して起動してください。
hareg(1M) コマンドを使用して、1 つのクラスタノードだけから Sun Cluster HA for Oracle を登録して起動します。
1 つのクラスタノード上でだけ hareg(1M) コマンドを実行してください。
Oracle サーバーをまだ登録していない場合は、hareg(1M) コマンドを使用して登録してください。このコマンドは、1 つのクラスタノードだけで実行する必要があります。1 つの論理ホスト上でだけデータサービスを登録するには、-h オプションを使用して、論理ホスト名を指定します。
# hareg -s -r oracle [-h logicalhost] |
クラスタをすでに起動している場合は、次の hareg(1M)コマンドを使用して、Oracle データサービスを起動します。このコマンドは、1 つのクラスタノードだけで実行する必要があります。
# hareg -y oracle |
Sun Cluster HA for Oracle 構成情報を設定します。
次のコマンドを実行して、Sun Cluster によってインスタンスが監視されるようにしてください。
# haoracle insert $ORACLE_SID logicalhost 60 10 120 300 ¥ user/password /logicalhost/.../init$ORACLE_SID.ora listener |
haoracle insert - コマンドとサブコマンド。
$ORACLE_SID - Oracle データベースインタンスの名前。
logicalhost - $ORACLE_SID にサービスを提供する論理ホスト (物理ホストではない)。
-60、-10、-120、-300 - 検証サイクル時間 60 秒、接続検証サイクル数 10 回、検証タイムアウト 120 秒、再起動遅延時間 300 秒を指定したパラメータ。
user/password - 障害監視に使用するユーザーとパスワード。手順 2 で付与したアクセス権レベルと同じである必要があります。Solaris の認証を使用する場合は、ユーザー名とパスワードではなくスラッシュ (/) を入力します。
/logicalhost/.../init$ORACLE_SID.ora - データベースの起動に使用する pfile を示します。論理ホストのディスクグループ上に存在する必要があります。
listener - Oracle リスナーです。この名前を使用して、リスナーが起動、監視されます。このフィールドは省略可能で、デフォルトは LISTENER です。
haoracle(1M) に対する全オプションについての詳細は、haoracle(1M) のマニュアルページを参照してください。
データベースインスタンスの運用を開始します。
haoracle(1M) コマンドを実行することによって、Sun Cluster HA for Oracle データベースの運用を開始してください。このインスタンスに対する監視が自動的に開始されます。
# haoracle start $ORACLE_SID |
クライアントは、常に、物理ホスト名ではなく、論理ホスト名を使用してデータベースを参照する必要があります。
たとえば、Oracle リスナー用の tnsnames.ora ファイルには、データベースインスタンスが動作するホストとして論理ホストを指定する必要があります。「Sun Cluster HA for Oracle を構成するには」を参照してください。
Sun Cluster HA for Oracle のスイッチオーバーが発生すると、Oracle のクライアントサーバー接続が切断されます。このため、クライアントアプリケーションは、必要に応じて、切断と再接続、あるいは回復に対処する必要があります。トランザクションモニターによって、アプリケーションの処置が簡単になることがあります。Sun Cluster HA for Oracle ノードの回復時間は、アプリケーションに依存します。
アプリケーションが RDBMS 動的リンクライブラリの機能を使用する場合は、フェイルオーバーが発生したときでも、それらのライブラリが利用できる必要があります。 このためには、次のいずれかを行います。
クライアントに動的リンクライブラリをインストールする。
クラスタが Sun Cluster HA for NFS サービスを提供する場合は、動的リンクライブラリを論理ホストにコピーして、環境変数にそのディレクトリパスを設定し、NFS によりそのディレクトリをクライアントに共有させる。
次の検査を行なって、Sun Cluster HA for Oracle のインストールが正しく行われたことを確認してください。
これらの妥当性検査の目的は、Sun Cluster HA for Oracle を実行するすべてのノードが Oracle インスタンスを起動することができ、また、構成内のすべてのノードが互いに Oracle インスタンスにアクセスできることを確認することにあります。Sun Cluster HA for Oracle データサービスから Oracle を起動するときに問題が発生する場合は、次の妥当性検査を行うことによって、その問題点を特定してください。
論理ホストをマスターしているノードにログインして、Oracle の環境変数を設定します。
現在の論理ホストをマスターしているノードに oracle でログインし、ORACLE_SID および ORACLE_HOME 環境変数を設定してください。
Oracle データベースを含む論理ホストをクラスタ内の別のノードに転送します。
たとえば、次のようにします。
# haswitch phys-hahost2 hahost1 |
新たに論理ホストをマスターしているノードにログインして、手順 1 で行った検査を繰り返します。
新しいマスターノードに oracle でログインし、Oracle インスタンスと対話できることを確認します。