Oracleデータベースでは、ネットワーク接続にOracle Netを使用します。Oracle Netはクライアントとサーバの双方に配置、設定されます。この文書は、オラクルのネットワーク設定について記述しています。
データベースはデータファイルやREDOログファイルなどのファイル群であり、データベース名(DB_NAME)で識別される。
インスタンスはシステムグローバル領域(SGA)とバックグラウンドプロセスから構成され、システム識別子(SID)で識別される。
システム識別子(SID: System Identifier)とは、特定のホスト上でOracleデータベースのインスタンスを示す一意の名前である。あくまで特定のホスト上での識別子であるため、ネットワーク内でユニークとは限らない。そのため、Oracleサーバ上ではSID単独で識別子として使えるが、OracleクライアントからはSIDだけでは特定できないので、他の識別子(ホスト名など)と組み合わせて使用する。
サービスは外部からインスタンスに接続するため、インスタンス名とドメイン名を組み合わせたサービス名で識別される。Oracle RAC (Real Application Clusters)構成の場合は、ひとつのサービスに複数のインスタンスを関連付けることができる。これにより、ひとつのサービスで複数のインスタンスに負荷分散できる。
ネットサービスは、OracleクライアントからOracleサーバに接続するために、ネットサービス名で識別される。
クライアントからOracleデータベースに接続するには、クライアント側のOracle Netを構成して、リスナーと接続できるようにします。
SQL*PlusなどのOracleクライアントからネットワークを通じてOracleデータベースと接続する際に、ホスト名やポート番号、サービス名などの接続パラメータを指定する必要がある。
ローカルネーミングパラメータ(tnsnames.ora)でこれらの接続パラメータをまとめたネットサービスを定義しておけば、Oracleクライアントからネットワークを通じてOracleサーバと接続する際に、ネットサービス名を指定するだけで済む。
tnsnames.oraファイルは、デフォルトで次の場所に配置されている。
OS | ディレクトリ |
---|---|
UNIX | $ORACLE_HOME/network/admin |
Windows | %ORACLE_HOME%\network\admin |
tnsnames.oraは次の場所に配置することもできる。
TNS_ADMIN
またはレジストリ値で指定されたディレクトリ。
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 ...) ...)
接続記述子を次のいずれかの形式で指定する。
(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))
接続するOracleサーバのホスト名又はIPアドレスを指定する。
接続するOracleデータベースサーバのポート番号を指定する。
接続するOracleデータベースサーバのサービス名を指定する。オラクル初期化パラメータファイルのSERVICE_NAMESパラメータの値を設定する。
接続する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))
)
Oracle Netのサーバ側プロセスは リスナー と呼ばれ、 リスナー・パラメータ (listener.ora) ファイルで構成します。
listener.oraファイルは、デフォルトで次の位置に配置されています。
OS | ディレクトリ |
---|---|
UNIX | $ORACLE_HOME/network/admin |
Windows | %ORACLE_HOME%\network\admin |
listener.oraは次の位置に配置することもできます。
TNS_ADMIN
またはレジストリ値で指定されたディレクトリ。
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 )
値 | 説明 |
---|---|
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 [ { 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 net_service_name [try_count]
$ tnsping orcl 3