てきとーにのんびりだらだら

毎日更新目標!SEブログ!

今週半ば!昨日勉強できなかった分とりかえしてかんと!4章の勉強やっていくよー

おつおつー^^
昨日は残業で22時までだったものの、今日は早めに上がれたということでちゃっちゃと勉強はじめちゃいましょー!
え、始業までの間何してたって?すみません、今日も限界まで寝てました笑
明日はこの勉強前のブログの内容も価値あるものにできたらと思っております...

ORACLEDBへ接続するソフトウェアについて

以前触れた、データベースへネットを通して接続する方法でクライアント/データベースサーバー型というシステム構成があるというという話ですが、このデータベースへの接続に関してはoracleNetというソフトウェアがあります。oracleNetを用いてシステム構成の主流となっているのはクライアント/データベース型とwebアプリケーション型の二つです。
webアプリケーション型ではクライアントはwebブラウザで使用しているため、webアプリケーションサーバーからデータベースサーバー間でのやり取りで、クライアント/データベース型ではoracleクライアントが入っているクライアントコンピュータからデータベースサーバーへの接続の際にoracleNetを用いています。
oracleNetの構成を支援するツールとしては、「oracle enterprise manager cloud control」、「oracle Net Manager(NETMGR)」、「oracle net configration assistant(NetCA)」があります。 oracleNetを構成するファイルで唯一必須のものであるlistener.oraはリスナーの構成/設定を行うファイルです。oracleNetとは少し離れますが、システム構成の話もあったため本編に入る前にリスナーを必要とするリモート接続について話したいと思います。

リモート接続について

リモート接続とはクライアントコンピュータ上のアプリケーションがネットワークにあるデータベースに接続することを指します。接続の際はリスナーが必須なのですが、接続について少しまとめました。

  • データベースサーバーでリスナーを起動させ、リスナーに対してクライアント側はデータベースサーバーのホスト名(IPアドレス)とポート番号を送信します。
  • リスナーには設定されたポート番号で接続要求を待ち、要求を受け取った場合、データベースサービス名(=グローバルデータベース名)に対応するoracleDBに接続を中継する

リモート接続方法はsqlplus ユーザー名/パスワード@接続識別子ですが、ローカル接続の場合は接続識別子は必要ありません。リモート接続の場合はoracleNetの構成が必要ですがローカル接続の場合は必要ありません。後程、話しますがこの接続識別子がoracleNetにおいて重要となってきます。
一応ちょっとした知識なのですがユーザー名とパスワード、および接続識別子からなる文字列を接続文字列といいます。また、ローカル接続の場合接続識別子が必要ないといいましたが、その代わり環境変数であるORACLE_SIDには接続先インスタンスのSIDを指定しておく必要があるそうです。

リスナーについて

リスナーとは先述の通り、データベースへの中継を役割としているプロセスです。インスタンスとは別の独立したプロセスであるためインスタンスが起動していたとしてもインスタンスが起動しているかどうかはわかりません。ここではoracleNetを前提としているため、listener.oraについてふれていきます。
listerner.oraについても先述の通りなのですが、リスナーの構成/設定を行うファイルであるため、このファイルにて「プロトコル」「リスナーが起動するデータベースサーバーのホスト名」「ポート番号」を指定する必要があります。リスナーは1つのデータベースに対して1つという決まりはありませんが、ポート番号は異なる必要があります。listener.oraはテキストエディタでも編集可能ですがoracle Net Managerを用いて編集も可能です。
そもそもの話なのですが、リスナーにはデフォルト値があるため、リスナー名やポート番号、プロトコルを変更しない場合はデフォルトリスナーを使用し、listener.oraへの記載は必要ありません。

リスナー制御についてですが、リスナーの起動停止を含むリスナーを行えるリスナー制御ユーティリティ(lsnrctl)というツールがあります。これはコマンドプロンプトや、ターミナルからの実行です。
「lsnrctl start リスナー名」「lsnrctl stop リスナー名」「lsnrctl status リスナー名」「lsnrctl services リスナー名」を基本コマンドとしていますservicesはstatusとは違い、よりデータベースサービスの詳細情報を確認できるコマンドになりますが、リスナーに登録されているデータベースサービスはstatusともに確認できますがサマリーログファイルの出力先はstatusでのみ確認できます。基本リスナー名は省略できませんが、リスナー名がLISTENERであった場合は省略可能です。リスナーの制御はlsnrctlだけでなく、oracle enterprise manager cloud controlでも可能です。

接続識別子とネーミングメソッドについて

ネーミングメソッドとは接続識別子を接続先情報として解決する方法を指します。
ネーミングメソッドには4つの解決方法がありそれぞれ、「簡易接続ネーミング」「ローカルネーミング」「ディレクトリネーミング」「外部ネーミング」があります。どのネーミングメソッドにも接続識別子と接続先情報を記載しておくのですが、ディレクトリネーミングはLDAP準拠のディレクトリサーバーに記載し、外部ネーミングは外部ネーミングサービスに記載をしておくことで解決させます。その一方簡易接続ネーミングとローカルネーミングに関しては、ローカルにて解決できます。
簡易接続ネーミングについてはファイルを必要としないため動作確認やテスト時に有効です。記載方法は以下の通りです。

sqlplus ユーザー名/パスワード @<データベースサーバーホスト名>:<ポート番号>/<データベースサービス名>

ローカルネーミングについては、接続識別子にネットサービス名指定することでtnsnames.oraを呼び、tnsnames.oraに記載したデータベースホスト名やデータベースサービス名、ポート番号を取得します。tnsnames.oraを見ればわかるのですがコードとしては、ネットサービス名=接続記述子(ここで接続先情報を記載)という記載方法となっています。
oracleNetは先述した「listeners.ora」「tnsnames.ora」以外に「sqlnet.ora」というファイルが存在します。slqnet.oraはなくてもデフォルトの値となって実行されるのですが、このファイルでできることを一応挙げておくと、ネーミングメソッドの優先順位設定、ロギング機能とトレース機能の有効化などができます。