foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

Oracle 設定ファイル

Oracle は毎回、接続失敗で時間を無駄にしまくるので勉強してみた。

設定ファイル

正式には「Net 構成ファイル」と呼びます。
設定ファイルは "$ORAHOME/NETWORK/ADMIN/" に格納されており以下の3ファイルがある。

  • listener.ora
  • sqlnet.ora
  • tnsnames.ora

クライアントとサーバー

上記のファイルはクライアントとサーバーに以下のように配置する。

  • listener.ora …サーバーのみ。
  • sqlnet.ora …サーバーとクライアント。
  • tnsnames.ora …クライアントのみ。

tnsnames.ora

クライアントがサーバーを知るためのファイル。
hosts ファイルのようなもの。
いくつか設定がありますが注意すべきは最上位の項目と HOST エントリ。
最上位の項目は名称は何でも構わない。
外部から接続する際のデータソース名となる。
HOSTエントリは接続先のサーバーのホスト名かIPアドレスとなる。
以下が全体の記述例。

LOCALHOST =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521))
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

sqlnet.ora

クライアントからサーバーを知る方法を決めるためのファイル。
この方法をOracleでは「ネーミングメソッド」と呼び、以下2つのネーミングメソッドがある。

  • ローカルネーミングメソッド
  • ホストネーミングメソッド

よく使うのはローカルネーミングメソッド。
以下が全体の記述例。

# SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES)

listener.ora

サーバー側の待ち受けプロセスを設定するためのファイル。
LISTENER/DESCRIPTION_LIST/DESCRIPTION/ADDRESS/HOST に注意。
ここに前述の tnsnames.ora と同様にサーバーのホスト名またはIPアドレスを指定する。
以下が全体の記述例。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = INSPIRON530S)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

おまけ「CSE で繋がらない!」

CSE で設定ファイルを置く前は接続できたのに設定ファイルを置くと接続できない、という場合は接続文字列に注意する。
以下のようになっている。

  • 設定ファイルなし…空にすると接続可能。
  • 設定ファイルあり…tnsnames.ora の最上位項目名にすると接続可能。