Oracle OCI - выборка задержек и сбоев - PullRequest
1 голос
/ 13 декабря 2011

У меня есть программа Oracle OCI, которая работает на различных платформах: SLES Linux, Ubuntu, AIX, Solaris и HP-UX. Я пытаюсь запустить ту же самую вещь на Redhat, и у меня возникают трудности.

Проблема возникает при использовании прокручиваемого курсора (вызов OCIStmtExecute с OCI_STMT_SCROLLABLE_READONLY) и использовании функции, которая выполняет двоичный поиск для получения точного размера набора результатов. В более общем смысле, проблема заключается в чтении после конца набора результатов, прежде чем читать значение ОК.

Я написал тестовую утилиту, которая выполняет простое утверждение, которое должно возвращать 1 строку (SELECT COUNT(*) FROM xxx). Затем он извлекает данные из набора результатов:

Если я сначала получу строку 1, она будет работать нормально. Если я затем пройду мимо конца набора результатов, он продолжит работать нормально, когда я вернусь. Но если моя первая проверка выполняется после набора результатов, все идет не так:

> rdb_test 1
12:06:32.365 Checking row 1 - OK

> rdb_test 3
12:06:35.510 Checking row 3 - NO DATA
12:06:35.511 Checking row 2 - NO DATA
12:06:45.549 Checking row 1 - NO DATA

> rdb_test -3
12:06:49.344 Checking row 1 - OK
12:06:49.344 Checking row 3 - NO DATA
12:06:49.345 Checking row 2 - NO DATA
12:06:49.345 Checking row 1 - OK

Также есть странная задержка, 10 с в приведенном выше примере, когда он извлекает строку, которая должна быть в порядке. В отладчике это глубоко внутри функции OCIStmtFetch2 - неудивительно, что функция __read_nocancel ожидает ответа сервера.

Кто-нибудь еще видел эту проблему раньше?

1 Ответ

0 голосов
/ 13 декабря 2011

Проблема, похоже, связана с библиотекой OCI версии 11.Я только что попробовал библиотеку v10, и она снова работает нормально.К сожалению, для этого требуется старая версия стандартной библиотеки C ++, поэтому я все же предпочел бы избегать этого исправления, если доступна альтернатива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...