
オフィス狛 技術部です。
弊社では、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 件のコメント:
コメントを投稿