ナレッジベース

TNSNames.ora を使用しない場合に Oracle への接続時にエラー "ORA-12154" が発生した


発行: 01 Aug 2014
最終修正日: 20 Jul 2023

問題

LDAP、TNSNAMES、または EZCONNECT を使用するコンピューターで作成された Oracle 接続、または、ServerServicePort の 3 つの接続パラメーターすべてが最初の接続中に構成された Oracle 接続を使用しているときに、接続が機能しなくなって次のエラーが発生する場合があります。

"Oracle database error 12154: ORA-12154: TNS:could not resolve the connect identifier specified" (Oracle データベース エラー 12154: ORA-12154: TNS:指定された接続識別子を解決できませんでした)

同じ Oracle データベースへの接続を試みるときに、Server パラメーター内の TNSNames.ora ファイルからのサービス名を使用して、他の 2 つのパラメーターを空欄のままにすると、接続は成功します。

この動作は、次の場合に発生する可能性があります。
  • Tableau Desktop を実行しているコンピューター間でワークブックを共有する際に、1 つのコンピューターには上記の構成ファイルがあり、もう 1 つのコンピューターにはこれらのファイルがない場合。
  • Oracle へのライブ接続を、Tableau Desktop を実行しているコンピューター (上記のいずれかの構成ファイルを使用しています) から Tableau Server のインスタンス (上記の構成ファイルを使用していません) にパブリッシュする場合。(接続が抽出としてパブリッシュされる場合、接続は機能しますが、更新されません。)

環境

  • Tableau Server
  • Tableau Desktop
  • Oracle

解決策

オプション 1:

Oracle データベース管理者と連携して、Tableau Desktop または Tableau Server を実行しているコンピューターでの Oracle クライアントのホスト名接続の種類を許可します。

オプション 2:

次の回避策により、ホスト名の接続の種類が許可される場合があります。

  1. Tableau Desktop または Tableau Server を実行しているコンピューターで、sqlnet.ora ファイルを探します。通常、ファイルが含まれるフォルダーは TNS_ADMIN 変数で指定されており、TNSNames.ora ファイルも含んでいます。詳細については、「Oracle 接続を設定して TNSNames.ora を使用する」の「TNS_Admin 環境変数を設定する」、および Oracle FAQ の「Sqlnet.ora」を参照してください。
    注: このフォルダーに sqlnet.ora ファイルが含まれていない場合、sqlnet.ora ファイルを作成します。
  2. sqlnet.ora ファイルで、NAMES.DIRECTORY_PATH 行を次のように修正するか、sqlnet.ora ファイルに次の行を追加します。 
    NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, HOSTNAME)
注: この問題が Tableau Server 分散環境で発生する場合、上記のステップを Tableau Server インストール内のすべてのコンピューターに実行します。 接続にサービス名とポート番号を含め、接続ダイアログの [サーバー] テキスト フィールドで FQDN (完全修飾ドメイン名) を使用します。

原因

sqlnet.ora ファイルが、Oracle ドライバーが 3 つすべての接続パラメーターを使用してデータベースを探すことを許可していません。

TNSNAMES.ora または LDAP.ora を使用しているときは、Tableau コネクタの外部で Oracle 接続とそのパラメーターを定義できます。"net_service_name" の部分はサーバー フィールドとして使用され、認証資格情報が入力されると、TNSNAMES/LDAP ファイルからサービス名とポート番号を取得します。TNSNAMES/LDAP を使用しないコンピューターでは、接続が機能するために、サービス名とポート番号を入力する必要があります。また、カスタマイズされた名前ではなく、サーバー用に FQDN を使用する必要があります (例: "oracle.test.tsi.lan" が FQDN で、"Oracle_01" が net_service_name として使用される場合があります)。
この記事で問題は解決しましたか?