You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SOCI ODBC后端数据库连接池安全重连方案咨询

SOCI ODBC连接池稳定重连方案求助

我在C++程序中使用SOCI数据库库(ODBC后端),通过定时器每隔X秒检测数据库连接有效性,重连逻辑如下:

  • 创建单个新连接,执行select 1 from dual测试连通性
  • 测试失败则等待下次定时器检测
  • 测试成功则尝试重建连接池中的所有会话,但无论是调用close()后再执行open(),还是使用session的reconnect()函数,都无法稳定实现——时而有效时而导致程序崩溃

相关代码片段:

try
{
    // 用新连接测试,成功则重建连接池
    soci::session sqlConnForTestFresh;
    sqlConnForTestFresh.open(soci::odbc, "DSN=" + dsn + ";UID=" + username + ";PWD=" + password);
    sqlConnForTestFresh << "select 1 from dual";
    sqlConnForTestFresh.close();

    cout << "Test Successfully Connection there again !" << endl;

    // 仅在无错误时执行,关闭并重建池内所有会话
    for (int i = 0; i != EXPORT_API_DATA_DB_POOL_SIZE; i++)
    {
        soci::session& sql = connPoolOracleDb.at(i);
        //sql.reconnect(); // 无效
        sql.close(); // 关闭后重连有时有效
        sql.open(soci::odbc, "DSN=" + dsn + ";UID=" + username + ";PWD=" + password);
    }

    cout << "Reconnect to Database: Database Connection Pool Successful refreshed" << endl;

}
catch (odbc_soci_error const & eo)
{
    cout << "Reconnect to ExportDatabase : Database Connect Still Failed.";
}
catch (exception& ex)
{
    cout << "Reconnect to ExportDatabase : Database Connect Still Failed.";
}

现寻求安全、稳定的连接池重连实现方案。

内容的提问来源于stack exchange,提问作者Sascha B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:52:42