В не зависимости от того какой подход вы используете и на каком языка пишите, если вам нужно “общаться” с Oracle DB - скорее всего вы выберете Oracle Client
как средство коммуникации, так как иных путей почти нет.
Если вам когда-нибудь приходилось не однократно устанавливать Oracle Client, вы наверняка заметили, какое это порой не легкое дело. Я не буду описывать как клиент следует устанавливать, я лишь опишу список наиболее вероятных проблем которые часто возникают после установки и решения для этих самых проблем, а так же постараюсь дать пару советов.
Самые популярные проблемы и их решения:
ORA-12154: TNS: could not resolve the connect identifier specified
- Убедитесь в том что вы добавили TNSNAMES.ORA файл и то что он расположен именно в %OracleClientDirectory%\network\admin\
- TNS в TNSNAMES.ora описан корректно.
- Попробуйте добавить ORACLE_HOME в Windows Environment Variables. Путь для ORACLE_HOME выглядит примерно так C:\App<machine name>\product<prudoct number> (важно, что-бы путь заканчивался именно на папку, под которой лежит BIN или bin папка. А также что-бы в конце пути не было ‘’)
- Ссылка на оракл клиент так же должен быть в Path. Ссылку на папку в Path прописывает сам Oracle Client, но если вы устанавливаете не в первый раз, то там мог образоваться бардак. Поэтому, путь на клиент в Path должен быть только один. Выглядит ссылка примерно так C:\App<machine name>\product<prudoct number>\bin; . Важно что-бы она указывала именно на bin нашего клиента.
Could not create an environment: OCIEnvCreate returned -1
- Первая и наиболее вероятная причина: несовместимость разрядности, если у вас 32-битный клиент, то убедиться что ваша процесс который пытается сделать что-то с оракл клиентом запускается или в 32-ом или в универсальном режиме. Ну и аналогично для 64-битного оракл клиента.
- Отсутствие прав, возможно на вашей машине есть некоторые ограничения, которые не позволяют процессу достучаться к оракл клиенту
- Если вышеперечисленное не помогло, попробуйте переустановить оракл клиент.
ORA - timeout occured
- Вариантов в этом случае аж один. Нету доступа к базе, либо административного либо база просто не доступна на данный момент.
Полезности штуки или tips&tricks:
В борьбе с, не желающим работать, оракл клиентом - лучший помощник это cmd.
И вот некоторые из полезных команд, которые помогут локализовать причину сбоя:
-
tnsping <tns name>
-tnsping
утилита которая, делает пробный конекшен, и вот некоторые из результатов
-
TNS-03505 - Failed to resolve name.
Это тоже самое что и “ORA-12154 TNS: could not resolve the connect identifier specified
” решение которой, описано в первым пункте. tnsping либо не может найтиTNSNAMES.ORA
или найти указанный<tns name>
. Еще раз проверьте правильность написание вашегоORACLE_HOME
иPath
, если вам кажется, все правильно и нечего уже исправлять - подышите воздухом и проверьте еще раз, помогает:) - Если вы увидите что-то вроде этого:
то все у вас работает и оракл клиент может подключиться к базе и распознатьUsed TNSNAMES adapter to resolve the alias: <тут все реквизиты базы> OK <n msc>
tns name
, а если проблема все еще возникает в вашей программе, значит проблема именно в вашем коде или в библиотеке которую вы используете для работы с оракл клиентом. - Такой вариант:
очевидно, что - это тоже самое что иUsed TNSNAMES adapter to resolve the alias: <тут все реквизиты базы> TNS - timeout occured
ORA - timeout occured
. Либо база не доступна, либо вам блокирует доступ какой-нибудь магический файрвол.
-
Path
- покажет вам содержимое вашего Path, оно просто позволит вам оперативно убедиться в том что путь к бин папке вашего оракл клиента прописан правильно. -
set ORACLE_HOME
- покажет вам содержимоеORACLE_HOME
-
set ORACLE_HOME = "some path"
- как вы догадались, можно таким способом поиграться с пазом в открытой сессии консоли и сделать еще раз, после этого сделатьtnsping <tns name>
. -
where tnsping
- нужен для определение того, какой оракл клиент используется в данный момент, полезен тогда, когда у вас больше чем один клиент. Кстати, когда у вас больше чем один клиент, то привилегированным будем именно тот, чей путь указан вORACLE_HOME
.
На этом пожалуй и закончу. Главное уделяйте внимание деталям, так как oracle client очень капризный.
Удачи!