Oracle開発関連情報
| 新着情報 | Aceessによりアクセス | ODBCの設定 | Javaサンプル | Net8設定 |
Net8の役割など
Net8とは
Net8は、Oracleデータベースをネットワークで使用する時の基盤となるソフトウェアです。
Oracleデータベースにアクセスする為に必ず必要です。簡単に言ってしまえば、
作成したアプリケーションプログラムとOracleデータベースの中間層に位置するミドルウェアということになります。
Net8の主な役割は、接続したコンピュータ間でデータを転送することと、
オペレーティングシステムやプロトコルの違いを吸収することです。
また、OracleではMS-AccessのJETエンジン(MDBファイル)のように、オペレーティングシステムのファイル
共有の機能を利用する必要はありません。Net8自身がその役割を果たしたからです。
Net8は、データベースを起動しているサーバーと、データベースにアクセスするクライアントのそれぞれにインストールする必要があります。
これは、ODBCドライブを使用する時にも変わりません。例外としては、JDBC Thinドライブやサードパーティが提供している特殊なミドルウェアを使用する時です。

Web環境におけるNet8の役割:

Webサーバー
Net8
TCP/IP

Oracle8i
Net8
TCP/IP

TCP/IP
ブラウザ

Net8とプロトコルアダプタの関係:

Oracle8i
or
クライアントアプリケーション
Net8
各種プロトコル
ネットワークプロトコル(TCP/IPなど)

次のコマンドにより、どのプロトコルアダプタ がインストールされているかは、知ることができます。
Windows NT/2000の場合
lsnrctl version

UNIXの場合
adapters

ネットワーク接続の仕組み
  サーバー上では、Oracleデータベースとネットワーク(NTの場合、この2つのサービス)が起動しています。ネットワークリスナーは、クライアントからの要求を受け付ける為、つねに特定のポート(デフォルト1521)を監視しています。
  ユーザーは、ネットサービス名で接続先のデータベースを指定します。そうすると、ネットワークリスナーに接続要求が送信されます。
  接続要求を受けたネットワークリスナーは、接続要求を受け入れられると判断した時には、今後Oracleデータベースと通信する為の接続先情報をクライアントに送信します。
  これ以降クライアントは、受け取った接続先情報を使って、Oracleデータベースと直接通信します。


文字コードの自動変換
  Net8は、コンピュータにあわせて自動的に文字コードを変換します。この時に重要になるのは、データベースのキャラクタセットとNLS_LANGパラメータです。
  データベースのキャラクタセットとは、データベースに格納しているデータの文字コードのことです。データベース作成時に決定し、作成した後は原則として変更できません。Windowsプラットフォームでは、シフトJISの「JA16SJIS」が一般的ですが、その他にもEUCの「JA16EUC」、7ビットASCIIの「US7ASCII」などがあります。
  一方、NLS_LANGとは、画面に表示する言語や文字コードのことです。「言語_地域.キャラクタ」の形式からなり、レジストリの値やコマンドプロンプトの環境変数として指定します。例えば、WindowsNT/2000のレジストリには「JAPANESE_JAPAN.JA16SJIS」という値が設定されています。レジストリと環境変数の両方に設定してある場合には、環境変数が優先されることになります。
  Oracleは、データを要求したコンピュータのNSL_LANGのキャラクタセットに基づきデータを自動的に変換します。サーバー側のNLS_LANGではないことに注意して下さい。実際には次の順序で変換されます。
  データベースに接続すると、データベースのキャラクタセットとクライアントコンピュータの NSL_LANGのキャラクタセットを比較します。
  キャラクタセットが同じ時はには何もしません。
  異なる時には、クライアント側のNLS_LANGで指定したキャラクタセットに変換します。この変換作業はクライアントで行います。
Point:
  NLS_LANGには、出力するデータのキャラクタセットを指定します。決してデータベースのキャラクタセットではありません。

Net8を設定する
ネットワークの設定に使用するファイル

使用するネーミングメソッドにあわせて、次のファイルが必要です。ローカルネーミングでは、各クライアントにtnsnames.oraとsqlnet.oraが必要です。
listener.ora
サーバ上のすべてのリスナーアドレスやリスナーの為の制御パラメータなど、リスナーに関するパラメータを設定します。Oracleデータベースが稼動するサーバ上に必要です。
sqlnet.ora
ネーミングメソッドやNet8の動作を設定します。サーバーとクライアント双方が必要です。
tnsnames.ora
ネットサービス名の設定ファイルです。どのマシンの、どのデータベースに、どの通信プロトコルを使って接続する、といった接続先情報を記述します。データベースにアクセスするコンピュータで必要になります。
names.ora
Oracle Nameの設定ファイルです。Oracle Namesが稼動するサーバー上に必要です。

ファイルの場所

Net8が使用するファイルの位置は、次のようになっています。Windows版ではバージョンによって異なりますが、UNIX版やLinux版ではバージョンにかかわらず同じです。
Net8 R8.1: %ORACLE_HOME%/NETWORK/ADMIN
Net8 R8.0: %ORACLE_HOME%/NET80/ADMIN
SQL*Net: %ORACLE_HOME%/NETWORK/ADMIN
UNIX/Linux: $ORACLE_HOME/NETWORK/ADMIN

作業の手順

実際のインストールは、次の順序で行います。
手順@:TCP/IPでサーバーに接続できるかを確認する
Net8は、TCP/IPなどの通信プロトコルの上位層で動きます。この為、TCP/IPレベルで通信ができなければ、Net8を使って通信することができません。そこで、はじめにTCP/IPレベルでの通信ができるかを確認します。 手順A:構成ファイルを作成する
Net8 Configuration AssistantなどのGUIツール、もしくは手動でtnsnames.oraを作成します。慣れないうちはGUIツールを使うことをお勧めします。
Net8 Configuration Assistantの場合
Oracle
|
----Network Administration
|
--------Net8 Configuration Assistant
|
------------ローカル・ネット・サービス名構成
|
----------------作成・削除・変更・名前変更
手順B:作成した構成ファイルで接続できるかを確認する
TNSPINGやSQL*Plusを使って、構成ファイルが正しく作成されていることを確認します。
手順C:作成した構成ファイルを配分する
すべてのクライアントでNet8 Configuration Assistantを実行してもよいですが。通常は1つファイルを作って、それを他のクライアントに配分します。

TCP/IPで接続できることを確認する

では、実際にTCP/IPから接続できるかを確認する手順を説明しましょう。
手順@:確認にはPINGコマンドを使用します。ここではOracleデータベースが稼動しているコンピュータ「comp1」に接続テストを行います。DOSコマンドプロンプトから、次のように入力します。 c:/>PING comp1
手順A:応答が返ってこないときには、ネットワークの設定に関して問題が発生しています。次の理由が考えられますので、それを解決してからNet8の設定を行ってください。
OSのネットワークの設定に誤りがある
DNSもしくはhostsファイルの設定に誤りがある
ネットワークが物理的に正しく接続されていない。

GUIツールで構成ファイルを作成する

Oracle7のころからOracleを使っている上級者ならば、GUIツールを使わずに直接エディタでtnsnames.oraやsqlnet.oraを作成するかもしれません。しかし多くのユーザーには難しいことだと思います。Oracleには、そのためのGUIツールが用意されています。
Net8 Configuration AssistantとNet8 Assistantがそれですが、操作も簡単なのでこちらを使うことをお勧めします。Net8 Easy ConfigはOracle8i R8.1.6で廃止され、現在ではNet8 Configuration Assistantに統合されています。なお、Net8 Configuration Assistantを使用する際の設定方法について関連資料を参照してください。

手動で構成ファイルを作成する

現在は、Net8 Configuration AssistantなどのGUIツールを使うのが一般的ですが、手動で作る方法を覚えておくとトラブルシュートの時に便利です。Oracle使いを目指すなら、ぜひ押さえておきたいところです。
手順@:
%ORACLE_HOME%/NETWORK/ADMINディレクトリにtnsnames.oraという名前のファイルを作成します。また%ORACLE_HOME%/NETWORK/ADMIN/SAMPLEディレクトリには、設定ファイルのサンプルがあるので参照にしてみてください。ただしOracleのバージョンによっては、すべての文法が書いてあって、流用しづらいものもあります。
手順A:
ネットサービス名が「COMP1」、ホスト名が「comp1」、データベースのサービス名が「COMP1.WANGXC.CO.JP」の場合には、LIST1のようになります。ホスト名のかわりにIPアドレスでも大丈夫です。インストール時の設定に応じて変更してください。LIST2はOracle8までの記述方法です。サービス名の代りにSIDを指定します。この方法でもOracle8iに接続できますが、新しい記述方法をお勧めします。

LIST1: ORacle8i R8.1以降のデータベースに接続する
COMP1 =
  (DESCRIPTION =
   (ADDRESS_LIST=
    (ADDRESS = (PROTOCAL = TCP) (HOST = comp1) (PORT = 1521)
    )
    (CONNECT_DATA =
     (SERVICE_NAME = comp1.WANGXC.CO.JP)
    )
  )

例:
# D:\ORACLE\ORA81\NETWORK\ADMIN\TNSNAMES.ORA Configuration File:d:\Oracle\Ora81\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle Net8 Assistant

#これはローカルマシンではなく、データベースサーバーです。
WANG.WANGXC.CO.JP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = wxc-dev)(PORT = 1521))

    (CONNECT_DATA =
      (SERVICE_NAME = sbya)
    )
  )

#これはローカルマシンです。つまり、ローカルマシンにもOracleをインストールしてあります。
O815.WANGXC.CO.JP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = wxc-51))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = o815)
    )
  )
# D:\ORACLE\ORA81\NETWORK\ADMIN\SQLNET.ORA Configuration File:d:\Oracle\Ora81\NETWORK\ADMIN\ sqlnet.ora
# Generated by Oracle Net8 Assistant

NAMES.DEFAULT_DOMAIN = WANGXC.CO.JP

SQLNET.AUTHENTICATION_SERVICES= (NTS)

SQLNET.EXPIRE_TIME = 0

NAMES.DIRECTORY_PATH= (TNSNAMES)
LIST2: ORacle8 R8.0以前のデータベースに接続する
COMP1 =
  (DESCRIPTION =
   (ADDRESS_LIST=
    (ADDRESS = (PROTOCAL = TCP) (HOST = comp1) (PORT = 1521)
    )
    (CONNECT_DATA =
     (SID = COMP1)
    )
  )

手順B:
同様にsqlnet.oraを作成します。LIST3がその内容です。NAMES.DIRECTORY_PATHの値は、ネーミングメソッドの優先順位を表します。順に、ローカルネーミング(TNSNAMES)、Oracle Names(ONAMES)、ホストネーミング(HOSTNAME)のようになっています。
手順C:
記述が正しいかどうかを、データベースに接続して確認します。コマンドプロンプトから「TNSPING ネットサービス名」と入力します。
c:/>TNSPING comp1
例:
C:\>tnsping wang

TNS Ping Utility for 32-bit Windows: Version 8.1.5.0.0 - Production on 05-JUN-01 09:37:22

(c) Copyright 1997 Oracle Corporation. All rights reserved.

Attemptingtocontact(ADDRESS=(PROTOCOL=TCP)(HOST=wxc-dev)(PORT=1521))
OK (40ミリ秒)

C:\>
手順D:
OKと表示されれば正しく構成ファイルが作成されます。
LIST3: sqlnet.oraの内容

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAME.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

Tips
Windows 95 OSR2でNet8 R8.1.5を使用しているときに、sqlnet.oraファイルに次の1行があるとデータベースに接続できないことがあります。そのときには次の行をコメントするか、削除してください。
SQLNET.AUTHENTICATION_SERVICES= (NTS)

構成ファイルを配布する

Oracleデータベースにアクセスするコンピュータが複数あるときには、先ほど作成した2つのファイル(tnsnames.oraとsqlnet.ora)を他のコンピュータにも配布します。もちろん、それぞれのコンピュータで構成ファイルを作成してもよいのですが、クライアントがたくさんあるときにはコピーしたほうが簡単です。
また、新しいデータベースが追加されたり、ネットワークの構成が変わったたときには、tnsnames.oraだけ再配布します。sqlnet.oraは、Net8の動作を記述しているだけなので、基本的に再配布の必要はありません。
ネットワークサービス名の仕組み
 Net8の基本的な仕組みや設定方法を説明してきました。ここで、もう一歩上級者になる為に、ローカルネーミング時のネットサービス名のメカニズムについて説明しましょう。この仕組みを理解することによって、「ORA-12154:TNS:サービス名を解決できません」というエラーを回避できるでしょう。
ドメイン名とは
  先ずドメインについて説明します。Oracleは大規模なネットワークに対応する為に、ネットサービス名にもTCP/IPネットワークのようなドメインという考え方を取り入れています。OracleのドメインとTCP/IPネットワークのドメインは完全に独立です。WANG.WANGXC.CO.JPというネットワークサービス名があった時、最初のピリオド以下の「WANGXC.CO.JP」の部分がドメインです。
  先ほどの説明では、ドメインは使いませんでしたが、今度はドメインを考慮した設定ファイルの仕組みについて説明します。
ネットサービス名を解決する
  LIST4とLIST5は、ドメインを利用したtnsnames.oraとsqlnet.oraです。このデータベースのドメインは「WANGXC.CO.JP」です。このドメインはTCP/IPネットワークのものと一致させてもさせなくてもよいのですが、一致させることをお勧めします。なぜなら、Oracle Universal Installerが、自動的にNMAES.DEFAULT_DOMAINにそのコンピュータのTCP/IPのドメイン名を設定することがあるからです。
LIST4:ドメインを利用したtnsnames.ora

COMP1.WANGXC.CO.JP =
  (DESCRIPTION =
   (ADDRESS_LIST=
    (ADDRESS = (PROTOCAL = TCP) (HOST = comp1) (PORT = 1521)
    )
    (CONNECT_DATA =
     (SERVICE_NAME = comp1.WANGXC.CO.JP)
    )
  )

LIST5:ドメインを利用したsqlnet.ora

NAMES.DEFAULT_DOMAIN=WANGXC.CO.JP
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAME.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

  さて、実際のネットサービス名の検索方法について説明します。
手順@:
データベースに接続する為に、ネットサービス名を指定します。
手順A:
この指定したネットサービス名にドメインが含まれているときは、そのまま使います。Oracleは、ネットサービス名に1つ以上のピリオドが含まれている時、ドメインが指定されていると判断します。
手順B:
ドメイン名が含まれていない時には、sqlnet.oraファイルのNAMES.DEFAULT_DOMAINエントリを参照し、接続時に指定したネットサービス名にこの値を付加します。
手順C:
この完成したネットサービス名と完全に一致するエントリをtnsnames.oraファイルから探します。
手順D:
整理すると次のようになります。どうしても接続できない時には、これらの理由を考えてtnsnames.oraとsqlnet.oraファイルを確認してください。
入力したネットサービス名:COMP1
NAMES.DEFAULT_DOMAINの値:WANGXC.CO.JP
完成したネットサービス名:COMP1.WANGXC.CO.JP