Oracleのネットワーク設定

Oracleデータベースでは、ネットワーク接続にOracle Netを使用します。Oracle Netはクライアントとサーバの双方に配置、設定されます。この文書は、オラクルのネットワーク設定について記述しています。

構造

Oracleのシステム名
Figure 1. Oracleのシステム名

データベースはデータファイルやREDOログファイルなどのファイル群であり、データベース名(DB_NAME)で識別される。

インスタンスはシステムグローバル領域(SGA)とバックグラウンドプロセスから構成され、システム識別子(SID)で識別される。

システム識別子(SID: System Identifier)とは、特定のホスト上でOracleデータベースのインスタンスを示す一意の名前である。あくまで特定のホスト上での識別子であるため、ネットワーク内でユニークとは限らない。そのため、Oracleサーバ上ではSID単独で識別子として使えるが、OracleクライアントからはSIDだけでは特定できないので、他の識別子(ホスト名など)と組み合わせて使用する。

サービスは外部からインスタンスに接続するため、インスタンス名とドメイン名を組み合わせたサービス名で識別される。Oracle RAC (Real Application Clusters)構成の場合は、ひとつのサービスに複数のインスタンスを関連付けることができる。これにより、ひとつのサービスで複数のインスタンスに負荷分散できる。

ネットサービスは、OracleクライアントからOracleサーバに接続するために、ネットサービス名で識別される。

ローカルネーミングパラメータ(tnsnames.ora)

クライアントからOracleデータベースに接続するには、クライアント側のOracle Netを構成して、リスナーと接続できるようにします。

SQL*PlusなどのOracleクライアントからネットワークを通じてOracleデータベースと接続する際に、ホスト名やポート番号、サービス名などの接続パラメータを指定する必要がある。

接続パラメータによる接続
Figure 2. 接続パラメータによる接続

ローカルネーミングパラメータ(tnsnames.ora)でこれらの接続パラメータをまとめたネットサービスを定義しておけば、Oracleクライアントからネットワークを通じてOracleサーバと接続する際に、ネットサービス名を指定するだけで済む。

ローカルネーミングパラメータによる接続
Figure 3. ローカルネーミングパラメータによる接続

tnsnames.oraファイルは、デフォルトで次の場所に配置されている。

OS ディレクトリ
UNIX $ORACLE_HOME/network/admin
Windows %ORACLE_HOME%\network\admin

tnsnames.oraは次の場所に配置することもできる。

Windows 7でtnsnames.oraをテキストエディタで開こうとすると、「tnsnames.oraは現在他のプロセスによって書き込みが禁止されています。」などの警告が表示されることがある。実際に他のプロセスがtnsnames.oraを使用していなければ、Windows UACが原因である。一時的にUACを無効にすればtnsnames.oraを編集できるようになる。tnsnames.oraの編集が終わったら、元の設定に戻しておく。

tnsnames.oraファイルの書式は次のとおり。

net_service_name = (DESCRIPTION = desc ...)
net_service_name = (DESCRIPTION_LIST = (DESCRIPTION = desc ...) ...)
desc

接続記述子を次のいずれかの形式で指定する。

(ADDRESS = (PROTOCOL = tcp)(HOST = host)(PORT = port))
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = host)(PORT = port)) ...)
(CONNECT_DATE = (SERVICE_NAME = service))
(CONNECT_DATE = (SID = sid))
host

接続するOracleサーバのホスト名又はIPアドレスを指定する。

port

接続するOracleデータベースサーバのポート番号を指定する。

service

接続するOracleデータベースサーバのサービス名を指定する。オラクル初期化パラメータファイルのSERVICE_NAMESパラメータの値を設定する。

sid

接続するOracleデータベースサーバのシステム識別子(SID)を指定する。

tnsnames.oraファイルの例を示す。

net_service1 = (DESCRIPTION =
  (ADDRESS = (PROTOCOL = tcp)(HOST = dbserver1)(PORT = 1521))
  (CONNECT_DATA = (SERVICE_NAME = instance1.example.com))
)
net_service2 = (DESCRIPTION =
  (ADDRESS = (PROTOCOL = tcp)(HOST = dbserver2)(PORT = 1521))
  (CONNECT_DATA = (SID = sid1))
)

リスナー・パラメータ (listener.ora)

Oracle Netのサーバ側プロセスは リスナー と呼ばれ、 リスナー・パラメータ (listener.ora) ファイルで構成します。

listener.oraファイルは、デフォルトで次の位置に配置されています。

OS ディレクトリ
UNIX $ORACLE_HOME/network/admin
Windows %ORACLE_HOME%\network\admin

listener.oraは次の位置に配置することもできます。

listener.oraファイルの書式は次のとおりです。

リスナー名 =
 (DESCRIPTION =
  (ADDRESS =
   (PROTOCOL = プロトコル)
    { (HOST=ホスト名)(PORT=ポート番号) | (KEY=キー) }
   )
  )
  [ (ADDRESS = ... ) ]
 )

SID_LIST_リスナー名 =
 (SID_LIST =
  (SID_DESC =
   (SID_NAME = Oracleシステム識別子)
   (ORACLE_HOME = サーバーのOracleホームの位置)
  )
 )
リスナー名 = (description_list | description )
SID_LIST_リスナー名 = (SID_LIST = sid_desc ... )

description_list :

(DESCRIPTION_LIST = description ... )

description :

(DESCRIPTION = address ... )

address :

(ADDRESS = (PROTOCOL = プロトコル) protocol_option )
PROTOCOL
説明
tcp TCP/IP
ipc IPC

protocol_option :

プロトコルにより記述する内容が異なる。 (PROTOCOL=tcp) の場合は次の通り。

(HOST = ホスト名) (PORT = ポート番号)

(PROTOCOL=ipc)の場合は次の通り。

(KEY = キー)

sid_desc :

(SID_DESC = (SID_NAME = Oracleシステム識別子) (ORACLE_HOME = サーバーのOracleホームの位置) )

listener.oraファイルの例を次に示します。

LISTENER =
 (DESCRIPTION=
  (ADDRESS_LIST=
   (ADDRESS=(PROTOCOL=tcp)(HOST=server)(PORT=1521))
   (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))))

SID_LIST_LISTENER =
 (SID_LIST=
  (SID_DESC=
   (ORACLE_HOME=/oragle10g)
   (SID_NAME=system1)))

リスナー制御ユーティリティ (lsnrctl)

オラクルリスナーの起動や停止を行うには、リスナー制御ユーティリティを起動します。

lsnrctl [ { start | stop | status } [リスナー名] ]

オプションを指定せずにリスナーコントロールを起動すると、 LSNRCTL> というプロンプトが表示されます。対話形式でコマンドを入力することにより、リスナーの制御を行うことができます。

$ lsnrctl
LSNRCTL>

リスナーを起動するには、 START コマンドを使用します。

START [listener-name]

リスナー名 は省略可能です。

LSNRCTL> start LISTENER

リスナーの状態を表示するには、 STATUS コマンドを使用します。

STATUS [listener-name]
LSNRCTL> status

リスナーを停止するには、 STOP コマンドを使用します。

STOP [listener-name]
LSNRCTL> stop LISTENER

lsnrctl を終了するには、quitコマンドを使用します。

LSNRCTL> quit

対話的にコマンドを入力するのではなく、リスナー制御ユーティリティを起動するときにオプションで指定することによって、リスナーを制御することもできます。この場合、リスナーを制御して lsnrctl は終了するので、コマンド・プロンプトは表示されません。

$ lsnrctl start
$ lsnrctl status LISTENER
$ lsnrctl stop

tnsping

tnspingは、指定した接続先のリスナに対して、接続できるかテストするツールである。

tnsping net_service_name [try_count]
net_service_name
ローカルネーミングパラメータファイル(tnsnames.ora)で定義した接続識別子(ネットサービス名)
try_count
接続を試みる回数
$ tnsping orcl 3