anonymous@RULINUX.NET~# Last login: 2024-11-27 04:01:13
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

не получается подключиться к БД oracle из пхп

помогите пожалуйста разобраться.

у меня linux debian. я написал пхп-скрипт. он простейший, содержит примерно такой код:

php
if ($c=OCILogon("xyz", "xyz11", "asd"))
{
echo "Successfully connected to Oracle.";
}
else
{
$err = OCIError();
echo "Oracle Connect Error " . $err[message];
exit;
}
 
если его запускать вручную из командной строки, то проблем нет, отрабатывает. но когда я прописываю задание в cron, то этот скрипт выдаёт такую ошибку: ORA-12154: TNS:could not resolve the connect identifier specified (она записывается в файл /var/spool/)

вероятно какой-то переменной окружения присвоено значение asd. (здесь asd это не ip-адрес, а псевдоним)

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

есть ли еще какие-нибудь способы решить мою проблему?

еще дело в том, что когда я в пхп-скрипте прописываю не псевдоним, а ip-адрес (и с ууказанием порта, и без него), то пхп-программа не работает в любом случае. однако ошибки в ip-адресе быть не может, это совершенно точно.

заранее благодарен за ответы

anonymous(*) (2010-06-28 17:26:00)

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.0 (build 02094); MRSPUTNIK 2, 0, 0, 20 SW; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: не получается подключиться к БД oracle из пхп от anonymous 2010-06-28 17:26:00
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

Это собственная ошибка оракловой клиентской библиотеки. Т.е. она сама в соответствии со своими настройками не может найти нужный псевдоним. А настройки задаются переменными окружения (ну, т.е. местоположение конфигурационных файлов). Если дело под вендой - ещё через реестр, но переменные окружения имеют более высокий приоритет.

Я бы предположил, что по крону у тебя скрипт загружается из-под другого юзера OS.

Псевдоним "asd" (и не только) она скорее всего ищет в $ORACLE_HOME/network/admin/tnsnames.ora

Проверь выставлена ли у тебя эта переменная под тем юзером (в том же месте скрипта где выводишь сообщение об ошибке можно просто env скинуть в дамп) и если она установлена, то на правильныую ли директорию указывает. И есть ли права на чтение файла.

Если всё ОК (хотя я думаю что выше всё решится) - следующим шагом было бы сравнение остальных настроек переменных окружения в сессиях где всё работает и где не работает. В основном тебя должны интересовать переменные окружения, начинающиеся с ORA: env | grep ^ORA

HEBECTb_KTO(*)(2010-06-28 17:37:57)

[#] [Добавить метку] [Редактировать] Ответ на: не получается подключиться к БД oracle из пхп от anonymous 2010-06-28 17:26:00
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

Ну что, победил?

HEBECTb_KTO(*)(2010-06-28 18:26:35)

avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

возможно сейчас буду тупить, так как слабо во всем этом разбираюсь, но вот что могу пока сказать.

с правами на файл всё нормально. 777

скрипт вряд ли запускается из-под другого пользователя. cron несколько месяцев запускает еще один сценарий, доступ к котрому есть только у этого пользователя. да и не понятно с чего бы юзеру меняться, я под ним настраивал эти задачи...

в $ORACLE_HOME/network/admin/tnsnames.ora действительно прописан тот ip-адрес, соответствующий псевдониму. но, используя его в скрпте, получаю такую ошибку: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

чтобы проверить выставлена ли переменная я делаю следующее. в ком.строке пишу env > /tmp/console-env не совсем понимаю какую именно переменную я должен там увидеть? в hostname не ip-адрес, который я использую вскрипте... остальные пути так или иначе совпадают с домашним каталогом oracle $ORACLE_HOME/network/admin/tnsnames.ora

я совсем запутался %

anonymous(*)(2010-06-29 09:53:46)

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.0 (build 02094); MRSPUTNIK 2, 0, 0, 20 SW; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

ORA-12514 - это другая ошибка. У тебя база локально установлена или ты к серверу на другой машине коннектишься? Листенер там запущен?

Непонял, переменные ты с чем сравниваешь? Тебе надо проверить какие переменные видит твой скрипт. Вставь ему в начало команду echo `env`; и сравнивай с переменными, что видишь из-под юзера в котором у тебя всё работает.

ORACLE_HOME должна быть определена в любом случае, другие переменные которые стоит проверить: ORACLE_SID,TNS_ADMIN,ORACLE_BASE,TWO_TASK

Третья компонента в OCILogon("xyz", "xyz11", "asd") - не пустая ли строка?

HEBECTb_KTO(*)(2010-06-29 12:25:11)

[#] [Добавить метку] [Редактировать] Ответ на: не получается подключиться к БД oracle из пхп от anonymous 2010-06-28 17:26:00
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

>>If not specified, the Oracle Client libraries determine a character set from the NLS_LANG environment variable.
Т.е. разница в том, что видимо, в консоли NLS_LANG установлен, а в кроне - нет. Ну, и в хелпе написано, что явное указание четвертого параметра укорачивает время соединения.

anonymous(*)(2010-06-29 12:25:25)

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.11) Gecko/20050905
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

На локаль он ещё не ругается

HEBECTb_KTO(*)(2010-06-29 12:33:27)

avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

сравнивал переменные. из ко строки запустил env > /tmp/cron-env , сформировался тектовый файл, в котором, как я понимаю, содержатся переменные, используемые пользователем, из под которого скрипт запускается.

затем в самом пхп-скрипте написал команду echo `env`; после запуска его получил вывод переменных, которые использует скрипт.

разницы в полученных двух наборах нет.

сама база oracle находится на удаленной машине, с ней и устанавливаю соединение...

листенер скорее всего включен, потому что если этот скрипт запускается не кроном, а вручную из ком.строки (с использованием псевдонима asd), то соединение устанавливается.

anonymous(*)(2010-06-29 15:37:52)

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.0 (build 02094); MRSPUTNIK 2, 0, 0, 20 SW; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

> разницы в полученных двух наборах нет.
А сами-то переменные какие есть из перечисленных?

Можешь отквотить описание алиаса из tnsnames.ora и точные примеры строк коннекта (с фейковыми именами и паролями конечно)?

Я бы ещё попробовал сделать su - под кроновского юзера и там уже интерактивно пытаться запустить sqlplus. Всяко удобнее.

HEBECTb_KTO(*)(2010-06-29 16:02:41)

avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

не рискну примеры разместить. уволят)

вот что помогло: в cron перед заданием написал задал значения следующим переменным.

[code] ORACLE_HOME=/home/oracle/ora/9 TNS_ADMIN=/home/oracle/ora/9/network/admin ORACLE_SID=bla ORACLE_BASE=/home/oracle/ora LOGNAME=bla [/code]

всем спасибо

anonymous(*)(2010-07-01 10:07:40)

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRA 5.0 (build 02094); MRSPUTNIK 2, 0, 0, 20 SW; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
avatar
Скрыть

Re: не получается подключиться к БД oracle из пхп

Это хорошо, что оно у тебя заработало. Плохо только что непонятно что было неправильно и, соответственно, и решение такое.. В следующий раз, скажем через год, когда ты про эту проблему и думать забудешь, кто-нибудь поставит нового клиента, скажем в /home/oracle/ora/12, централизованно обновит настройки для всех аккаунтов а твой крон так и будет по прежнему лазать в девятку пока ты снова не встретишься с разницей в конфигурации и не угробишь ещё неделю на поиски решения.

HEBECTb_KTO(*)(2010-07-01 13:55:55)

Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!