ODP.NETバージョン2.111.6.20を使用して、.NETアプリケーションの接続プーリングを構成しようとしています。データベースはOracle 11.1です。ODP.NET接続プールパラメータ
私は、.NET 2.0のアプリケーションで次の接続文字列を使用しています:
Data Source=prod; User Id=FAKE_USER; Password=FAKE_PASS; Pooling=true; Min Pool Size=2; Max Pool Size=5; Connection Timeout=30;"
を接続プールは、2つの接続で初期化し、必要に応じて5つの接続までインクリメントすべき文書によります。それは決して5つ以上の接続を得るべきではありません。
私が見ているのは、接続が一度に2つ増え、最大10の接続に成長していることです。 v $ sessionテーブルを照会してOracleデータベース内の接続を監視しているので、アプリケーションからの特定のアプリケーションからの接続であることがわかります。
このアプリケーション内の接続プールで発生している可能性のあるものを特定できれば、誰でも最大接続数を超えている可能性があります。感謝します。ここで
サンプルC#コード
は、データベースへの呼び出しを行うコードのサンプルです:
const string connectionString = "Data Source=prod; User Id=FAKE_USER; Password=FAKE_PASS; Pooling=true; Min Pool Size=5; Max Pool Size=5; Connection Timeout=30;";
using (OracleConnection connection = new OracleConnection(connectionString)) {
connection.Open();
using (OracleCommand command = new OracleCommand("ALTER SESSION SET TIME_ZONE='UTC'", connection)) {
command.ExecuteScalar();
}
using (OracleTransaction transaction = connection.BeginTransaction()) {
const string procSql = @"BEGIN P_SERVICES.UPDATE_VERSION(:id, :version, :installDate); END;";
using (OracleCommand command = new OracleCommand(procSql, connection)) {
command.Parameters.Add(new OracleParameter("id", OracleDbType.Varchar2) { Value = id });
command.Parameters.Add(new OracleParameter("version", OracleDbType.Varchar2) { Value = version });
command.Parameters.Add(new OracleParameter("installDate", OracleDbType.TimeStamp) { Value = dateUpdated });
try {
command.ExecuteNonQuery();
} catch (OracleException oe) {
if (Log.IsErrorEnabled) {
Log.ErrorFormat("Update Error: {0}", oe.Message);
}
throw;
}
transaction.Commit();
}
}
}
コマンドをどのように実行しているかの例を投稿できますか?あなたが "USING"を使用しているかどうか、または接続/コマンドを手動で作成/破棄しているかどうかを確認すると良いでしょう。 –
コードサンプルの元の投稿への更新を見てください。コードを手動で閉じるのではなく、接続を切断する – jprincipe
My Oracle.DataAccessアセンブリが4.112.3.0であるのは、バージョン2.111.6.20の同じアセンブリですか?もしそうなら、多分それを更新する時間です。 .NET 4以前のバージョンに制限されていない限り、できないのですか? –