2012-07-16 65 views
1

长时间运行的应用程序使用MS C OBDC API创建和使用到Oracle DB的SQL连接。该应用程序最初设计用于在启动时建立ODBC连接,并在应用程序运行时无限期地保持该连接,可能需要数周或数月。应该保持ODBC SQL连接打开多久?

我们看到非常罕见的情况下,连接突然死了,我想知道这是否是因为我们使用他们错了,或者如果它被认为是确定持有这样的连接。任何人都可以指出我关于这个问题的一些明确信息吗?

+0

你能解释一下你的应用程序做什么? – APC 2012-07-16 10:35:49

+0

并不详细,但我可以说它由运行在服务器/客户端PC上的许多独立应用程序组成,这些应用程序都与独立服务器上的数据库通信。进程运行好几个月,但没有人持续以高负载的方式访问数据库......任何特定的进程可能最多(通常少得多)每分钟访问数据库几次。 – 2012-07-16 11:17:31

回答

1

我不知道有关于这个明确的信息,但长期运行的程序,你总是有这类的事件有所准备,他们只是发生(而不是只与数据库连接,但也与保持开放套接字延长期限)。我与甲骨文没有经验,但我有Informix的一个非常类似的设置,这是(在伪代码)我们做什么

while (programissupposedtorun) { 
    opendb(); 
    do { 
     youractivities(); 
    } while(dbisok); 
    closedbandcleanup(); 
} 

只要你能正确地检测到连接死了,并能恢复处理而不会丢失数据,您应该可以。

1

我不熟悉使用ODBC,但这样的用例有connection pool最好处理。您的应用程序只需在池中完成一些工作时就可以请求池中的连接,并在池完成后立即释放它 - 池将实际上(重新)连接到数据库。

快速搜索ODBC连接池提出这:Driver Manager Connection Pooling

+0

我在这里不明白的是,如何使用预先准备好的语句进行汇总......每当你要求建立连接时,你都必须重新准备那些轻描淡写的语句。 – 2012-07-16 10:13:12

+1

连接池适用于那些需要短时间间歇地与数据库进行通信并需要进行不连续工作的用户的应用程序。换句话说,传统的OLTP应用程序。这完全不清楚,这是OP的情况。 – APC 2012-07-16 10:34:59

+0

@John:是的,但编写声明的成本是微不足道的,除非您每秒运行相同的查询数百次。数据库连接的创建/维护成本要高得多,而且池可以为您高效管理。 – casablanca 2012-07-16 15:54:07