OTLv4 / MS SQL / C ++ | Сбои при открытии пула соединений - PullRequest
0 голосов
/ 14 января 2020

Я использую библиотеку OTLv4 для подключения к базе данных MS SQL и сохранения данных. Некоторые функции вызываются каждые несколько секунд, а другие запускаются из внешнего источника (для создания sh пула соединений и выполнения запросов / нескольких запросов). В целом, это довольно надежно, но каждые несколько дней я сталкиваюсь с cra sh во время открытия пула соединений. А затем я получаю сообщение об ошибке, например:

[Microsoft] [ODB C Драйвер 11 для SQL Сервер] Клиент не может установить соединение sh, поскольку во время рукопожатия произошла ошибка авторизоваться. Распространенные причины включают в себя попытку клиента подключиться к неподдерживаемой версии сервера SQL, слишком занятый сервер для приема новых подключений или ограничение ресурсов (память или максимально допустимые подключения) на сервере.

Код для открытый пул соединений в конструкторе:

Connection::Connection(char* funName)
{
  Dbg d("Connection::Connection");

  d << "Constructor " << funName << info();

  d << "Open connection pool to MS Sql: " << info();

  try
  {
    connectionPool.open("furl2user/furl2user@FURN", false, 1, 300, 1);
  }
  catch (otl_exception& p)
  {
    d << p.msg; d.fatal();
    d << p.stm_text; d.fatal();
    d << p.var_info; d.fatal();

    return;
  }

  d << "ConnPool opened" << info();
}

Пример запроса (функций в этой программе может быть довольно много):

    otl_stream stream(1, "update MIL_LV2_DCH set Status = :status<int>, prs_tim = :prs_datetime<timestamp> where Status = :stat<int> and Slab_id = :slab<char[32]>", *connectionPtr);

    stream << 1 << getDateTime() << 0 << c;

    stream.flush();
    stream.close();

Деструктор:

Connection::~Connection()
{
  Dbg d("Connection::~Connection");

  d << "Destructor" << info();

  connectionPool.close();

  d << "ConnPool closed" << info();
}
...