2017-11-15 21 views
0

Oracleのデータベースに接続するために、.Net 4.6.2アプリケーションをMicrosoftのSystem.Data.OracleClientからOracle独自の管理ODP.Net(Nugetパッケージ、バージョン12.2.11)に移行します。私は、Oracleクライアントがインストールされている(11gR2)とは別に、参照を変更することから、句を使用して、名前などのコードはほぼ同じです。しかし、私の事前移行コードは非常にうまく接続していますが、移行後は接続されません。その代わりに、tnsnames.oraファイルなぜManaged ODP.NetはSERVICE_NAMEを要求していますか?

ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA. 

OracleException

をスロー同じであり、アプリケーションの接続文字列が同じである、と私は前にサービス名を指定するために必要なことがありません。

のtnsnames.ora:

ORACLEDBSERVER2 = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = OracleDBServer2)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
     (SID = orcdb10g) 
     (SERVER = DEDICATED) 
    ) 

接続文字列:

USER ID=MATTESTNHADMIN;PASSWORD=XXXXX;DATA SOURCE=oracledbserver2 

は、なぜそれが今でサービス名を要求していますか? CONNECT_DATA部分に節を追加しても、私は同じエラーが発生します。(SERVICE_NAME = orcdb10g)

答えて

1

あなたのプログラムはtnsnames.oraファイルを見つけられないと仮定します。古いドライバーとは異なり、ODP.NETが管理するドライバーは、TNS_ADMINの値をレジストリーから読み取っていません。

ODP.NETが管理するドライバがtnsnames.oraファイルを探している方法を確認するには、https://stackoverflow.com/a/28283924/3027266を参照してください。

ODP.NET管理対象ドライバを使用する場合、それ以降のOracleクライアントをインストールする必要はありません。

+0

その洞察に感謝します。 tnsnames.oraファイルを実行可能フォルダにコピーすると、そのトリックが完了したようです。私はオラクルがこの一見無意味な変化をもたらした理由を知りたいです!混乱を避けるために、シンボリックリンクがここで呼び出されていると思います。 –

+0

リンクされた答えで指摘したように、 'tnsnames.ora'ファイルがどのように発見されるのかという共通の方法はありません。いくつかのオプションがありますが、すべて同じフォルダを指す必要があります。はい、シンボリックリンクを使用して必要な場合。 –

関連する問題