2.5 ネーミング・メソッドの理解

Oracle Net Servicesは、いくつかの種類のネーミング・メソッドを提供しています。これらは、各クライアント上のローカル構成またはネットワーク上のすべてのクライアントがアクセスできる集中化された構成をサポートしています。

2.5.1 ネーミング・メソッドについて

ネーミング・メソッドとは、データベース・サービスに接続するときに、クライアント・アプリケーションが接続識別子を接続記述子に変換するために使用する解決メソッドです。

概要

データベース接続の作成にサービス名を使用する際に必要な情報はリポジトリに格納することができ、1つ以上のネーミング・メソッドで表されます。ユーザーは接続文字列を指定して接続要求を開始します。

接続文字列には、ユーザー名、パスワードおよび接続識別子が含まれます。接続識別子には、接続記述子または接続記述子に解決される名前を使用できます。接続記述子には次のものが含まれます。

  • プロトコル・アドレスによるリスナーの位置情報など、サービスへのネットワーク・ルート。

  • データベース・サービス名またはOracleシステム識別子(SID)。

次のCONNECTコマンドでは、ネットワーク・サービス名のかわりに、接続識別子として完全な接続記述子を持つ接続文字列を使用しています。1つの行として、文字列を入力する必要があります。ページの幅のために2行で表示されます。

SQL> CONNECT hr@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server1)
(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))

最も一般的な接続識別子の1つは、サービスの単純な名前であるネットワーク・サービス名です。次のCONNECTコマンドでは、接続文字列に、接続識別子としてネットワーク・サービス名salesを使用しています。

SQL> CONNECT hr@sales

ネットワーク・サービス名のsalesを使用すると、salesから接続記述子への最初のマッピングによって、接続処理が実行されます。

ネーミング・メソッドのタイプ

マップされた情報には、ネーミング・メソッドによってアクセスします。次のネーミング・メソッドを利用できます。

  • ローカル・ネーミング

  • ディレクトリ・ネーミング

  • 集中化された構成プロバイダのネーミング

  • 簡易接続ネーミング

ネーミング・メソッドの構成方法

ネーミング・メソッドは、次のステップで構成します。
  1. ネーミング・メソッドを選択します。

  2. 名前または接続識別子に接続記述子をマップします。

  3. そのネーミング・メソッドを使用するクライアントを構成します。

2.5.2 ネーミング・メソッドの選択

接続記述子に名前をマッピングする適切なネーミング・メソッドの選択は組織の規模によって決まります。

  • データベースがごく少数の小規模な組織の場合は、簡易接続ネーミングを使用してデータベース・サーバーのホスト名でTCP/IP接続するか、ローカル・ネーミングを使用してクライアント上のtnsnames.oraファイル内に名前を格納します。

  • データベースが数個の大規模な組織の場合は、ディレクトリ・ネーミングを使用して名前を集中化されたディレクトリ・サーバーに格納するか、集中化された構成プロバイダ・ネーミングを使用して名前を集中化された構成プロバイダに格納します。

  • インターネット・ネットワークの場合は、ローカル・ネーミング・メソッドでデータベースに接続するために必要なアプリケーションWebサーバーを構成します。

ここでは、各ネーミング・メソッドの長所と短所、およびネットワークで使用するための推奨事項を要約します:

ネーミング・メソッド 説明 メリット/デメリット 推奨環境:

ローカル・ネーミング

ネットワーク・サービス名とその接続記述子を、tnsnames.oraという名前のローカルに配置された構成ファイルに格納します(この構成ファイルは、デフォルトではORACLE_BASE_HOMEnetwork/adminディレクトリにあります)。

メリット:

  • ネットワーク・サービス名アドレスを解決する簡単な方法です。

  • 異なるプロトコルを実行しているネットワーク間でネットワーク・サービス名を解決します。

デメリット: すべてのネットワーク・サービス名とアドレス変更をローカル側で構成する必要があります。

ほとんど変更がなくサービス数の少ない単純な分散ネットワーク

ディレクトリ・ネーミング

接続識別子を集中化されたLDAP準拠のディレクトリ・サーバーに格納し、データベース・サービスにアクセスします。

メリット:

  • ネットワーク名とアドレスを1箇所に集中させるため、名前の変更と更新が管理しやすくなります。このため管理者は数百、数千のクライアントに対して変更を行う必要がありません。

  • ディレクトリはこの他のサービスの名前も格納します。

  • ツールを使用して簡単に構成ができます。

  • 外部構成ファイル(ldap.orasqlnet.oraなど)を指定するかわりに、接続識別子でLDAPパラメータを直接渡すことで、LDAP名前参照を指定する代替方法を提供します。

デメリット: ディレクトリ・サーバーにアクセスする必要があります。

頻繁に変更される大規模で複雑なネットワーク(20個を超えるクライアント・コンピュータがある)

集中化された構成プロバイダのネーミング

接続記述子やデータベース資格証明の参照(オプション)を、Azure App ConfigurationストアやOracle Cloud Infrastructure (OCI) Object Storageなどの集中化された構成プロバイダにJSONファイルとして格納します。

メリット:

  • ネットワーク名とアドレスを1箇所に集中させるため、接続記述子を管理(追加、削除または変更)しやすくします。これにより、管理者が、数百または数千になる可能性がある複数のクライアント接続記述子を変更する必要がなくなります。

    たとえば、ローカル・ネーミング・メソッド(tnsnames.ora)または簡易接続ネーミング・メソッドを使用して多数の接続記述子がクライアントに格納されている場合は、何か変更があると、これらのクライアント接続記述子すべてに対する更新が必要になります。

  • インスタンス・ベースまたは管理対象アイデンティティ・ベースの認証を使用している場合、集中化された構成プロバイダにアクセスするためのパスワードは、Microsoft AzureまたはOCIによって管理されます。

  • 格納されているすべてのデータベース・ユーザー名およびデータベース・パスワードのデータベース・パスワード変更ポリシーを集中管理できます。

  • マルチテナント・クラウド・サービス環境で実行されているクライアント・アプリケーション(ローカル・システム・ファイルに格納されているウォレットへのアクセス権がない場合がある)でリモート・ストア内のウォレットを一元的に管理できます。

デメリット:

  • OCI Object StorageまたはAzure App Configurationサービスへのアクセスが必要です。

  • インスタンスベース、リソース・プリンシパルベースまたは管理対象アイデンティティ・ベース認証の外部で使用する場合、変更が発生するたびに、接続識別子でクラウド・アクセスのユーザー名とパスワードを変更する必要がある場合があります。

頻繁に変更される大規模で複雑なネットワーク(20個を超えるクライアント・コンピュータがある)

簡易接続ネーミング

クライアントは、ホスト名およびオプションのポート名やサービス名から構成されるTCP/IP接続文字列を使用して、Oracle Databaseサーバーへ接続できるようになります。

メリット:

  • 最小のユーザー構成で済みます。ユーザーは接続を確立するためにデータベース・ホスト名のみを指定します。

  • 簡易接続ネーミング・メソッドでは、クライアント側の構成は必要ありません。

  • ローカル名構成ファイル(tnsnames.ora)の作成とメンテナンスの必要がありません。

デメリット: 推奨環境の欄に示すように使用できる環境に制限があります。

次に示す条件に合致する単純なTCP/IPネットワーク

  • クライアントおよびサーバーはTCP/IPを使用して接続していること。

  • 拡張接続記述子を必要とする機能がないこと。

2.5.3 ネーミング・メソッドを使用したクライアント・セッションの確立

ネーミング・メソッドを使用してクライアント・セッションを確立するための一般的なプロセスについて学習します。

  1. クライアントは、接続識別子を指定して接続要求を開始します。

  2. 接続識別子は、ネーミング・メソッドによって接続記述子に解決されます。

  3. クライアントは、接続記述子内に存在するアドレスに対して、接続要求を実行します。

  4. リスナーは要求を受け取り、それを該当するデータベース・サーバーに送ります。

  5. データベース・サーバーによって、接続が受け入れられます。

ノート:

接続記述子の他にも、ネーミング・メソッドを使用して、接続名をプロトコル・アドレスやプロトコル・アドレス・リストにマッピングできます。

2.5.4 接続文字列の入力

ネットワーク・コンポーネントの起動後に、ネットワーク経由の接続を確立できます。接続の確立方法は、ネーミング・メソッドと、接続に使用するツールによって異なります。

接続文字列は次のような形式です:
CONNECT username@connect_identifier

デフォルトの接続識別子

ほとんどのオペレーティング・システムで、デフォルトの接続識別子を定義できます。デフォルトを使用する場合、接続文字列で接続識別子を指定する必要がなくなります。デフォルトの接続識別子を定義するには、LinuxおよびUNIXプラットフォームの場合は環境変数TWO_TASKを、Microsoft Windowsの場合は環境変数LOCALまたはレジストリ・エントリを使用します。

たとえば、環境変数TWO_TASKsalesと設定されている場合は、SQL*Plusから、CONNECT username@salesではなくCONNECT usernameを使用してデータベースに接続できます。Oracle NetはTWO_TASK変数を確認し、接続識別子として値salesを使用します。

TWO_TASKおよびLOCAL環境変数の設定方法は、Oracleのオペレーティング・システム固有のマニュアルを参照してください。

接続識別子と接続記述子の構文特性

接続文字列で使用する接続識別子には、一重引用符(')または二重引用符(")で囲む場合を除き、空白を含めることはできません。次の例では、空白を含む接続識別子および接続記述子が一重引用符で囲まれています。
CONNECT scott@'(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)
(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))'
Enter password: password

CONNECT scott@'cn=sales, cn=OracleContext, dc=us, dc=example, dc=com'
Enter password: password
接続識別子の中で二重引用符(")が使用されている場合は、一重引用符(')で囲みます。たとえば:
CONNECT scott@'sales@"good"example.com'
Enter password: password
接続識別子の中で一重引用符(')が使用されている場合は、二重引用符(")で囲みます。たとえば:
CONNECT scott@"cn=sales, cn=OracleContext, ou=Mary's Dept, o=example"
Enter password: password

Oracle Database接続文字列ユーティリティ

Oracle Database 23ai以降では、Oracle Database接続文字列コマンドライン・ユーティリティ(connstr)を使用して、すべての使用可能なネットワーク・サービス名の接続文字列を表示できます。

こうした文字列は、各種の形式(簡易接続、JDBC Thinまたは接続記述子など)で表示できます。また、クライアント・アプリケーションまたはツール(SQL*Plus、PythonまたはJDBC Thinクライアントなど)で使用すると、データベースにすばやく接続できます。また、connstrユーティリティを使用すると、ローカル・ネーミング・メソッドで使用するサービス名およびその接続記述子をtnsnames.oraファイルに書き込むことができます。

たとえば、このユーティリティは、sales.us.example.comサービス名の次の接続記述子を含むtnsnames.oraファイルを生成します:

sales.us.example.com=
    (DESCRIPTION=
        (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
        (CONNECT_DATA=
            (SERVICE_NAME=sales.us.example.com))
    )

クライアント・アプリケーションは、データベースに接続するための接続文字列でsales.us.example.comを次のように使用できます:

sqlplus scott@sales.us.example.com
Enter password: password