首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle.ManagedDataAccess连接请求超时

Oracle.ManagedDataAccess连接请求超时
EN

Stack Overflow用户
提问于 2014-09-01 14:56:53
回答 1查看 7.7K关注 0票数 6

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

当我运行这段代码时,在conn.open()语句中会随机出现一个"Connection request timed out“(ODP1000)。现在我已经做了大量的谷歌搜索,它告诉我池大小太小,但这里不是这样,因为这样我会得到一个“池连接超时”异常(ODP-1012)。我也使用了连接字符串属性,在测试应用程序中,当我设置一个更大的“连接超时”属性时,我可以将其完美地转换为war,但重点是,这对我正在使用的应用程序没有帮助。

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

代码语言:javascript
复制
 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();  
                }  
            }  
        }   
    }
EN

回答 1

Stack Overflow用户

发布于 2019-05-16 07:29:49

我有一个类似的场景,在一个轻线程的应用程序中快速打开和关闭连接,并在创建连接时获得随机超时。

在我的例子中,默认的最小连接池大小是1,而且托管组件在创建新连接池时似乎很慢。在this之后,为了安全起见,我将OracleConnectionStringBuilder中的MinPoolSize属性更改为一个比我预期的最大并发调用数稍大的数字(15 MinPoolSize到10个最大并发)。

到目前为止似乎起到了魔力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25600358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档