Oracleへのアプリケーション接続
1. サーバ間通信
最近の主流として、アプリケーションサーバとデータベースサーバを別々のマシン上で動作させることが多くなっています。つまりアプリケーションとOracleがネットワーク経由で通信するということです。Oracleはネットワーク通信手段として、たいていTCP/IPのソケットを使用します。ソケットを使用することによって別々のサーバ同士が通信することができます。
アプリケーションとOracleプロセスからすると、一度ソケットを作ってしまうと、ソケットに対して読み書きするだけで後はネットワークドライバやOSのライブラリが送受信処理を実施してくれるために便利な機能といえます。代表的なドライバとして、『JDBCドライバ』があります。
2. アプリケーションとOracleの接続処理
上図を使ってアプリケーションとOracleの接続処理を順序追って見ていきます。
@Oracleリスナーの起動
Oracleはリスナーを起動させる際に、listener.oraファイルを読み込みポート番号を決定します。デフォルトの設定では1521番ポートをしますが、他のアプリケーションなどで1521番ポートを使用している際は、別のポートをlistener.oraへ記載しlsnrctlというツールを使用しリスナーを起動させましょう!
※またlistener.oraを読み込んで起動する方法の他にデータベースからの自動登録する方法もあります。
Aアプリケーションからの接続
通常Oracleへ接続する際は、APサーバにOracle Clientをインストールします。Oracle Clientは、DBサーバのリスナーのアドレスとLISTENポートをtnsnames.oraファイルから読み込みます。tnsnames.oraファイルから読み込んだ情報を元にリスナーとの間にソケットを作りデータベースとやりとりを実施します。
※JDBCThinドライバはtnsnames.oraを使用せず直接設定を記述できます。
Bアプリケーションプロセスとリスナー間接続
最近では、コネクションプールというアーキテクチャを使用し、性能向上を図る場合が多くなっています。
COracleサーバプロセス生成
最後にリスナーは、Oracleサーバプロセスの生成とソケットの引き継ぎを行います。この処理は一見リスナーがサーバプロセスに仕事を丸投げしているようにみえますが、大変な作業なのです。OS上にサーバプロセスを生成し、共有メモリの確保も行わなければなりません。よってアプリケーションを作る際は、接続と切断を繰り返すような作りにしないように心がけましょう。
サーバプロセスに引き継いだ後は、OracleサーバプロセスとOracle Clientが直接やり取りを行うため、リスナーは自由になります。
3. Oracleサーバプロセスとリスナー停止
アプリケーション側で接続終了処理(Closeやdisconnect)をすると、サーバプロセスは自動的に終了します。リスナーはlsnrctlコマンドで停止させる必要があります。
<オラクルデータベース概要(豆知識)>
|
スポンサードリンク
|