За последние 24 часа нас посетил 20661 программист и 1112 роботов. Сейчас ищут 599 программистов ...

Соединение с Oracle.

Тема в разделе "Oracle Database", создана пользователем Karandash, 30 май 2006.

  1. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    Добрый день, All!
    Как можно сделать соединение с Oracle, чтобы не открывалось их несколько одновременно? Что-то вроде - постоянно активно одно соединение, а скрипт PHP уже подключается к нему, а не создает новое. Если можно примеры где посмотреть, буду благодарен.
    ЗЫ. Разбираться только начал.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
  3. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    ;)Наверное я не очень точно выразился, но попробую еще раз.
    1000 юзеров в своих браузерах обращаются к серверу, сервер выполняет скрипт php в котором он обращается к базе oracle => создается 1000 соединений с базой? Или я чего-то не понимаю?
    Например сейчас на ASP и vbscript у нас работает так, есть один скрипт, который создает соединение и recorset-
    "sub application_onStart

    on error resume next

    set cn = Server.CreateObject("ADODB.Connection")
    cn.Open "***", "***", "***"
    set application("myOracleConnection") = cn

    end sub"...
    " sub session_onStart
    on error resume next
    set rs = Server.CreateObject("ADODB.Recordset")
    set session("myOracleRecordset") = rs
    set rs1 = Server.CreateObject("ADODB.Recordset")
    set session("myRecordset1") = rs1
    end sub"
    "
    , а потом (это другой скрипт)
    "
    on error resume next

    set cn = application("myOracleConnection")
    set rs = session("myOracleRecordset")

    rs.Open "select *** from *** where *** from *** where *** and *** is not null)", cn
    rs.Close"
    Вот можно что-то подобное сделать на PHP?
     
  4. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Наверно что-то вроде этого?
     
  5. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    2olo: Да, точно - то, что надо. Вот только под windows нету...
    А может можно как-то стандартными средствами php такое-же сделать?
    Например : после
    $c=OCILogon("***", "***", "***");
    не закрывать соединение, и определить $c как глобальную переменную и потом войти в бесконечный цикл?
     
  6. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Стандартными способами не получится передавать дескрипторы файлов/процессов между скриптами. Т.е. такой вещи как "Application" в РНР по умолчанию нет
    Можно поискать аналоги этого компонента под винды, или же подойти к вопросу с другой стороны и попробовать сконфигурить Оракл чтобы он не обрубал соединения а складывал их в пул или както так
     
  7. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    Ну даже если Oracle будет складывать их в пул, то срипту понадобиться дескриптор процесса, а кто ему его даст? Или я опять чего-то не понимаю?
    А вообще какие методы используются для повышения надежности и производительности php+oracle(...)? Что, у всех запускается одновременно сотни соединений с базой? Может есть другие механизмы?
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    да. все так и происходит. скрипт запускается, создается соединение. скрипт завершается. соединение закрывается. именно так и работают веб-приложения.
     
  9. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    И ни у кого проблем не возникает? Даже на крупных каких-то порталах?
     
  10. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    Почему этот вопрос важен. Есть рабочая база, которая используется нашей конторой с большим кол-вом соединений одновременно. Если к этой-же базе будет доступ через вэб, то потенциально кривой скрипт может повесить работу всей конторы, а это полный "П". С одним контролируемым соед. все проще - отрубил только его и продолжай работать.Может быть не все так плохо как кажется?
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Karandash

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

    и еще. скрипты не умеют держать постоянное соединение. это основы технологии.
     
  12. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    Ок! Спасибо! Так и сделаю.
     
  13. Vlad

    Vlad Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Питер
    а oci_pconnect не оно?..
     
  14. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Vlad

    все равно по завершении скрипта коннект ЗАКРОЕТСЯ. Ну что тут не понятного?
     
  15. Vlad

    Vlad Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Питер
    думал, что oci_pconnect() аналогично mysql_pconnect()
    прошу прощения
     
  16. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Vlad

    не, а ты думаешь, что mysql_pconnect себя ведет по другому при завершении скрипта? 8)))

    после завершения уничтожаются все ресурсы.
     
  17. Vlad

    Vlad Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Питер
    ну... на основании мануала
     
  18. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Vlad
    ну дай то бог ... но когда будет новое mysql_connect() какое будет использовано? правильно: новое ...
     
  19. Mavir

    Mavir Guest

    440hz
    На основании мануала
     
  20. Vlad

    Vlad Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Питер
    440hz
    про mysql_connect() я не спорю :)

    или не так?
    если не сложно поясни plz :)
     
  21. Karandash

    Karandash Активный пользователь

    С нами с:
    30 май 2006
    Сообщения:
    8
    Симпатии:
    0
    Всем привет! Manual-
    "oci_connect

    (PHP 5)
    oci_connect -- Устанавливает соединение с сервером Oracle
    Описание
    resource oci_connect ( string username, string password [, string db [, string charset]] )

    oci_connect() возвращает идентификатор соединения, который используется большинством функций данного модуля. Необязательный третий параметр может содержать имя локального экземпляра Oracle или имя одной из записей в файле tnsnames.ora. Если третий параметр не указан, PHP использует переменные окружения ORACLE_SID и TWO_TASK, которые используются для определения имени локального экземпляра Oracle и местонахождения файла tnsnames.ora соответственно.

    Замечание: oci_connect() не устанавливает соединение повторно, если соединение с такими параметрами (логин, пароль, имя сервера) уже было установлено. Вместо этого, oci_connect() вернет идентификатор уже открытого соединения. Это означает, что вам не следует использовать oci_connect() для разделения нескольких транзакций. Если вы уверены, что хотите установить соединение с теми же параметрами заново, то вам следует использовать oci_new_connect().

    Если вы используете сервер Oracle версии 9.2 и выше, то вы можете указать кодировку, которая будет использована в новом соединении. Кодировка указывается в параметре charset. Если же вы используете версии сервера Oracle младше 9.2, то этот параметр будет проигнорирован, а вместо него будет использована переменная окружения NLS_LANG. "

    Но у меня 4 версия PHP - поэтому только OCI_Logon...