Π Π°Π±ΠΎΡ‚Π° с соСдинСниями OCI8 ΠΈ Connection Pooling

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠœΠΎΠ΄ΡƒΠ»ΡŒ OCI8 прСдоставляСт Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСрвСру Oracle. Бтандартная функция соСдинСния β€” oci_connect(). Она создаёт соСдинСниС ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Oracle ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ рСсурс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… обращСниях ΠΊ Π‘Π”.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ сСрвСру Oracle являСтся достаточно дорогостоящСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся для выполнСния. Ѐункция oci_pconnect() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ постоянный кСш соСдинСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ запросами скриптов. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° установку соСдинСния, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, происходят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ Π½Π° ΠΎΠ΄ΠΈΠ½ процСсс PHP (ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Apache).

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ соСдиняСтся ΠΊ сСрвСру Oracle, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ особый Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π΅Π±-ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚ΠΎ постоянный кСш соСдинСний, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ oci_pconnect() Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ количСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ вырастаСт Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ уровня, Π³Π΄Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ влияниС Π½Π° ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСра Oracle ΠΈΠ·-Π·Π° поддСрТания слишком большого количСства ΠΏΡ€ΠΎΡΡ‚Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… соСдинСний. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ настроСно Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎ рСкомСндуСтся Π»ΠΈΠ±ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ oci8.max_persistent ΠΈ oci8.persistent_timeout (это даст Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ кСша постоянных соСдинСний ΠΈ ΠΈΡ… врСмя ΠΆΠΈΠ·Π½ΠΈ), Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Oracle Database Resident Connection Pooling (Π² Oracle Database 11g ΠΈ Π½ΠΎΠ²Π΅Π΅), Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ oci_connect() вмСсто Π½Π΅Ρ‘.

ВмСстС oci_connect() ΠΈ 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 ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° Π½ΠΈΡ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ выполнСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ соСдинСния ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ всС Π½Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΈ измСнСния Π² постоянных ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Π½Π΅ постоянным соСдинСниям. Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ староС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ oci8.old_oci_close_semantics Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ On.

АвтоматичСскоС пСрСсозданиС постоянных соСдинСний послС пСрСзапуска процСссов Apache ΠΈΠ»ΠΈ FPM, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Oracle Database LOGON рСкомСндуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для настройки Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² сСанса, Π° Π½Π΅ для запросов Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° соСдинСний DRCP

PHP ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ постоянный ΠΏΡƒΠ» соСдинСний Oracle 11g (DRCP). DRCP позволяСт Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π‘Π£Π‘Π” ΠΈ прСдоставляСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ. Π˜Π·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ прилоТСния для использования DRCP Π»ΠΈΠ±ΠΎ Π½Π΅Ρ‚ нСобходимости, Π»ΠΈΠ±ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния.

DRCP ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ нСсколько схСм Π‘Π” ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ соСдинСния ΠΊ Π‘Π” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌ прилоТСниям слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступныС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Dedicated сСрвСрныС процСссы ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Shared сСрвСра.

DRCP приносит ΠΏΠΎΠ»ΡŒΠ·Ρƒ всСм Ρ‚Ρ€Ρ‘ΠΌ функциям ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ прСдоставляСт ΡΠ°ΠΌΡƒΡŽ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° соСдинСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ oci_pconnect().

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ DRCP Π±Ρ‹Π»Π° доступна Π² OCI8, клиСнтскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Oracle, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² PHP, ΠΈ вСрсия сСрвСра Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ 11g ΠΈ Π½ΠΎΠ²Π΅Π΅.

ДокумСнтация ΠΏΠΎ DRCP находится Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… руководствах Oracle. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, смотритС Β»Β ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° постоянных соСдинСний Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Oracle для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ использованию. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ » тСхничСскоС описаниС DRCP содСрТит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ DRCP.

Для использования DRCP, установитС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ OCI8 ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Oracle 11g (ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅) ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

  • Как ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ администратор Π‘Π” Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ SQL*Plus, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡƒΠ» соСдинСний Π² Π‘Π£Π‘Π”:

        SQL> execute dbms_connection_pool.start_pool;
    
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ dbms_connection_pool.alter_param(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ DRPC. Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ настройки ΠΏΡƒΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈΠ· прСдставлСния DBA_CPOOL_INFO.

  • ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ строку соСдинСния. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ PHP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Network Connect Name MYDB:

        $c = oci_pconnect("myuser", "mypassword", "MYDB");
    

    ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» tnsnames.ora ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (SERVER=POOLED), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        MYDB = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myhost.dom.com)
               (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales)
               (SERVER=POOLED)))
    

    Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ синтаксис ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ соСдинСния Π² PHP ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° :POOLED послС ΠΈΠΌΠ΅Π½ΠΈ сСрвиса:

        $c = oci_pconnect("myuser", "mypassword", "myhost.dom.com:1521/sales:POOLED");
    
  • ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ php.ini ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ имя класса соСдинСния. Π­Ρ‚ΠΎ имя устанавливаСт логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ»Π° соСдинСний ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ» для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π›ΡŽΠ±ΠΎΠ΅ PHP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ классом для соСдинСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ соСдинСния Π² ΠΏΡƒΠ»Π΅, получая Π±ΠžΠ»ΡŒΡˆΡƒΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ.

        oci8.connection_class = "MY_APPLICATION_NAME"
    
  • ЗапуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π΅ΡΡ с Π±Π°Π·ΠΎΠΉ 11g ΠΈ Π½ΠΎΠ²Π΅Π΅.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Oracle 10g, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚ постоянных соСдинСний, ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство памяти сСрвСра Π‘Π”, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Shared-сСрвСрами Oracle (Ρ€Π°Π½Π΅Π΅ извСстныС ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ сСрвСра). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Oracle для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ пароля Ρ‡Π΅Ρ€Π΅Π· DRCP-соСдинСниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ошибка ORA-56609: Usage not supported with DRCP. Π­Ρ‚ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ of Oracle Database 11g.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы