4 クライアントからの接続設定(サーバ編)

本ページではoracleをインストールしたサーバ(以下、サーバ)へ、外部の端末(以下、クライアント)から接続するためにサーバ側で必要な手順を記載します。 なお、接続方式は最も一般的なTCP/IPによる接続構成となります。

関連:ORACLEクライアント接続設定(クライアント編)


TNSlistenerの設定

外部からの接続を受け入れるためにはサーバ側にてTNSlistenerと呼ばれるプログラム(以下、リスナ)の設定が必要です。 リスナを起動することでポートが開き、外部からのTCPプロトコルを利用したoracle net接続が受け入れられるようになります。 リスナ側で設定する主な項目は以下となります。

リスナ名

一つのサーバに複数のリスナを定義することができるためリスナを識別する名前を設定する必要があります。 シングル環境(非RAC)のデフォルトのリスナ名はLISTENERです。

HOST名(IP)

通常サーバのhostnameを設定します。IPを指定して複数IPを持つ環境で解放するIPを明示指定することもできます。

ポート番号

使用するポート番号を指定します。デフォルトの1521番ポートで利用するとさまざまな設定を簡略化され、 バージョンによってはリスナの設定作業自体が不要になりますので基本的にデフォルト設定がお勧めです。

SIDまたはサービス名(service_name)

SID,サービス名は接続先データベースを識別する名前だと考えてください。 過去のバージョンではSIDしか使用できませんでしたが8iのバージョン以降SIDに機能拡張されたサービスという仕組みが追加されました。 単純に接続するだけであればどちらを設定しても問題はなくデフォルトではSIDとサービス名は同じ名前が設定されるためあまり意識する必要はありませんが サービス名を指定して接続するとDB側で様々な統計がサービス単位で収集されチューニング等に役立つ場合があるのでサービス名指定での接続をお勧めします。 リスナ側で設定したSIDやサービス名とデータベースの設定は一致しなくては接続できませんが、 設定を行わなくともデフォルト設定だとデータベース側が自動でリスナへ自身の情報を登録させにきます。

設定方法1(テキスト編集)

リスナの設定ファイルはテキストファイルであるためテキストエディタで直接編集することができます。 リスナーはデフォルトで以下の設定ファイルを読み取ろうとします。

unix系
$ORACLE_HOME/network/admin/listener.ora

Windows
%ORACLE_HOME%/NETWORK/ADMIN/listener.ora

以下は「LISTENER」というリスナ名で、1521番ポートを使用して「E:\oracle\product\10.2.0\db_1」にインストールしたoracleから起動する「ORCL102」というデータベースをリスナに認識させる設定です。 「SID_LIST_LISTENER」の部分はデータベースの情報を明示的に設定しています(静的登録)。

listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL102)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    )
  )

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

設定方法2(netca)

上述のテキストファイルを編集する方法のほか、netca(Network Configuration Assistent)というツールによりGUIベースで設定することもできます。 netcaは$ORACLE_HOME/bin/netca(windowsの場合はnetca.bat)を実行すると画面が起動します。

netca0 netca1

netca2 netca3

netca4 netca5

上記手順で設定するとlistener.oraに以下の設定が追加されます。この設定には上記の「SID_LIST_LISTENER」の部分(データベース情報の設定)がないため、データベース自身がリスナに対して自身の情報を登録しにくる(動的登録)必要があります。

LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN1)(PORT = 1521))
    )
  )

TNSlistenerの起動、停止、確認

リスナはlsnrctl(リスナコントロール)コマンドで起動、停止、ステータスの確認等を行うことができます。

起動
lsnrctl start <リスナ名>

停止
lsnrctl stop <リスナ名>

ステータス確認
lsnrctl status <リスナ名>

サービスの受け入れ状況の確認
lsnrctl service <リスナ名>

補足 データベースパラメータの設定

上記でポート番号をデフォルト(1521)以外に設定しておりサービスを動的登録させたい場合はデータベース側にリスナ情報を設定するパラメータ(local_listener)を設定する必要があります。 設定しない場合リスナがデータベースを認識できず、接続しようとすると以下のいずれかのエラーが発生します。

ORA-12514: TNS: リスナーは接続記述子でリクエストされたサービスを現在認識していません
ORA-12505: TNS: リスナーは接続記述子で指定されたSIDを現在認識していません

設定は以下のように設定します。(alter system registerは明示的にリスナへ情報を登録させるコマンドです)

SYS@ORCL102 > alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))';

システムが変更されました。
SYS@ORCL102 > alter system register;

システムが変更されました。

listenerがDB側から登録しにきた情報を認識しているかどうかはlsnrctl statusコマンドで確認することができます。 下記例の場合、ORCL102というサービスが静的、動的両方で登録されており、 「状態UNKNOWN」と書かれているORCL102サービスは静的登録、「状態READY」と書かれているサービスは動的登録されたサービスです。 動的登録されたサービスはDB自身が登録しにくることからDBの起動、停止中等は「BLOCKED」等に状態が動的に変化しますが、 静的登録されたサービスはDBの状態はわからないためDBの起動、停止によらず状態は「UNKNOWN」のままです。

C:\>lsnrctl status listener

LSNRCTL for 32-bit Windows: Version 10.2.0.4.0 - Production on 08-4月 -2011 19:19:16

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

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WIN1)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for 32-bit Windows: Version 10.2.0.4.0 - Production
開始日                    08-4月 -2011 18:54:48
稼働時間                  0 日 0 時間 24 分 29 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      E:\oracle\product\10.2.0\db_1\network\admin\listener.ora
ログ・ファイル            E:\oracle\product\10.2.0\db_1\network\log\listener.log
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN1)(PORT=1521)))
サービスのサマリー...
サービス"ORCL102"には、2件のインスタンスがあります。
  インスタンス"ORCL102"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
  インスタンス"orcl102"、状態READYには、このサービスに対する1件のハンドラがあります...
  コマンドは正常に終了しました。
★ORACLE案件承ります