OCILogon во время льготного периода - ORA-28002 - PullRequest
2 голосов
/ 13 июля 2009

, когда я использую SQL * Plus, подключаясь к пользователю, чей пароль ввел льготный период (Oracle 11g, Oracle 8i), я получаю сообщение об ошибке, но соединение все еще успешно:

SQL*Plus:

=====================================

SQL> connect gumiplesku
Enter password:
ERROR:
ORA-28002: the password will expire within 7 days


Connected.
SQL> select User from dual;


USER

======================================

gumiplesku

=====================================

С другой стороны, в моем коде C ++ OCI, выполняющем OCILogon2, если я пытаюсь подключить того же пользователя, я получаю OCI_ SUCCESS_ WITH_ INFO с той же «ошибкой», но если я продолжаю, OCISvcCtx* Мне кажется, что я недействителен (хотя он и не равен нулю), поскольку попытка сделать на нем OCIAttrGet или OCIStmtExecute дает мне ошибку OCI_INVALID_HANDLE.

Пользователь должен успешно подключиться к базе данных в течение всего льготного периода, пока его пароль не будет полностью истек. Так почему же SQL * Plus может подключиться нормально, когда я получаю плохой дескриптор? Должен ли я пытаться подключиться другим способом?

Большое спасибо.

1 Ответ

1 голос
/ 14 июля 2009

Это немного за пределами моего опыта, но так как никто не отвечает, я сделаю попытку.

Я вспоминаю, что существует какой-то обратный вызов обработчика ошибок, который вы можете установить. Поскольку вы можете получить информацию об ошибке с помощью OCIErrorGet (?), Я предполагаю, что она запускает нормальные механизмы обработки ошибок. Возможно ли, что есть обработчик ошибок, который закрывает соединение, когда происходит «ошибка», не проверяя этот особый случай?

Это также напоминает мне о проблеме, с которой я давно столкнулся, если вы передадите неверный тип дескриптора функциям OCI, они могут ошибочно работать. Судя по документам OCIErrorGet, вы можете передать OCI_HTYPE_ERROR и дескриптор среды или OCI_HTYPE_ENV и дескриптор ошибки.

Вы звоните OCIErrorGet несколько раз? Oracle может генерировать несколько ошибок, может быть, вам нужно восстановить их все, прежде чем продолжить? Но это не кажется разумным.

Помимо этих длинных кадров, я бы попробовал простой пример OCI или любой пример кода из Oracle, чтобы увидеть, есть ли у него такая же проблема. Если нет, то работайте задом наперед, чтобы найти, что имеет значение.

...