オフィス狛 技術部です。
弊社では、C# を使ってOracleに接続する際は、
Oracle Data Provider for .NET (ODP.NET) を使用する機会が多いです。
Oracle Clientのインストールが不要で、Oracleに接続出来るのが、やっぱり強みですね。
ただ、Oracle Clientと全く関係ないかと言うと、そうでもないので、トラブルが発生する事があります。
今回、とあるWebサーバーのOracleへの接続設定を変更した際、以下のようなエラーが発生しました。
ORA-12154:TNS: 指定された接続識別子を解決できませんでした
接続情報はプログラム側とWeb.config側で、以下のように設定しています。
[プログラム側]
private OracleConnection _con; private string _constr = "User Id=komauser;" + "Password=komapass;" + "Data Source=SRC_TEST"; public void Connect() { try { this._con = new OracleConnection(this._constr); this._con.Open(); } catch (Exception ex) { throw ex; } }
[Web.config側]
<configuration> --(中略)-- <oracle.manageddataaccess.client> <version number="*"> <dataSources> <dataSource alias="SRC_DEV" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.111)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=komadb))) " /> </dataSources> </version> </oracle.manageddataaccess.client> </configuration>
「Data Sourceの指定が間違えている」とすぐ気付くかもしません。
ただ、今回はそれに気付かず、数時間悩んでしまいました。
気付かなかった理由として、
今回、変更したのは接続先のIPアドレスだけで、変更前は確かに接続出来ていたからです。
そうなると、もうネットワークとかその辺の設定ミスを疑ってしまいます。
まあ、結局数時間後に気付いたのですが、
では何故変更前はこの状態で接続出来たのか・・・。
実は、ODP.NET(パッケージはOracle.ManagedDataAccess.Client ) が Data Source を判断するのは、優先順位があります。
Oracle Data Provider for .NET, Managed Driver Configuration dataSources Section
によると、最優先は「 Web.config の oracle.manageddataaccess.client タグ」なのですが、
そこに合致しない場合は、「tnsnames.ora」を参照するようです。
と言う訳で、該当のWebサーバーを調べたら・・・「tnsnames.ora」ありました。
そこにしっかりと、
SRC_TEST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.110)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = komadb) ) )と記載されていました。
と言う訳で、
ODP.NET で 接続がうまくいかない場合、Data Source の指定を疑ってみましょう、と言う話でした。
C# , Oracle
0 件のコメント:
コメントを投稿