OCI8 Ракување со конекција и групирање на конекции
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
OCI8 Ракување со конекција и групирање на конекции
Референца за `oci8.connection.php` со подобрена типографија и навигација.
OCI8 Ракување со конекција и групирање на конекции
Функции за поврзување
Екстензијата OCI8 обезбедува три различни функции за поврзување со Oracle. Стандардната функција за поврзување е oci_connect(). Ова создава врска со базата на податоци на Oracle и враќа ресурс што се користи од последователните повици до базата на податоци.
Поврзувањето со Oracle сервер е релативно скапа операција во однос на времето што е потребно за да се заврши. Функцијата oci_pconnect() користи постојан кеш на врски што може повторно да се користи низ различни барања за скрипти. Ова значи дека преоптоварувањето на врската обично ќе се случи само еднаш по PHP процес (или Apache дете).
Ако апликацијата се поврзува со Oracle користејќи различен сет на акредитиви за базата на податоци за секој веб корисник, постојаниот кеш што го користи oci_pconnect() ќе стане помалку корисен како што се зголемува бројот на истовремени корисници, до точка каде што може да почне негативно да влијае на целокупната изведба на Oracle серверот поради одржување премногу неактивни врски. Ако апликацијата е структурирана на овој начин, се препорачува или да се прилагоди апликацијата користејќи ги oci8.max_persistent and oci8.persistent_timeout поставките за конфигурација (овие ќе дадат контрола над големината и животниот век на кешот на постојаните врски), користете Oracle Database Resident Connection Pooling (во Oracle Database 11g или подоцна), или користете oci_connect() instead.
И двете oci_connect() and oci_pconnect() вработете кеш за врски; ако повеќе повици до oci_connect() ги користат истите параметри во дадена скрипта, вториот и последователните повици враќаат постоечки рачка за врска. Кешот што го користи oci_connect() се чисти на крајот од извршувањето на скриптата, или кога рачката за врска е експлицитно затворена. Функцијата oci_pconnect() има слично однесување, иако нејзиниот кеш се одржува одделно и опстојува помеѓу HTTP барањата.
Оваа функција за кеширање значи дека двете рачки не се трансакциски изолирани (тие се всушност иста рачка за врска, така што нема изолација од каков било вид). Ако апликацијата има потреба од две одделни, трансакциски изолирани врски, тогаш користете oci_new_connect().
На oci_pconnect() кешот се брише и сите врски со базата на податоци се затвораат кога PHP процесот ќе заврши, така што ефективното користење на постојаните врски бара PHP да биде Apache модул или да се користи со FPM, или слично. Постојаните врски нема да имаат никакви придобивки над oci_connect() кога PHP се користи со CGI или преку командната линија.
Функцијата oci_new_connect() секогаш создава нова врска со Oracle серверот, без оглед на тоа што други врски можеби веќе постојат. Веб апликациите со голем сообраќај треба да избегнуваат користење oci_new_connect(), особено во најпрометните делови на апликацијата.
Постојаните врски можат да бидат затворени од корисникот, дозволувајќи поголема контрола врз употребата на ресурсите за врска. Постојаните врски сега исто така автоматски ќе се затвораат кога нема PHP променлива што ги упатува, како што е крајот на опсегот на корисничка функција на PHP. Ова ќе врати секоја незавршена трансакција. Овие промени на постојаните врски ги прават да се однесуваат слично на непостојаните врски, поедноставувајќи го интерфејсот, дозволувајќи поголема конзистентност и предвидливост на апликацијата. Користете oci8.old_oci_close_semantics постави на На за да го задржите историското однесување.
Автоматското повторно воспоставување на PHP постојани врски по повторното стартување на Apache или FPM процес значи Oracle Database LOGON
triggers are only recommended for setting session attributes and not for per-application user connection requests.
За да се избегнат недоследности и неочекувани грешки, не користете ALTER SESSION SET EDITION за промена на изданието на постојани конекции.
тригерите се препорачуваат само за поставување атрибути на сесијата, а не за барања за поврзување на корисници специфични за апликацијата.
PHP поддржува Oracle Database Resident Connection Pooling (DRCP). DRCP овозможува поефикасно користење на меморијата на машинскиот дел од базата на податоци и обезбедува висока скалабилност. Не се потребни промени во апликацијата, или минимални промени, за да се користи DRCP. Dedicated DRCP е погоден за апликации кои се поврзуваат користејќи малку шеми на бази на податоци и држат отворени врски со базата на податоци за краток временски период. Другите апликации треба да го користат стандардното на Oracle Shared servers.
процеси на сервер за бази на податоци, или да користат oci_pconnect().
DRCP ги користи сите три функции за поврзување, но дава највисока скалабилност кога врските се создаваат со
За DRCP да биде достапен во OCI8, библиотеките на Oracle клиентот што ги користи PHP и верзијата на Oracle Database мора да бидат 11g или поголеми. Документацијата за DRCP се наоѓа во неколку прирачници на Oracle. На пример, видете » Конфигурирање на Database Resident Connection Pooling во документацијата на Oracle за информации за употреба. А » DRCP white paper
содржи основни информации за DRCP.
-
За да го користите DRCP, инсталирајте го проширувањето OCI8 и Oracle 11g (или понова) библиотеки, а потоа следете ги овие чекори:
SQL> execute dbms_connection_pool.start_pool; -
Како привилегиран администратор на базата на податоци, користете програма како SQL*Plus за да го стартувате pool-от за поврзување во базата на податоци:
dbms_connection_pool.alter_param()Опционално користетеDBA_CPOOL_INFOview. -
за конфигурирање на поставките на DRCP. Тековните поставки на pool-от може да се пребаруваат од
MYDB:$c = oci_pconnect("myuser", "mypassword", "MYDB");Ажурирајте ги низите за поврзување што се користат. За PHP апликации кои моментално се поврзуваат користејќи Network Connect Name како
(SERVER=POOLED)изменете ја датотеката tnsnames.ora и додадетеMYDB = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myhost.dom.com) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales) (SERVER=POOLED)))клаузула, на пример:
:POOLEDАлтернативно, изменете ја синтаксита на Easy Connect во PHP и додадете$c = oci_pconnect("myuser", "mypassword", "myhost.dom.com:1521/sales:POOLED"); -
Уреди php.ini и изберете име на класа за конекција. Ова име означува логичка поделба на групата за конекции и може да се користи за изолирање на групирањето за посебни апликации. Секоја PHP апликација со исто корисничко име и вредност на класата за конекција ќе може да споделува конекции во групата, обезбедувајќи поголема скалабилност.
oci8.connection_class = "MY_APPLICATION_NAME" -
Стартувајте ја апликацијата, поврзувајќи се со базата на податоци 11g (или понова).
Забелешка:
Апликациите што користат Oracle Client библиотеки 10g кои бараат перформанси од постојани конекции можат да ја намалат количината на меморија на серверската база на податоци потребна со користење на Oracle
Sharedсервери (претходно познати како Multi Threaded Servers). Погледнете ја документацијата на Oracle за информации.
Забелешка:
Промената на лозинката преку DRCP конекции ќе пропадне со грешката ORA-56609: Употребата не е поддржана со DRCP. Ова е документирано ограничување на Oracle Database 11g.