16.3.2 ORA-12154

指定した接続別名を解決できないことを示します。

メッセージ

ORA-12154: Cannot connect to database.
Could not find alias string in string.

たとえば:

LDAPネーミング・アダプタを使用する場合:
ORA-12154: Cannot connect to database.
Could not find alias sales in LDAP.
TNSNAMESネーミング・アダプタを使用する場合:
  • 1つの(システムまたはローカル)tnsnames.oraファイルのみを使用する場合:
    ORA-12154: Cannot connect to database.
    Could not find alias sales in
        /u01/app/oracle/product/21.3.0/dbhome_1/network/admin/tnsnames.ora.
  • システムとローカル両方のtnsnames.oraファイルを使用する場合:
    ORA-12154: Cannot connect to database.
    Could not find alias sales in
        path_to_file_1, path_to_file_2.
TNSNAMESとLDAPのネーミング・アダプタを使用する場合:
  • 1つの(システムまたはローカル)tnsnames.oraファイルのみを使用する場合:
    ORA-12154: Cannot connect to database.
    Could not find alias sales in
        /u01/app/oracle/product/21.3.0/dbhome_1/network/admin/tnsnames.ora and LDAP.
  • システムとローカル両方のtnsnames.oraファイルを使用する場合:
    ORA-12154: Cannot connect to database.
    Could not find alias sales in
        path_to_file_1, path_to_file_2 and LDAP.

原因

データベースまたは他のサービスへの接続が接続記述子を使用してリクエストされていますが、指定された別名は、構成されているどのネーミング・メソッドを使用しても接続記述子に解決できません。たとえば、接続識別子としてネットワーク・サービス名を使用していた場合、そのネットワーク・サービス名がネーミング・メソッド・リポジトリで見つからないか、リポジトリが見つかっていません。

デフォルトでは、ローカル(TNSNAMES)から開始して、LDAP、簡易接続プラスの順ですべてのネーミング・メソッドがクライアントで試行されます。これらすべてのネーミング・メソッドで別名の解決に失敗すると、エラーが返されます。

処置

  1. 指定した接続文字列に誤りがないかを確認します。

  2. sqlnet.oraファイルにNAMES.DIRECTORY_PATHパラメータが含まれている場合は、そのパラメータに有効な値が含まれていることを確認してください。

  3. tnsnames.oraファイルの別名を使用している場合は、次のステップを実行します:
    • tnsnames.oraファイルが正しいディレクトリに存在していて、アクセスできることを確認します。tnsnames.oraファイルは次のいずれかの場所にあります:
      • 環境変数TNS_ADMINで指定したディレクトリ(設定されている場合)。

      • ORACLE_BASE_HOME/network/adminディレクトリ。ファイルがORACLE_BASE_HOME/network/adminディレクトリにない場合は、ORACLE_HOME/network/adminディレクトリでファイルを探します。

    • 接続文字列に指定された別名が、いずれかのtnsnames.oraファイルに存在することを確認します。

      名前が単純でsqlnet.oraファイルにNAMES_DEFAULT_DOMAINがない場合、またはネットワーク・サービス名が完全修飾名である場合は、このネットワーク・サービス名がtnsnames.oraファイルの名前と厳密に一致している必要があります。接続文字列のネットワーク・サービス名が単純な場合は、sqlnet.oraファイルのNAMES_DEFAULT_DOMAINパラメータを調べます。その値が、接続文字列で指定されているネットワーク・サービス名に追加されます。この完全修飾名が、tnsnames.oraファイル内のエントリである必要があります。

    • tnsnames.oraファイルのどこにも構文エラーがないことを確認します。一致しないカッコまたは文字を検索してください。マジック・クォートが使用されていないことを確認します。

    • 「ログイン」ダイアログ・ボックスから接続する場合は、接続するネットワーク・サービス名の前にアット・マーク(@)を付けていないことを確認します。クライアントのトレースをアクティブにして、操作を繰返します。

  4. LDAPディレクトリ・ネーミングを使用している場合は、次のステップを実行します:
    • 接続識別子として使用したネット・サービス名またはデータベース名が、ディレクトリ内で構成されていることを確認します。

    • LDAPディレクトリ・サーバーが稼働しており、アクセスできることを確認してください。

    • 接続識別子として完全修飾ネット・サービス名または完全なLDAP DNを指定して、使用するデフォルト・コンテキストが正しいことを確認してください。

    • ldap.oraファイルが正しい場所に存在することを確認します。ldap.oraファイルが、次のディレクトリで次の順に検索されます:
      • 環境変数TNS_ADMINで指定されたディレクトリ。

      • ORACLE_BASE_HOME/network/adminディレクトリ。ファイルがORACLE_BASE_HOME/network/adminディレクトリにない場合は、ORACLE_HOME/network/adminディレクトリでファイルが検索されます。

      • 環境変数LDAP_ADMINで指定されているディレクトリ。

      • 読取り専用Oracleホームの場合はORACLE_BASE_HOME/network/adminディレクトリ。

      • 読取り/書込みOracleホームの場合はORACLE_HOME/network/adminディレクトリ。

    • 次のように、ldap.oraファイルで定義されているパラメータが正しいことを確認します。
      • DIRECTORY_SERVERS パラメータで、1つ以上の有効なLDAPサーバーの正しいホストとポートが定義されていること。

      • DEFAULT_ADMIN_CONTEXTパラメータに、このディレクトリのOracleコンテキストの場所が定義されていること。ここにネットワーク・サービスのエントリが含まれている必要があります。

      ldap.oraファイルが存在しない場合、これらのパラメータは自動検出を使用して解決されます。

    • LDAPサーバーのホストとポートがDNSで定義されていることを確認します。

    • ディレクトリでデフォルトのOracleコンテキストが定義されていることを確認します。

    • ldapsearchユーティリティまたはディレクトリ管理ツールを使用して、DEFAULT_ADMIN_CONTEXTパラメータの値で指定されている場所のOracleコンテキスト内にネットワーク・サービス・オブジェクトが存在することを確認します。