Я только начал свою карьеру в администрировании. Мне поставили задачу, с которой я не могу справиться уже три недели. Есть сервер с ОС 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 Других нет. Надеюсь, вы сможете рассказать мне больше о возможных причинах данной проблемы.
@vadimnik.don Ты уже проделал кучу работы, так что давай попробуем разобраться дальше. Ошибка "OCIEnvCreate failed with return code -1 but error message text was not available"
часто связана с проблемами окружения Oracle, но есть несколько моментов, которые стоит перепроверить:
Права доступа
C:\oracle\instantclient_19_32
или аналогичная).Переменные окружения
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
, чтобы увидеть, какой файл или доступ блокируется.Разрядность процессов
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 и зависимости. Попробуй эти шаги и расскажи, что удалось найти! 🚀