mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-26 09:52:17 +01:00
267 lines
11 KiB
XML
267 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 5fcbcd6b56477034278a2199a8819635f3a0d9b9 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<chapter xml:id="oci8.connection" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Gestion de la connexion OCI8 et de la mise en file d'attente</title>
|
|
<section>
|
|
<title>Fonctions de connexion</title>
|
|
<para>
|
|
L'extension oci8 fournit trois fonctions différentes pour se connecter
|
|
à Oracle. La fonction de connexion standard est la fonction
|
|
<function>oci_connect</function>. Cette fonction crée une connexion
|
|
à la base de données Oracle et retourne une ressource utilisée
|
|
par les futurs appels à la base de données.
|
|
</para>
|
|
<para>
|
|
La connexion à un serveur Oracle est une opération raisonnablement coûteuse
|
|
en terme de temps que cela nécessite. La fonction <function>oci_pconnect</function>
|
|
utilise un cache persistant de connexions qui peut être réutilisé à travers
|
|
différents scripts. Cela signifie qu'une seule connexion sera utilisée par
|
|
processus PHP (ou un fils Apache).
|
|
</para>
|
|
<para>
|
|
Si votre application se connecte à Oracle en utilisant un jeu différent de droits
|
|
de base de données pour chaque utilisateur web, le cache persistant utilisé
|
|
par la fonction <function>oci_pconnect</function> devient moins approprié
|
|
car l'augmentation du nombre d'utilisateurs concurrents va affecter les performances
|
|
de votre serveur Oracle, car il devra maintenir trop de connexions en cache.
|
|
Si votre application est de ce type, il est recommandé d'optimiser votre application
|
|
en utilisant les options de configuration <link
|
|
linkend="ini.oci8.max-persistent">oci8.max_persistent</link> et <link
|
|
linkend="ini.oci8.persistent-timeout">oci8.persistent_timeout</link>
|
|
(elles vous donnent le contrôle sur la taille et la durée de vie du cache
|
|
de connexions persistantes) ou utilisez le pool de connexions résidentes d'Oracle
|
|
(pour les bases de données Oracle 11g et suivants), ou encore, utilisez plutôt
|
|
la fonction<function>oci_connect</function>.
|
|
</para>
|
|
<para>
|
|
Les fonctions <function>oci_connect</function> et <function>oci_pconnect</function>
|
|
emploient un cache de connexions ; si vous faites des appels multiples
|
|
à <function>oci_connect</function>, en utilisant les mêmes paramètres dans
|
|
un script donné, le second appel ainsi que les suivants retourneront le gestionnaire
|
|
de connexion existant. Le cache utilisé par la fonction <function>oci_connect</function>
|
|
est nettoyé à la fin de l'exécution du script ou lorsque vous fermez explicitement
|
|
le gestionnaire de connexion. <function>oci_pconnect</function> a un comportement
|
|
sensiblement identique, à la différence que le cache est maintenu séparément
|
|
et est conservé entre les requêtes HTTP.
|
|
</para>
|
|
<para>
|
|
Il est important de se souvenir de cette fonctionnalité de cache, car il donne
|
|
l'apparence que les deux gestionnaires ne sont pas isolés au niveau des transactions,
|
|
(ils représentent en fait le même gestionnaire de connexion, ils ne sont donc absolument pas
|
|
isolés). Si votre connexion a besoin de deux connexions séparées, isolées
|
|
au niveau des transactions, vous devez utiliser la fonction <function>oci_new_connect</function>.
|
|
</para>
|
|
<para>
|
|
Le cache de la fonction <function>oci_pconnect</function> est effacé
|
|
et toutes les connexions à la base de données sont closes lorsque le processus
|
|
PHP se termine, aussi, les connexions persistantes n'ont d'intérêts que lors
|
|
de l'utilisation de PHP comme module Apache ou utilisé avec FPM ou similaire.
|
|
Les connexions persistantes n'ont aucun intérêts via <function>oci_connect</function>
|
|
lorsque PHP est utilisé comme CGI ou en ligne de commande.
|
|
</para>
|
|
<para>
|
|
<function>oci_new_connect</function> crée toujours une nouvelle connexion au
|
|
serveur Oracle, indépendamment de l'existence d'autres connexions.
|
|
Les applications web à fort trafic doivent éviter d'utiliser
|
|
<function>oci_new_connect</function>, particulièrement dans les sections
|
|
les plus chargées de l'application.
|
|
</para>
|
|
<para>
|
|
Depuis OCI8 1.3, les connexions persistantes peuvent désormais être fermées
|
|
par l'utilisateur, permettant ainsi un meilleur contrôle des ressources
|
|
de connexion. Les connexions persistantes peuvent maintenant être fermées
|
|
automatiquement lorsqu'aucune variable PHP ne les références, comme ce
|
|
pourrait être le cas à la fin d'un contexte d'une fonction utilisateur PHP.
|
|
Ceci annulera toutes les transactions non validées. Ces changements dans les
|
|
connexions persistantes font qu'elles fonctionnent comme les fonctions
|
|
non-persistantes, simplifiant l'interface, permettant une plus grande
|
|
cohérence de l'application et de prévisibilité. Définissez la directive
|
|
<link linkend="ini.oci8.old-oci-close-semantics">oci8.old_oci_close_semantics</link>
|
|
à <emphasis>On</emphasis> pour retrouver le comportement historique.
|
|
</para>
|
|
<para>
|
|
Le ré-établissement automatique des connexions persistantes PHP
|
|
après le redémarrage d'un processus Apache ou FPM fait que les triggers
|
|
<literal>LOGON</literal> sont uniquement recommandés pour définir
|
|
les attributs de session et non les requêtes de connexions utilisateurs
|
|
par application.
|
|
</para>
|
|
</section>
|
|
<section>
|
|
<title>Pool de connexion DRCP</title>
|
|
<para>
|
|
PHP, depuis la version 5.3, (PECL OCI8 1.3) supporte le pool de connexion résidentes
|
|
Oracle (DRCP). DRCP permet d'utiliser plus efficacement la mémoire de la base de données
|
|
et permet une meilleure évolution. Peu ou pas de modifications sont nécessaires
|
|
afin de profiter de DRCP.
|
|
</para>
|
|
<para>
|
|
DRCP est prévu pour les applications qui se connecte en utilisant peu
|
|
de schéma de base de données, et qui conserve les connexions ouvertes
|
|
sur une courte période de temps. Les autres applications doivent
|
|
utiliser le processus dédié à la base de données Oracle, ou utiliser
|
|
les serveurs partagés.
|
|
</para>
|
|
<para>
|
|
DRCP bénéfice des 3 fonctions de connexion, mais seule la fonction
|
|
<function>oci_pconnect</function> offre le plus de performance.
|
|
</para>
|
|
<para>
|
|
Pour rendre DRCP disponible avec OCI8, la version des bibliothèques clientes Oracle
|
|
utilisées par PHP ainsi que la version de la base de données Oracle
|
|
doivent être 11g ou supérieure.
|
|
</para>
|
|
<para>
|
|
La documentation sur DRCP peut être trouvé dans les différents manuels
|
|
Oracle. Par exemple, reportez-vous à la
|
|
<link xlink:href="&url.oracle.drcp.configure;">configuration du pool
|
|
de connexions résidentes à la base de données</link> de la documentation
|
|
Oracle pour un exemple d'utilisation.
|
|
Un <link xlink:href="&url.oracle.drcp.whitepaper;">livre blanc sur DRCP</link>
|
|
contient plusieurs informations internes sur DRCP.
|
|
</para>
|
|
<para>
|
|
Pour utiliser DRCP, installez l'extension OCI8 1.3 (ou ultérieur) et les
|
|
bibliothèques Oracle 11g (ou ultérieur), puis, suivre ces étapes :
|
|
</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
En utilisant les privilèges d'administrateur de la base de données,
|
|
utilisez un programme comme SQL*Plus pour commencer un pool
|
|
de connexion à la base de données :
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
SQL> execute dbms_connection_pool.start_pool;
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Optionnellement, utilisez <literal>dbms_connection_pool.alter_param()</literal>
|
|
pour configurer les options DRCP. Les options courantes du pool
|
|
peuvent être trouvées en utilisant la vue <literal>DBA_CPOOL_INFO</literal>.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Mettre à jour les chaînes de connexion utilisées. Pour les applications PHP
|
|
qui se connecte actuellement via un nom de connexion réseau comme
|
|
<literal>MYDB</literal>:
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$c = oci_pconnect("myuser", "mypassword", "MYDB");
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
modifiez le fichier tnsnames.ora file et ajoutez une clause
|
|
<literal>(SERVER=POOLED)</literal>, par exemple :
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
MYDB = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myhost.dom.com)
|
|
(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=sales)
|
|
(SERVER=POOLED)))
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
Sinon, vous pouvez modifier la syntaxe de connexion facile en PHP et ajouter
|
|
<literal>:POOLED</literal> après le nom du service :
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
$c = oci_pconnect("myuser", "mypassword", "myhost.dom.com:1521/sales:POOLED");
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Éditez &php.ini; et choisissez le nom de la classe de connexion.
|
|
Ce nom indique une division logique du pool de connexion et peut
|
|
être utilisé pour isoler le pool des différentes applications.
|
|
Toutes applications PHP utilisant le même utilisateur ainsi que
|
|
la même valeur de classe de connexion pourront se partager
|
|
le pool de connexions, permettant ainsi d'obtenir une plus grande
|
|
disponibilité.
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<screen>
|
|
<![CDATA[
|
|
oci8.connection_class = "MY_APPLICATION_NAME"
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Exécutez votre application, connectez-vous à la base de données
|
|
11g (ou supérieur).
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Les applications utilisant Oracle Client libraries 10g qui ont besoin de la performance
|
|
des connexions persistantes, peuvent réduire la quantité de mémoire
|
|
allouée au serveur de la base de données en utilisant les serveurs
|
|
partagés Oracle (connu auparavant comme serveurs multithreadés).
|
|
Reportez-vous à la documentation Oracle pour plus d'informations.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
La modification d'un mot de passe lors de connexions DRCP échouera
|
|
avec l'erreur "<emphasis>ORA-56609: Usage not supported with DRCP</emphasis>".
|
|
Ceci est une restriction documentée de la base de données Oracle 11g.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|
|
|