ODBC SQL连接应保持打开多长时间?

ODBC SQL连接应保持打开多长时间?,sql,oracle,winapi,odbc,Sql,Oracle,Winapi,Odbc,长时间运行的应用程序使用MS C OBDC API创建和使用到Oracle数据库的SQL连接。该应用程序最初设计用于在启动时建立ODBC连接,并在应用程序运行时无限期地保持该连接,可能持续数周或数月 我们看到很少有连接突然失效的情况,我想知道这是因为我们使用了错误的连接,还是像这样保持连接是可以的。有人能告诉我一些关于这个主题的确切信息吗?我不确定是否有关于这方面的确切信息,但对于长时间运行的程序,您必须随时准备好应对此类事件,它们只是会发生而已(不仅对于db连接,而且对于长时间打开的套接字也是

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


我们看到很少有连接突然失效的情况,我想知道这是因为我们使用了错误的连接,还是像这样保持连接是可以的。有人能告诉我一些关于这个主题的确切信息吗?

我不确定是否有关于这方面的确切信息,但对于长时间运行的程序,您必须随时准备好应对此类事件,它们只是会发生而已(不仅对于db连接,而且对于长时间打开的套接字也是如此)。我没有使用Oracle的经验,但我对Informix有一个非常类似的设置,这就是我们所做的(伪代码)

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

只要您能够正确地检测到连接已断开,并且能够在不丢失数据的情况下恢复处理,您应该就可以了。

我不确定是否有关于这方面的确切信息,但对于长时间运行的程序,您必须始终为此类事件做好准备,它们只是会发生(不仅是数据库连接,还包括长时间保持打开状态的套接字)。我没有使用Oracle的经验,但我对Informix有非常类似的设置,这就是我们所做的(伪代码)

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

只要您能够正确地检测到连接已断开,并且能够在不丢失数据的情况下恢复处理,您应该就可以了。

我不熟悉ODBC,但最好使用a来处理此类用例。您的应用程序只需在完成一些工作后从池中请求连接,并在完成后立即释放即可池将负责实际(重新)连接到数据库


快速搜索ODBC连接池会发现这样一个问题:

我不熟悉ODBC,但最好使用A来处理此类用例。您的应用程序只需在完成一些工作后从池中请求连接,并在完成后立即释放连接,池将负责实际(重新)连接到数据库


对ODBC连接池的快速搜索发现了以下问题:

这里我不明白的是池如何与准备好的语句一起工作……每次请求连接时,您肯定必须重新准备语句,这与它的要点略有出入。连接池是为有大量需要连接的用户的应用程序设计的o与数据库进行间歇、短时间的通信,并执行离散的工作单元。换句话说,这是典型的OLTP应用程序。这是否是OP的情况还不清楚。@John:是的,但除非每秒运行数百次相同的查询,否则准备语句的成本是微不足道的。创建/维护数据库连接的成本要高得多,而池可以为您高效地管理这些连接。@APC:没错,这是连接池的主要用途,但管理长期连接/重新连接是池已经做得很好的一项任务,所以为什么不重用该功能而不是推出自定义解决方案呢?我不知道什么derstand这里是池如何与准备好的语句一起工作的…每次你请求连接时,你肯定必须重新准备语句,这有点违背了它的要点。连接池是为那些有大量用户需要与数据库进行间歇性短时间通信的应用程序而设计的我们采用离散的工作单元。换句话说,是经典的OLTP应用程序。这是否是OP的场景还不清楚。@约翰:是的,但是准备语句的成本是微不足道的,除非你每秒运行数百次相同的查询。数据库连接的创建/维护成本要高得多,而且池可以管理对您来说,这是有效的。@APC:True,这是连接池的主要用途,但是管理长期连接/重新连接是一项池已经做得很好的任务,那么为什么不重用该功能而不是推出自定义解决方案呢?您能解释一下您的应用程序的功能吗?不详细,但我可以说它由许多sepa组成对服务器/客户端PC上运行的应用程序进行评级,这些应用程序都与单独服务器上的数据库进行通信。进程运行数月,但没有一个进程以高负载方式持续访问数据库……任何特定进程一分钟最多只能访问数据库几次(通常要少得多)。您能解释一下您的应用程序的功能吗?不详细,但我可以说,它由许多运行在服务器/客户端PC上的独立应用程序组成,这些应用程序都与单独服务器上的数据库通信。进程运行数月,但没有进程以高负载方式持续访问数据库……任何特定进程可能一年只访问几次数据库最多一分钟(通常更少)。