トップ > DBA入門 > 11章
11章 Oracleリスナー

リスナーアーキテクチャ


では本章ではOracleのリスナーについて学んでいきます。

前章ではクライアントからのデータベース接続について紹介していきました。
クライアントからデータベースに接続するためにはリスナー
というOracleプロセスが起動している必要がありました。

リスナー

@ リスナーは接続要求を受信
A リスナーはデータベースの接続情報を提供し、サーバプロセスを起動
B サーバプロセスとユーザプロセス(sqlplus等)と通信を開始

リスナーは最初の接続を確立しサーバプロセスとユーザプロセスが通信を開始します。
SQL文はサーバプロセスとユーザプロセス間で行います。
その為リスナーが停止していてもSQL文を実行することが出来ます。

リスナーの起動停止


リスナーがデータベースサーバ上で起動していないと、クライアントからの
新規接続を受けることができません。

ではリスナーの起動停止方法を確認しましょう。

リスナーの起動
 $ lsnrctl start [リスナー名]

起動はlsnrctlコマンドを使用します。リスナー名は省略可能です。
省略した場合、デフォルトリスナーのLISTENERが起動します。

リスナーの停止
 $ lsnrctl stop [リスナー名]

停止も同様です。リスナー名は省略可能です。
省略した場合、デフォルトリスナーのLISTENERが停止します。

リスナーの確認
 $ lsnrctl status [リスナー名]

statusコマンドはリスナーが起動しているかどうかを確認できます。

リスナー名を省略した場合、デフォルトのポート番号が1521の
リスナーに対して操作を行います。ではリスナーを起動してみましょう。

  $ lsnrctl status

  LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 02-SEP-2016 XX:XX:XX
  
  Copyright (c) 1991, 2014, Oracle.  All rights reserved.

  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux01)(PORT=1521)))
  TNS-12541: TNS:no listener
   TNS-12560: TNS:protocol adapter error
    TNS-00511: No listener
     Linux Error: 111: Connection refused
     

リスナーが起動していないときは、上記の様なメッセージが出力されます。

  $ lsnrctl start

  LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 02-SEP-2016 XX:XX:XX

  Copyright (c) 1991, 2014, Oracle.  All rights reserved.

  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux01)(PORT=1521)))
  STATUS of the LISTENER
  ------------------------
  Alias                     LISTENER
  Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
  Start Date                02-SEP-2016  XX:XX:XX
  Uptime                    0 days 0 hr. 4 min. 23 sec
  Trace Level               off
  Security                  ON: Local OS Authentication
  SNMP                      OFF
  Listener Parameter File   /u01/app/oracle/product/12.0.1/dbhome_1/network/
  admin/listener.ora
  Listener Log File         /u01/app/oracle/diag/tnslsnr/linux01/listener/al
  ert/log.xml
  Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux01)(PORT=1521)))
  Services Summary...
  Service "orcl" has 2 instance(s).
    Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
    Instance "orcl", status READY, has 1 handler(s) for this service...
  Service "orclXDB" has 1 instance(s).
    Instance "orcl", status READY, has 1 handler(s) for this service...
  Service "pdb1" has 1 instance(s).
    Instance "orcl", status READY, has 1 handler(s) for this service...
  The command completed successfully
  

lsnrctlコマンドを使用してリスナーを起動停止することができした。

リスナー構成ファイル


リスナーファイルの情報はリスナー構成ファイルに記載されており、
リスナー起動時はファイルのリスナー名やポート番号などを読み込んでいます。
ファイルは$ORACLE_HOME/network/admin/listener.oraにあります。

  $ cat $ORACLE_HOME/network/admin/listener.ora

  @
  LISTENER =
    (DESCRIPTION_LIST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = linux01)(PORT = 1521))
      )
    )

  A
  SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
           (SID_NAME=orcl)
           (ORACLE_HOME=/u01/app/oracle/product/12.0.1/dbhome_1)
      )
    )
    

@リスナー構成情報
リスナー名と起動時のプロトコル、起動するデータベースサーバのIPアドレス、
リスナーのポートを指定します。

今回の例ではLITENERという名前でPROTCOLはTCP(通常はTCP)、
HOSTはDBサーバのIPアドレスorホスト名、
PORTはリスナーが使用するポート番号を指定します。

A静的データベース情報
リスナーはデータベースとの接続を担う役割のため、データベース情報が必要です。
この記載はそのデータベースの情報を記載します。

リスナーのサービス登録


リスナーの役割はクライアントとDBサーバの接続を確立する事でした。
その為、リスナーはデータベースの情報を知っている必要があります。
データベース情報を登録する為には2種類あります。

・動的サービス登録(自動)
・静的サービス登録(手動)

まずは動的サービス登録はLREGプロセスがデフォルトのポート番号1521に対し
自動的にデータベースの情報を登録します。
デフォルトのリスナー構成であればデータベースの情報は自動的に登録されます。

静的サービス登録はデフォルトのポート番号以外を使用している場合、
手動で登録する必要があります。手動で登録する場合はリスナー構成ファイルに
記載します。

  $ cat $ORACLE_HOME/network/admin/listener.ora

  SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
           (SID_NAME=orcl)
           (ORACLE_HOME=/u01/app/oracle/product/12.0.1/dbhome_1)
      )
    )
    

先ほどlistener.oraの参考を紹介しましたが上記部分がデータベース情報となります。
データベース情報を確認する場合は、lsnrctl serviceまたはstatusコマンドを
使用します。

  $ lsnrctl service

  LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 03-SEP-2016 XX:XX:XX

  Copyright (c) 1991, 2014, Oracle.  All rights reserved.

  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux01)(PORT=1521)))
  Services Summary...
  Service "orcl" has 2 instance(s).
    Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
      Handler(s):
        "DEDICATED" established:0 refused:0
           LOCAL SERVER
    Instance "orcl", status READY, has 1 handler(s) for this service...
      Handler(s):
        "DEDICATED" established:0 refused:0 state:ready
           LOCAL SERVER
  Service "orclXDB" has 1 instance(s).
    Instance "orcl", status READY, has 1 handler(s) for this service...
      Handler(s):
        "D000" established:0 refused:0 current:0 max:1022 state:ready
           DISPATCHER 
           (ADDRESS=(PROTOCOL=tcp)(HOST=linux01)(PORT=59767))
  Service "pdb1" has 1 instance(s).
    Instance "orcl", status READY, has 1 handler(s) for this service...
      Handler(s):
        "DEDICATED" established:0 refused:0 state:ready
           LOCAL SERVER
  The command completed successfully


上記ではorclインスタンスのサービスに対し、2つのサービスが登録されています。
2つのstatusがそれぞれUNKNOWNとREADYとなっていることわかるでしょうか。
statusがUNKNOWNは静的サービス登録の情報で、
READYは動的サービス登録の情報です。

動的サービス登録は自動的にLREGプロセスが定期的にリスナーに対し、
データベース情報を登録します。
待っていれば、データベース情報を登録しますが、
待てない場合は、手動で動的サービス登録の実施を行うことができます。

  $ sqlplus / as sysdba

  SQL*Plus: Release 12.1.0.2.0 Production on Sat Sep 3 XX:XX:XX 2016

  Copyright (c) 1982, 2014, Oracle.  All rights reserved.


  Connected to:
  Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

  SQL> alter system register;

  System altered.
  

本章は以上となります。今回はリスナーの管理方法についてご紹介いたしました。