アプリケーションは正常に動作し、サーバーを除くすべてのマシンから毎回接続します。ただし、サーバー上で実行すると、20 回程度の試行で 1 回の接続に成功します。ファンキーな症状から判断すると、何らかのネットワーク構成関連の問題であると思われます (パケットがランダムに失われるなど)。しかし、同僚のネットワーク管理者がさまざまな設定を試しましたが、原因/解決策を見つけることができませんでした。
真剣に頭がおかしくなっているので、すべてのアドバイスをいただければ幸いです。ODP.NETに切り替えることで問題が解決するか、少なくともトラブルシューティングが容易になるかどうか疑問に思っていました(MSのプロバイダーはあまり安定していません)。ただし、アーキテクチャはあまり柔軟ではないため、切り替えにはかなりの時間がかかります。しかし、それが唯一の合理的なことである場合...
私が使用しているコードの一部:
DbConnection conn = new OracleConnection();
conn.ConnectionString = _connectionString;
try
{
conn.Open();
DbCommand cmd = conn.CreateCommand();
cmd.CommandText = "select sysdate from dual";
cmd.Connection = conn;
_logger.Info("Sysdate: " + cmd.ExecuteScalar().ToString());
}
catch (OracleException oex)
{
_logger.ErrorException("Oracle exception: " + oex.Message, oex);
}
catch (Exception ex)
{
_logger.ErrorException("Exception: " + ex.Message, ex);
}
finally
{
if (conn != null) conn.Close();
}
より詳しい情報:
- プロバイダー: System.Data.OracleClient
- ライブラリ: instantclient-basiclite-win32-10.2.0.3-20061115
- 接続文字列の形式は次のとおりです。
Data Source=ip_address:port_number/instance;Persist Security Info=True;User ID=user;Password=passwd
- 問題なく接続する他のアプリ: 同じライブラリを使用する QueryExpress、Sql Developer
- OS: Windows Server 2008 Standard SP 2