Проблема с неявным удалением регистрации CQN.C++

Программы на C++. Форум разработчиков
Anonymous
Проблема с неявным удалением регистрации CQN.

Сообщение Anonymous »

Используя специальные оболочки C++ OCI, я могу успешно зарегистрировать регистрацию на основе обратного вызова CQN C++, но оказывается, что подписка каким-то образом сразу же отменяется, за моей спиной. Мне не перезванивают по простым DML. Если я попытаюсь отменить регистрацию этой подписки, для которой метод Register() сработал нормально, я получу сообщение ORA-29970: Указанный идентификатор регистрации не существует.

Я запускаю этот тест на компьютере Win7 (64-разрядной версии), использующем локальный сервер Oracle 11.2.0.1.0, и подключаюсь к клиентскому приложению C++, созданному на базе Instantclient-11.2.0.2.0, которое работает на этом сервере. тот же компьютер.
  • Я пытался явно установить для OCI_ATTR_SUBSCR_TIMEOUT значение 0, но безрезультатно.
  • Я проверил параметр экземпляра job_queue_processes, чтобы убедиться, что он не равен 0 (это 1000).
  • Конечно, я являюсь пользователем/схемой соединение с разрешено УВЕДОМЛЕНИЕ ОБ ИЗМЕНЕНИИ
У меня заканчиваются идеи по этому вопросу, и я был бы признателен за информацию о том, что еще я мог бы попробовать или проверить.

Я начинаю задаваться вопросом, нужно ли как-то активировать CQN. Мои навыки администратора базы данных практически отсутствуют, это стандартная установка 11gR1 в Windows с использованием установщика, без каких-либо специальных настроек или настроек.

Спасибо, -- ДД

Обновление №1

Коллега успешно провел тот же тест, и он запустил его, используя предоставленную сервером oci.dll. Я пробовал это (я создавал с использованием Instantclient, но принудительно использовал PATH во время выполнения: Path=D:\oracle\product\11.2.0\dbhome_1\BIN;$(Path) на странице свойств VS> Отладка> Среда) , и действительно, тест CQN работает! Мы до сих пор не выяснили, является ли незначительная разница в версиях между клиентом и сервером или использование Instantclient (кстати, вариант Light) по сравнению с полным клиентом или установкой сервера настоящий виновник.

Но это плохая новость, что новый Instantclient не поддерживает CQN...

Обновление №2

Я попробовал все 6 комбинаций Instantclient Light (65 МБ) или Нормальный (150 МБ) в версиях 12.2.0.(1|2|3).0 на Win64, и ни один из них не работал. Полный клиент еще не тестировался, а также не тестировался на Linux.

Environment_var cqn_env = Environment::create(OCI_EVENTS + OCI_OBJECT);
Connection_var cqn_conn = Connection::logon2(...);
Subscription sub(cqn_conn, "cqn_test", OCI_SUBSCR_NAMESPACE_DBCHANGE);
sub.set( &cqn_callback_func );
sub.set( OCI_SUBSCR_CQ_QOS_QUERY );

try {
sub.register_self();
} catch (const OracleException& ex) {
BOOST_REQUIRE(ex.error_code && *ex.error_code == 29972);
cerr

Подробнее здесь: https://stackoverflow.com/questions/149 ... -implictly

Вернуться в «C++»