anonymous@RULINUX.NET~# | Last login: 2024-11-22 08:23:35 |
Регистрация Вход | Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск |
Форум - General | [RSS] |
помогите пожалуйста разобраться.
у меня linux debian. я написал пхп-скрипт. он простейший, содержит примерно такой код:
если его запускать вручную из командной строки, то проблем нет, отрабатывает. но когда я прописываю задание в 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)
|
|
|
Скрыть
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) |
Скрыть
Re: не получается подключиться к БД oracle из пхпORA-12514 - это другая ошибка. У тебя база локально установлена или ты к серверу на другой машине коннектишься? Листенер там запущен? Непонял, переменные ты с чем сравниваешь? Тебе надо проверить какие переменные видит твой скрипт. Вставь ему в начало команду echo `env`; и сравнивай с переменными, что видишь из-под юзера в котором у тебя всё работает. ORACLE_HOME должна быть определена в любом случае, другие переменные которые стоит проверить: ORACLE_SID,TNS_ADMIN,ORACLE_BASE,TWO_TASK Третья компонента в OCILogon("xyz", "xyz11", "asd") - не пустая ли строка? |
Скрыть
Re: не получается подключиться к БД oracle из пхп>>If not specified, the Oracle Client libraries determine a character set from the NLS_LANG environment variable.
|
Скрыть
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) |
Скрыть
Re: не получается подключиться к БД oracle из пхп> разницы в полученных двух наборах нет.
Можешь отквотить описание алиаса из tnsnames.ora и точные примеры строк коннекта (с фейковыми именами и паролями конечно)? Я бы ещё попробовал сделать su - под кроновского юзера и там уже интерактивно пытаться запустить sqlplus. Всяко удобнее.
|
Скрыть
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) |
Скрыть
Re: не получается подключиться к БД oracle из пхпЭто хорошо, что оно у тебя заработало. Плохо только что непонятно что было неправильно и, соответственно, и решение такое.. В следующий раз, скажем через год, когда ты про эту проблему и думать забудешь, кто-нибудь поставит нового клиента, скажем в /home/oracle/ora/12, централизованно обновит настройки для всех аккаунтов а твой крон так и будет по прежнему лазать в девятку пока ты снова не встретишься с разницей в конфигурации и не угробишь ещё неделю на поиски решения. |
|
|
|
Этот тред читают 1 пользователь: |
Анонимных: 1 Зарегистрированных: 0 |
Re: не получается подключиться к БД oracle из пхп
Это собственная ошибка оракловой клиентской библиотеки. Т.е. она сама в соответствии со своими настройками не может найти нужный псевдоним. А настройки задаются переменными окружения (ну, т.е. местоположение конфигурационных файлов). Если дело под вендой - ещё через реестр, но переменные окружения имеют более высокий приоритет.
Я бы предположил, что по крону у тебя скрипт загружается из-под другого юзера OS.
Псевдоним "asd" (и не только) она скорее всего ищет в $ORACLE_HOME/network/admin/tnsnames.ora
Проверь выставлена ли у тебя эта переменная под тем юзером (в том же месте скрипта где выводишь сообщение об ошибке можно просто env скинуть в дамп) и если она установлена, то на правильныую ли директорию указывает. И есть ли права на чтение файла.
Если всё ОК (хотя я думаю что выше всё решится) - следующим шагом было бы сравнение остальных настроек переменных окружения в сессиях где всё работает и где не работает. В основном тебя должны интересовать переменные окружения, начинающиеся с ORA: env | grep ^ORA