4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Oracle接続を図解する<概要>

Last updated at Posted at 2019-08-14

#Oracle接続の仕組み(概要)
クライアントからOracleに接続する時には、「リスナー」というプロセスが仲立ちをしてくれています。
最初にクライアントからは「リスナー」に接続して、接続したい「サービス」の名前を伝えると、その「サービス」の看板を出しているOracleインスタンスに接続してもらえる、という仕組みになっています。
さらに、「リスナー」に「サービス」の情報を予め教えておく役目を果たすプロセスもいます。

「クライアント」と「データベース(インスタンス)」だけじゃないところが、ちょっとややこしい。
どんな登場人物がいて何の役割を果たしていて、どんな設定をすればいいのか。
という概略を絵として頭の中に描けていると、個人的には作業イメージがつかみやすくなります。

そこで、自分の備忘録として、
クライアントからOracleデータベースに接続するまでの流れと、登場人物をお絵描きしてみました。

##Oracle接続の流れと、接続に関わるコンポーネント
listener_abstract.png

この図に登場する登場人物とおおまかな役割は以下の通りです。
###クライアント

  • リスナーに対して接続要求を行い、接続したいOracleインスタンスに接続を転送してもらいます
  • 接続情報として、リスナーの「ホスト」「ポート番号」「プロトコル」と、接続先データベースの「サービス名」を指定する
  • 郵便の世界に例えると、「手紙を届けたい人」、「差出人」。

###リスナー

  • クライアントからの接続要求を受信し、DBサーバにルーティングしてくれるプロセス
  • 「どのOracleインスタンスがどのサービスを提供しているか」を知っています
  • クライアントから指定された「サービス名」のサービスを提供するインスタンスに対して、接続を転送してくれます
  • 構成情報(※)は、listener.ora ファイルに格納されています
  • 郵便の世界に例えると、「郵便配達人」

 (※)リスニング用プロトコル・アドレス、サービスの情報、実行時の動作を制御するパラメータ など

###サービス

  • クライアントがOracleインスタンス(データベース)に接続するときに指定する名前
  • シングル構成なら、インスタンス名(SID)と同じ名前になっていることが多い
  • サービス名は初期化パラメータ service_names で宣言されていて、複数定義可能。
  • 郵便の世界に例えると、「インスタンス(データベース)」は本当の宛先であり、おうち。
  • 「サービス名」は、「インスタンス(≒おうち)」に対して「名札、表札」を立てるようなもの。
  • 1つの「インスタンス(おうち)」に対して、1つ以上の「名札、表札」を立ててOK

※リスナー(郵便配達人)と、サービス(名札)が定義されているだけだと、まだ、クライアント接続はデータベースにつなげてもらうことができません。
※リスナー(郵便配達人)が、クライアント(差出人)の要求通りデータベースにリクエストを転送できるのは、「どのサービス(名札)をどのOracleインスタンス(おうち)が提供しているか」の情報が登録されているからです。

###動的サービス登録

  • 「どのOracleインスタンスがどのサービスを提供しているか」の情報を、リスナーに自動登録する機能
  • 言い換えると、どの「おうち(←インスタンス)」に、何という名前の「名札(←サービス名)」がかかっているかの情報を、動的にリスナーに登録する仕組み。この仕組みによって、リスナー(郵便配達人)がクライアント接続をどこに送れば調べるためのいわゆる「住所録」ができます。
  • デフォルトでは、60秒間隔でLREGという名前のプロセスが動いて、サービス名が追加されていたらリスナーに教えてあげています(急ぐときは、alter system register; コマンドを実行します)

(補足)
・ 動的サービス登録された情報はファイルには書かれません。lsnrctl statusコマンド等で確認できます
・ listener.ora ファイルにサービスの情報(≒住所録の情報)を直書きすることもできる(いわゆる「静的な登録」)

 「動的サービス登録」の仕組みについてメモを起こしました ----> Oracle接続<動的サービス登録>
 「静的な登録」の仕組みについてメモを起こしました ----> Oracle接続<静的なサービス登録>

###接続方法(構文)
クライアントから接続要求を行うにあたり、宛先を指定してCONNECT文を書く必要があります。
「宛先」の書き方には、以下のバリエーションがあります。

   1. 簡易接続
   2. ローカル・ネーミング(tnsnames.ora に接続情報を記述する)
   3. ディレクトリ・ネーミング(LDAP)
   4. 外部ネーミング
 
3. 4. を用いるケースは多くなく、1.と2.のお作法を知っていればだいたい困りません。

    1. の接続のために必要な設定は、「Oracle接続<接続情報の書き方>」で書きます。
4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?