OCIEnvCreate failed with return code -1 but error message text was not available

Пользователь

от vadimnik.don , в категории: Другие , 22 дня назад

Я только начал свою карьеру в администрировании. Мне поставили задачу, с которой я не могу справиться уже три недели. Есть сервер с ОС Windows Server 2019. На нем есть 32-битное веб-приложение, оно находится в пуле приложений, где "Enable 32-Bit Applications". Также есть веб-сервис, который, как я понял, конвертирует форматы документов. Установлен клиент Oracle версии 19 32-разрядной, через который я могу подключиться к базе данных через sqlplus без каких-либо проблем. Переменные окружения настроены правильно и указывают на необходимые директории Oracle. Но при всем этом, ошибка в логах веб-сервиса "OCIEnvCreate failed with return code -1 but error message text was not available". Я перепробовал все, что нашел в интернете, переменные настроены, разрешения тоже настроены, и теперь установлен один клиент Oracle. Oci.dll Других нет. Надеюсь, вы сможете рассказать мне больше о возможных причинах данной проблемы.

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от Ekaterina_90 , 16 дней назад

@vadimnik.don  Ты уже проделал кучу работы, так что давай попробуем разобраться дальше. Ошибка "OCIEnvCreate failed with return code -1 but error message text was not available" часто связана с проблемами окружения Oracle, но есть несколько моментов, которые стоит перепроверить:

Права доступа

  • Убедись, что учетная запись, под которой работает пул приложений IIS, имеет доступ к директории Oracle (обычно C:\oracle\instantclient_19_32 или аналогичная).
  • Попробуй временно запустить IIS от учетной записи администратора и проверь, исчезнет ли ошибка.

Переменные окружения

  • Убедись, что PATH содержит путь к instantclient_19_32, и он стоит в начале переменной PATH, а не в конце (Windows может найти другой клиент раньше).
  • Проверь TNS_ADMIN, если используется tnsnames.ora, и NLS_LANG (например, AMERICAN_AMERICA.UTF8).

Проверка библиотеки OCI

  • Запусти Dependency Walker (depends.exe) и открой oci.dll, чтобы проверить, все ли зависимости загружаются.
  • Включи Process Monitor (procmon.exe от Sysinternals) и отфильтруй операции по oci.dll, чтобы увидеть, какой файл или доступ блокируется.

Разрядность процессов

  • IIS должен работать в 32-разрядном режиме (что ты уже включил), но перепроверь командой:
1
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\InetStp\ | Select-Object -Property Enable32BitAppOnWin64
  • Если Enable32BitAppOnWin64 = 1, то всё ок.

Отладка с помощью sqlplus

  • Запусти sqlplus из-под пользователя IIS. Для этого можно создать тестовый cmd-файл и запустить через psexec (Sysinternals):
1
psexec -i -u "IIS APPPOOL\Имя_пула" cmd.exe
  • Затем попробуй sqlplus user/password@db внутри этого окна.

Логирование Oracle

  • Включи sqlnet.log в sqlnet.ora:
1
2
3
TRACE_LEVEL_CLIENT = SUPPORT
TRACE_DIRECTORY_CLIENT = C:\oracle\logs
TRACE_FILE_CLIENT = sqlnet.log

Если после всех этих проверок проблема останется, то можно попробовать еще глубже копнуть в Dll и зависимости. Попробуй эти шаги и расскажи, что удалось найти! 🚀