Net接続について初めまして。最近では移行の設計等のお仕事をさせていただいております、技術チームの苅辺と申します。Net接続について複数回に渡り連載させていただきます。Databaseについて学習する上でも初期に躓きやすい(自身の経験上)『リスナー』の役割/概要についてと、リスナーを構成し接続するところまでを実際の例を出しながらお伝えできればと思います。本連載の最終目標としては、ロードバランス/フェイルオーバー、Oracleサービス等を含めて接続構成の考え方や引っかかりやすいポイント等を含めて一緒に勉強し、お伝えできればと思っております。マーケティングチームリスナーとはさて、早速ですが、まずリスナーとはどのようなものかご存知でしょうか?Oracleのマニュアルには以下のように書いてあります。Netリスナー(リスナー)は、クライアント接続要求をリスニングするプロセスです。着信中のクライアント接続要求を受信し、データベース・サーバーに対する要求の通信量を管理します。この説明を読んだとき、私はうまく理解できているのか理解できていないのかなんとも言い難い感覚だったのを覚えております。詳細な動作は一旦おいておくとして、まずは次のように理解していただければと思います。クライアントからリモート接続を行う際には、クライアントが直接データベースへアクセスを行うわけではなく、一度リスナーが、『直接データベースへアクセスするサーバープロセス』を生成し、クライアントとの接続を橋渡している。要はクライアントのリモート接続を適切に処理するために必要なものと理解いただければ問題ございません。※この他に、クライアントがデータベースと同一コンピューター上にある場合に限り、リスナーを必要としないローカル接続(Bequeath接続)もありますが、ここではリモート接続に焦点を当ててお話ししたいと思います。そんなデータベースへのリモート接続に、必須となるリスナーですがどのように構成されるものでしょうか。Netの構成と聞くと非常に難しいのではと考える人が多いのではないでしょうか。そんなに構える必要はありません。Netは下記の3ファイルで構成されます。listener.oraリスナーの構成/設定を行うファイルで、データベースサーバー側へ配置します。ホスト名(IPアドレスでも可)を記載することでリスナーを構成できます。Netを構成する3ファイルの中で唯一必須のものとなります。tnsnames.oraデータベースへの接続情報を記載したファイルで、クライアントマシン側へ配置します。接続先サービス名を記載します。データベースサーバーの何れにも配置可能です。Netに対して設定値が反映されます。バッファ領域の制限や認証サービスの設定など様々な設定が可能です。これらの3つのファイルを組み合わせることでデータベースへのリモート接続ができるようになります。リスナー作成とデータべース接続(実践編)それでは、実際にリスナーを作成し、データベースへリモート接続を行ってみましょう。ここでは下記のような構成で実施しておりますが、バージョン等による大きな違いはありません。Editionまずはリスナー構成状態を確かめるため、listener.oraの記載を確認します。tools.listener.oraに記載がないことから、現在はリスナーが構成されていない状態となります。リスナーが構成されていないと接続ができないことを確認するため、クライアントからデータベースへネットワーク接続を行ってみましょう。ユーザー名/パスワードが無効です。ログオンは拒否されました。ユーザー名/パスワードが無効です。ログオンは拒否されました。3回試行しましたがOracleに接続できませんでした。SQL*Plusを終了します。『リスナーがありません』というエラーメッセージが表示され、接続できないことが確認できました。それでは、リスナーの構成を行っていきます。今回は必須項目であるリスナー名、ホスト名、ポート番号のみを設定する「LISTENER_TEST」という名前のリスナーを構成します。/u01/app/oracle/product/12.1.0/dbhome_1/bin/tnslsnrを起動しています。システム・パラメータ・ファイルは/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.oraです。ログ・メッセージを/u01/app/oracle/diag/tnslsnr/rhl6-oracle-db/listener_test/alert/log.xmlに書き込みました。リスナーはサービスをサポートしていません。コマンドは正常に終了しました。サービス"orcl"には、1件のインスタンスがあります。サービス"orclXDB"には、1件のインスタンスがあります。コマンドは正常に終了しました。60秒経過した際にサービスとしてorclを認識していることを確認します。先ほどと同様のクライアントからデータベースへ接続してみましょう。SQL>無事接続することができました。データベースへリモートアクセスするにはリスナーが必須ということをご理解いただけましたでしょうか。リスナーは、あくまで接続時に使用されるものであり、接続中のセッションはリスナーが停止しても切断されません。)して、接続をサーバープロセスに渡し切ってしまいます。その後はクライアントとサーバープロセスの直接の接続になるため、リスナーはそこには介在しません。コマンドは正常に終了しました。13:33:38上記のようにセッションが残り続けるため、リスナーを切断したからといってもうセッションはないだろう等の思い込みは大変危険です。メンテナンス時等でご注意ください。最後にリスナーの役割、実際の構成方法について理解できましたでしょうか。フェイルオーバーについて紹介できればと思います。投稿者プロフィール技術チームDBひとりでできるもんを盛り上げるべく、技術チームが立ち上がりました。infra-db@sts-inc.co.jp「DBひとりでできるもん」運営チームです。社員等の情報をお届けします。60名弱の事業部員で鋭意、執筆中です。