【发布时间】:2015-11-27 18:41:13
【问题描述】:
我正在尝试使用 ODP.NET 版本 2.111.6.20 为我的 .NET 应用程序配置连接池。数据库是 Oracle 11.1。
我在我的 .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”还是手动创建/处理您的连接/命令会很好
-
查看代码示例对原始帖子的更新...正如您所见,我在代码中使用了语句,而不是手动关闭处理连接
-
我的 Oracle.DataAccess 程序集是 4.112.3.0,与您的 2.111.6.20 版本相同吗?如果是这样,也许是时候更新了。除非你被限制在 .NET 4 之前的版本,而且不能?
标签: c# .net oracle connection-pooling odp.net