「データベースが止まらない」仕組みとして Oracle RAC に興味をお持ちですか?RAC は複数サーバーで単一DBを稼働させ、可用性と拡張性を高める技術です。この記事では、RAC の基本的な仕組み、メリット、そして自分が接続している環境が RAC かどうかをSQLで簡単に確認する方法までを、初心者向けに解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
この記事でわかること: Oracle RAC 環境かを確認する最短手順
今接続しているデータベースが Oracle RAC 構成かを知りたい場合、SQL*Plus で以下のクエリを実行します。VALUE が TRUE であれば RAC です。
-- RACオプションが有効かを確認する
SELECT VALUE,INST_ID
FROM GV$OPTION
WHERE PARAMETER = 'Real Application Clusters'
ORDER BY INST_ID;
SQL> SELECT VALUE,INST_ID
2 FROM GV$OPTION
3 WHERE PARAMETER = 'Real Application Clusters'
4 ORDER BY INST_ID;
VALUE INST_ID
-------------------- ----------
TRUE 1
TRUE 2
Oracle RAC (Real Application Clusters) とは?
Oracle RAC は、”Real Application Clusters” の略で、オラクルのデータベース高可用性(HA)およびスケーラビリティ(拡張性)を実現するための、Oracle Database Enterprise Edition (EE) のオプション機能です。
シングルインスタンスとの違い
通常のデータベース(シングルインスタンス)は、「1台のサーバー」が「1つのデータベース(ストレージ上のファイル群)」を管理します。もしそのサーバーが障害で停止すれば、データベースも完全に停止してしまいます。
alt: シングルインスタンス構成(1台のサーバーが1つのDBを管理)と、Oracle RAC 構成(複数サーバーが1つの共有DBを管理)の比較図
一方、RAC は「複数台のサーバー(ノードと呼びます)」が、共有ストレージ上にある「1つのデータベース」を共同で管理します。

【シングルインスタンス構成】
[ アプリケーション ]
|
[ サーバー (インスタンス) ]
|
[ DBストレージ ]
【Oracle RAC 構成】
[ アプリケーション ]
|
(SCAN IP / VIP)
|
+-------+-------+
| |
[ サーバー1 ] [ サーバー2 ] ... [ サーバーN ]
(インスタンス1) (インスタンス2) (インスタンスN)
| (インターコネクト) |
+-----------+-----------+
|
[ 共有DBストレージ (ASMなど) ]
もし RAC 構成ノードの1台が停止しても、他のノードが即座に処理を引き継ぐため、アプリケーションからの接続は(瞬断はするものの)継続できるのが最大の特徴です。
RAC を構成する主要コンポーネント
RAC は、Oracle Database ソフトウェアだけでなく、以下の重要なコンポーネントで成り立っています。
- Oracle Clusterware (Grid Infrastructure):サーバー群を1つの「クラスタ」として束ねる基盤ソフトウェアです。ノード間の死活監視、仮想IP (VIP) の管理、SCAN (Single Client Access Name) による接続振り分けなど、RAC の頭脳とも言える部分を担います。
- 共有ストレージ:全てのノードから読み書き可能なストレージ領域です。通常、Oracle のストレージ管理機能である ASM (Automatic Storage Management) が使われます。
- インターコネクト (Interconnect):ノード間でのデータ転送や、状態の同期(ロック管理)に使われる、専用の高速プライベートネットワークです。この通信速度が RAC の性能を大きく左右します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
SQL*Plus で RAC の状態を確認する
自分が接続しているデータベースが RAC なのか、現在どのノード(インスタンス)で稼働しているのかを確認する方法は、DBAにとっても開発者にとっても重要です。
前提:
SELECT ON V_$INSTANCE、SELECT ON V_$OPTION、SELECT ON GV_$INSTANCEなどの権限を持つユーザー(通常、CONNECTロールやSELECT_CATALOG_ROLEを持つユーザー、または DBA)で接続します。
[参考]
1. RAC が有効か確認する (RAC 確認)
最も簡単な確認方法です。V$OPTION ビューで ‘Real Application Clusters’ オプションが TRUE になっているかを確認します。
-- RACオプションが有効かを確認する
SELECT VALUE,INST_ID
FROM GV$OPTION
WHERE PARAMETER = 'Real Application Clusters'
ORDER BY INST_ID;
SQL> SELECT VALUE,INST_ID
2 FROM GV$OPTION
3 WHERE PARAMETER = 'Real Application Clusters'
4 ORDER BY INST_ID;
VALUE INST_ID
-------------------- ----------
TRUE 1
TRUE 2
実行結果の補足:
VALUE 列に TRUE と表示されれば、そのデータベースは RAC として構成・運用されています。FALSE ならシングルインスタンスです。
2. クラスタ内の全インスタンスの状態を確認する
GV$ ビュー(Global V$)は、RAC クラスタ内の 全インスタンス の情報をまとめて表示します。
-- 全インスタンスのID、ホスト名、状態を確認する
SELECT INST_ID,INSTANCE_NAME,STATUS
FROM GV$INSTANCE
ORDER BY INST_ID;
SQL> SELECT INST_ID,INSTANCE_NAME,STATUS
2 FROM GV$INSTANCE
3 ORDER BY INST_ID;
INST_ID INSTANCE_NAME STATUS
---------- -------------------- --------------------
1 v19rac1 OPEN
2 v19rac2 OPEN
実行結果の補足:
INST_ID: インスタンス番号です(通常 1, 2, 3… と連番)。STATUS:OPENであれば正常に稼働中です。- このクエリで複数行が返ってくれば、RAC 環境であることの強い証拠になります。シングルインスタンス環境では1行だけが返ります。
3. 自分が今接続しているインスタンスを確認する
RAC 環境では、自分が今どのノードに接続しているかを知ることも重要です。
-- 現在のインスタンス名とホスト名を確認
SELECT INSTANCE_NAME,
HOST_NAME
FROM V$INSTANCE;
-- (GV$ ではなく V$ を使うのがポイント)
SQL> SELECT INSTANCE_NAME,
2 HOST_NAME
3 FROM V$INSTANCE;
INSTANCE_NAME HOST_NAME
-------------------- --------------------
v19rac1 v19rac1
実行結果の補足:
V$ ビューは、自分が今接続しているインスタンスの情報のみを表示します。ロードバランサ経由で接続した場合、実行するたびに接続先インスタンスが変わる(INSTANCE_NAME が変わる)可能性があります。
トラブルシューティング: RAC への接続
RAC 特有の接続トラブルとして、SCAN リスナーやノードリスナーへの接続失敗があります。開発者が ORA-12541 や ORA-12514 エラーに遭遇した場合、以下の可能性があります。
| ORA-エラー例 | 原因の推測 | 確認・対処法(主にDBA向け) |
ORA-12541: TNS:no listener | SCAN リスナー、または VIP (仮想IP) が停止している。 | (Gridユーザーで)lsnrctl status LISTENER_SCAN<n> や srvctl status scan_listener で状態を確認する。 |
ORA-12514: TNS:listener does not currently know of service | サービスがリスナーに登録されていない。またはインスタンスが停止中。 | lsnrctl service でサービス登録状態を確認する。GV$INSTANCE で全インスタンスの STATUS を確認する。 |
ORA-12545: Connect failed because target host... | クライアント側の tnsnames.ora の記述ミス、または DNS が SCAN 名を解決できない。 | nslookup <scan-name> で名前解決できるか確認する。tnsnames.ora の HOST や SERVICE_NAME を見直す。 |
運用上のメリットと注意点
メリット (高可用性と拡張性)
- 高可用性 (HA):1台のノード(サーバー)がOS障害やハードウェア故障で停止しても、他のノードが即座に処理を引き継ぎます(フェイルオーバー)。これにより、データベースサービス全体が停止することを防ぎます。
- 拡張性 (Scalability):処理能力が不足してきた場合、サーバー(ノード)を追加する「スケールアウト」によって、システム全体の性能をリニアに(理論上は)向上させることができます。
デメリットと注意点 (複雑さとコスト)
- ライセンスコスト:Oracle RAC は有償のオプション機能です。Enterprise Edition (EE) に加えて、RAC オプションのライセンスが必要となり、一般的に高額になります。
- 構築・運用の複雑さ:シングルインスタンスに比べ、Clusterware、共有ストレージ、Interconnect など、管理すべきコンポーネントが格段に増えます。障害時の切り分けも難易度が上がります。
- パフォーマンス問題:Interconnect を経由するノード間の同期処理(キャッシュフュージョン)がボトルネックとなる場合があります。特定のデータブロックにアクセスが集中するようなアプリケーション(例: 逐次的な採番処理など)は、RAC 環境でかえって性能が劣化することもあり、設計上の考慮が必要です。
Oracle RAC に関する FAQ
Q. RAC と Data Guard はどう違いますか?
A. どちらも高可用性技術ですが、目的が異なります。RAC はノード障害から「瞬時」に復旧する「サーバー単位の冗長化」(アクティブ・アクティブ)です。Data Guard はデータベース全体の複製(スタンバイDB)を遠隔地(別サイト)に作成する「災害対策」(DR)や「DB単位の冗長化」(アクティブ・スタンバイ)です。この2つは併用されることも多いです。
Q. RAC を使うのに Standard Edition 2 (SE2) ではダメですか?
A. はい、Oracle Database 19c 時点では、RAC は Enterprise Edition (EE) の有償オプションです。SE2 では「Standard Edition High Availability (SEHA)」という機能が 18c から提供されていましたが、これは RAC とは異なり、クラスタ内でアクティブなインスタンスは1つだけの構成(アクティブ・パッシブ)でした。
Q. 接続先のインスタンスを固定したい場合はどうすればよいですか?
A. 推奨されませんが、クライアント側の tnsnames.ora の接続文字列で、SCAN名 (SERVICE_NAME) ではなく、特定のノードの VIP と INSTANCE_NAME を指定することで、接続先インスタンスを固定(ロードバランスを無効に)できます。トラブルシューティング時などに使われることがあります。
まとめ
Oracle RAC は、データベースの「止まらない」運用を実現する強力なソリューションです。
- RAC は複数ノードで単一の共有データベースを管理する技術です。
- 主な目的は「高可用性(HA)」と「拡張性(スケールアウト)」です。
- Clusterware, 共有ストレージ (ASM), Interconnect が主要コンポーネントです。
- RAC 環境かは
V$OPTIONやGV$INSTANCEビューで SQL で確認できます。 - Enterprise Edition の有償オプションであり、構築・運用の難易度は高いですが、ミッションクリティカルなシステムで広く採用されています。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。




コメント