gpt4 book ai didi

odp.net - Oracle.ManagedDataAccess 连接请求超时

转载 作者:行者123 更新时间:2023-12-04 15:57:36 26 4
gpt4 key购买 nike

我遇到了与 Oracle ManagedDataAccess.dll 一起使用的线程代码的问题。为了模拟这个问题,我创建了一个小的测试应用程序,它打开一个连接、执行查询并关闭连接。

发生的事情是,当我运行此代码时,在 conn.open() 语句中随机出现“连接请求超时”(ODP-1000)。现在我在那里做了大量的谷歌搜索,它告诉我池大小太小,但是这里不是这种情况,因为那样我会得到一个“池连接超时”异常(ODP-1012)。我也玩过连接字符串属性,在测试应用程序中,当我设置更大的“连接超时”属性时,我可以让它完美无瑕,但关键是这对我的应用程序没有帮助正在工作。

任何帮助或见解将不胜感激!

 class Program  
{
static readonly object _object = new object();
static string connectionstring = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=oralinux.contoso.com)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DB)));User Id=system;Password=xxxxxx;Pooling=True;Min Pool Size=;Max Pool Size=20;Incr Pool Size=10;Decr Pool Size=1;Connection Lifetime=0;Connection Timeout=1;Self Tuning=false";
static string query = "select to_char(max(end_time),'Mon-DD-YYYY HH24:MI:SS') \"SPFILE\" from V$RMAN_STATUS where object_type='SPFILE' and status='COMPLETED'";
static void Main(string[] args)
{
for (int i = 0; i < 1000; i++)
{
Thread myNewThread = new Thread(DoWork);
Console.WriteLine(i.ToString());
}
}

static void DoWork()
{

lock (_object)
{

DataTable dt = new DataTable();

using (OracleConnection conn = new OracleConnection(connectionstring))
{
conn.Open();

using (OracleCommand cmd = new OracleCommand(query, conn))
{

using (OracleDataAdapter adap = new OracleDataAdapter(cmd))
{
adap.Fill(dt);
}

while (conn.State != ConnectionState.Closed) conn.Close();
}

conn.Dispose();
}
}
}
}

最佳答案

我有一个类似的场景,在轻线程应用程序中快速打开和关闭连接,并在创建连接时随机超时。
在我的例子中,默认的最小连接池大小是 1,托管组件在创建新组件时似乎很慢。我做了什么,关注 this , 被更改 MinPoolSize我的属性(property)OracleConnectionStringBuilder到一个比我预期的最大并发调用数(15 MinPoolSize 到 10 最大并发数)稍大的数字,只是为了安全起见。
到目前为止似乎已经发挥了作用。

关于odp.net - Oracle.ManagedDataAccess 连接请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25600358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com