<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.oci8.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'oci8.dtrace.php',
    1 => 'OCI8 y rastreo din&aacute;mico de DTrace',
    2 => 'OCI8 y rastreo din&aacute;mico de DTrace',
  ),
  'up' => 
  array (
    0 => 'book.oci8.php',
    1 => 'OCI8',
  ),
  'prev' => 
  array (
    0 => 'oci8.taf.php',
    1 => 'El soporte de la reanudaci&oacute;n transparente de aplicaci&oacute;n (TAF) de OCI8',
  ),
  'next' => 
  array (
    0 => 'oci8.datatypes.php',
    1 => 'Tipos de datos admitidos',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/oci8/dtrace.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="oci8.dtrace" class="chapter">
 <h1 class="title">OCI8 y rastreo dinámico de DTrace</h1>

 <p class="para">
  OCI8 2.0 sondeos de DTrace estáticos que se pueden usar en
   sistemas operativos que admiten DTrace.
   Véase <a href="features.dtrace.php" class="link">Rastreo dinámico de DTrace</a>
   para una visión general de PHP y DTrace.
  </p>

 <div class="section">
  <h2 class="title">Instalar OCI8 con soporte para DTrace</h2>
  <p class="para">
   Para habilitar el soporte para DTrace en OCI8 para PHP, construya OCI8 como una
   extensión compartida después de establecer <code class="literal">PHP_DTRACE</code>.
  </p>
  <p class="para">
   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
$ export PHP_DTRACE=yes
$ pecl install oci8
</pre></div>
   </div>
  </div>
  </p>
  <p class="para">
   Edite php.ini,
   establezca <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> al
   directorio con el <var class="filename">oci8.so</var> creado y también
   habilite la extensión añadiendo:
  </p>
  <p class="para">
   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
extension=oci8.so
</pre></div>
   </div>
  </div>
  </p>
  <p class="para">
   Si instala PHP OCI8 2.0 desde PECL usando <var class="filename">phpize</var> y
   <var class="filename">configure</var> (en lugar
   de <var class="filename">pecl</var>), será necesario establecer
   <code class="literal">PHP_DTRACE=yes</code>. Esto es así debido a que
   la opción <code class="literal">--enable-dtrace</code> será ignorada por el
   script limitado <var class="filename">configure</var> de un PECL incluido.
  </p>

  <p class="para">
   Véase <a href="install.pecl.php" class="link">Instalación de extensiones
   PECL</a> para las instrucciones generales de instalación de PECL.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Sondeos estáticos de DTrace en OCI8 para PHP</h2>
  <table class="doctable table">
   <caption><strong>Los siguientes sondeos estáticos están disponibles en OCI8 para PHP</strong></caption>
   
    <thead>
     <tr>
      <th>Nombre del sondeo</th>
      <th>Descripción del sondeo</th>
      <th>Argumentos del sondeo</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><code class="literal">oci8-connect-entry</code></td>
      <td>Iniciado por oci_connect(), oci_pconnect() y oci_new_connect(). Lanzado antes de establecer una conexión con una base de datos.</td>
      <td>char *<var class="varname">username</var>, char *<var class="varname">dbname</var>, char *<var class="varname">charset</var>, long <var class="varname">session_mode</var>, int <var class="varname">persistent</var>, int <var class="varname">exclusive</var></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-connect-return</code></td>
      <td>Lanzado al finallde una conexión.</td>
      <td>void *<var class="varname">connection</var></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-check-connection</code></td>
      <td>Lanzado si un error de Oracle podría haber causado que la conexión sea inválida.</td>
      <td>void *<var class="varname">connection</var>, char *<var class="varname">client_id</var>, int <var class="varname">is_open</var>, long <var class="varname">errcode</var>, unsigned long <var class="varname">server_status</var></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-sqltext</code></td>
      <td>Lanzado cuando oci_parse() se ejecuta.</td>
      <td>void *<var class="varname">connection</var>, char *<var class="varname">client_id</var>, void *<var class="varname">statement</var>, char *<var class="varname">sql</var></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-connection-close</code></td>
      <td>Lanzado cuando la conexión a la base de datos está completamente destruida.</td>
      <td>void *<var class="varname">connection</var></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-error</code></td>
      <td>Lanzado si ocurre un error de Oracle.</td>
      <td>int <var class="varname">status</var>, long <var class="varname">errcode</var></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-execute-mode</code></td>
      <td>Lanzado en <span class="function"><a href="function.oci-execute.php" class="function">oci_execute()</a></span> para mostrar el modo de ejecución.</td>
      <td>void *<var class="varname">connection</var>, char *<var class="varname">client_id</var>, void *<var class="varname">statement</var>, unsigned int <var class="varname">mode</var></td>
     </tr>

    </tbody>
   
  </table>

  <p class="para">
   Estos sondeos son útiles para rastrear scripts de OCI8.
  </p>

  <p class="para">
   <var class="varname">connection</var> y <var class="varname">statement</var>
   son los punteros a las estructuras internas usadas para rastrear conexiones
   de PHP y ejecutar sentencias.
  </p>

  <p class="para">
   <var class="varname">client_id</var> es el valor establecido
   por <span class="function"><a href="function.oci-set-client-identifier.php" class="function">oci_set_client_identifier()</a></span>.
  </p>

  <p class="para">
  </p>

  <p class="para">
  </p>

  <p class="para">
  </p>


  <p class="para">
   El núcleo de PHP también posee sondeos estáticos.
   Véase <a href="features.dtrace.dtrace.php#features.dtrace.static-probes" class="link">Sondeos estáticos
   de DTrace en el núcleo de PHP</a>.
  </p>

  <table class="doctable table">
   <caption><strong>Sondeos de DTrace de depuración interna en OCI8</strong></caption>
   
    <thead>
     <tr>
      <th>Nombre del sondeo</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><code class="literal">oci8-connect-expiry</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-connect-lookup</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-connect-p-dtor-close</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-connect-p-dtor-release</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-connect-type</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-sesspool-create</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-sesspool-stats</code></td>
     </tr>

     <tr>
      <td><code class="literal">oci8-sesspool-type</code></td>
     </tr>

    </tbody>
   
  </table>

  <p class="para">
   Estos sondeos son útiles para mantenedores de OCI8. Consulte el código fuente de OCI8 para los argumentos y para ver cuando serán lanzados.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Enumerar los Sondeos estáticos de DTrace en OCI8 para PHP</h2>
  <p class="para">
   Para enumerar los sondeos disponibles, inicie un proceso de PHP y ejecute:
   <div class="informalexample">
    <div class="example-contents">
<div class="cdata"><pre>
# dtrace -l
</pre></div>
    </div>

   </div>
  </p>

  <p class="para">
   La salida será similar a:
   <div class="informalexample">
    <div class="example-contents">
<div class="cdata"><pre>
   ID   PROVIDER            MODULE                          FUNCTION NAME
   [ . . . ]
   17 phpoci22116           oci8.so   php_oci_dtrace_check_connection oci8-check-connection
   18 phpoci22116           oci8.so                php_oci_do_connect oci8-connect-entry
   19 phpoci22116           oci8.so         php_oci_persistent_helper oci8-connect-expiry
   20 phpoci22116           oci8.so             php_oci_do_connect_ex oci8-connect-lookup
   21 phpoci22116           oci8.so  php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-close
   22 phpoci22116           oci8.so  php_oci_pconnection_list_np_dtor oci8-connect-p-dtor-release
   23 phpoci22116           oci8.so                php_oci_do_connect oci8-connect-return
   24 phpoci22116           oci8.so             php_oci_do_connect_ex oci8-connect-type
   25 phpoci22116           oci8.so          php_oci_connection_close oci8-connection-close
   26 phpoci22116           oci8.so                     php_oci_error oci8-error
   27 phpoci22116           oci8.so         php_oci_statement_execute oci8-execute-mode
   28 phpoci22116           oci8.so              php_oci_create_spool oci8-sesspool-create
   29 phpoci22116           oci8.so            php_oci_create_session oci8-sesspool-stats
   30 phpoci22116           oci8.so            php_oci_create_session oci8-sesspool-type
   31 phpoci22116           oci8.so          php_oci_statement_create oci8-sqltext
</pre></div>
    </div>

   </div>
  </p>

  <p class="para">
   Los valores de la columna &quot;Provider&quot; (Proveedor) consisten en <code class="literal">phpoci</code> and
   el ID del proceso de PHP ejecutándose actualmente.
  </p>

  <p class="para">
   La columna &quot;Function&quot; (Función) se refiere a los nombres de funciones internas
   de la implementación en C de PHP donde cada proveedor está ubicado.
  </p>

  <p class="para">
   Si un proceso de PHP no se está ejecutando, no se mostrarán sondeos de PHP.
  </p>
 </div>

 <div class="section">
  <h2 class="title">Ejemplo de DTrace con OCI8 para PHP</h2>
  <p class="para">
   Este ejemplo muestra lo básico del lenguaje de script D de DTrace.
   <div class="example" id="example-1">
    <p><strong>Ejemplo #1 <var class="filename">user_oci8_probes.d</var> para rasrear todos los Sondeos estáticos de OCI8 para PHP al nivel de usuario con DTrace</strong></p>
    <div class="example-contents">
<div class="cdata"><pre>
#!/usr/sbin/dtrace -Zs

#pragma D option quiet

php*:::oci8-connect-entry
{
    printf(&quot;%lld: PHP connect-entry\n&quot;, walltimestamp);
    printf(&quot;  credentials=\&quot;%s@%s\&quot;\n&quot;, arg0 ? copyinstr(arg0) : &quot;&quot;, arg1 ? copyinstr(arg1) : &quot;&quot;);
    printf(&quot;  charset=\&quot;%s\&quot;\n&quot;, arg2 ? copyinstr(arg2) : &quot;&quot;);
    printf(&quot;  session_mode=%ld\n&quot;, (long)arg3);
    printf(&quot;  persistent=%d\n&quot;, (int)arg4);
    printf(&quot;  exclusive=%d\n&quot;, (int)arg5);
}

php*:::oci8-connect-return
{
    printf(&quot;%lld: PHP oci8-connect-return\n&quot;, walltimestamp);
    printf(&quot;  connection=0x%p\n&quot;, (void *)arg0);
}

php*:::oci8-connection-close
{
    printf(&quot;%lld: PHP oci8-connect-close\n&quot;, walltimestamp);
    printf(&quot;  connection=0x%p\n&quot;, (void *)arg0);
}

php*:::oci8-error
{
    printf(&quot;%lld: PHP oci8-error\n&quot;, walltimestamp);
    printf(&quot;  status=%d\n&quot;, (int)arg0);
    printf(&quot;  errcode=%ld\n&quot;, (long)arg1);
}

php*:::oci8-check-connection
{
    printf(&quot;%lld: PHP oci8-check-connection\n&quot;, walltimestamp);
    printf(&quot;  connection=0x%p\n&quot;, (void *)arg0);
    printf(&quot;  client_id=\&quot;%s\&quot;\n&quot;, arg1 ? copyinstr(arg1) : &quot;&quot;);
    printf(&quot;  is_open=%d\n&quot;, arg2);
    printf(&quot;  errcode=%ld\n&quot;, (long)arg3);
    printf(&quot;  server_status=%lu\n&quot;, (unsigned long)arg4);
}

php*:::oci8-sqltext
{
    printf(&quot;%lld: PHP oci8-sqltext\n&quot;, walltimestamp);
    printf(&quot;  connection=0x%p\n&quot;, (void *)arg0);
    printf(&quot;  client_id=\&quot;%s\&quot;\n&quot;, arg1 ? copyinstr(arg1) : &quot;&quot;);
    printf(&quot;  statement=0x%p\n&quot;, (void *)arg2);
    printf(&quot;  sql=\&quot;%s\&quot;\n&quot;, arg3 ? copyinstr(arg3) : &quot;&quot;);
}

php*:::oci8-execute-mode
{
    printf(&quot;%lld: PHP oci8-execute-mode\n&quot;, walltimestamp);
    printf(&quot;  connection=0x%p\n&quot;, (void *)arg0);
    printf(&quot;  client_id=\&quot;%s\&quot;\n&quot;, arg1 ? copyinstr(arg1) : &quot;&quot;);
    printf(&quot;  statement=0x%p\n&quot;, (void *)arg2);
    printf(&quot;  mode=0x%x\n&quot;, arg3);
}
</pre></div>
    </div>

   </div>
  </p>

  <p class="para">
   Este script usa la opción <code class="literal">-Z</code> para
   <var class="filename">dtrace</var>, permitiéndole que sea ejecutado cuando no exista un
   procesode PHP en ejecución. Si esta opción fuera omitida, el script
   terminaría inmediatamente cuando no se ejecutara PHP
   porque no sabe de la existencia de sondeos a ser
   monitorizados.
  </p>

  <p class="para">
   En máquinas multi-CPU, el orden de los sondeos no parecerá ser
   sencuencial. Esto depende de cuál CPU estaba procesando los sondeos,
   y de cómo los hilos migran entre CPUs. Mostrar las marcas de tiempo de los sondeos
   atudará a reducir la confusión.
  </p>

  <p class="para">
   El script rastrea todos los sondeos estáticos de OCI8 para PHP a nivel de usuario que apuntan
   a lo largo de la duración de un script de PHP en ejecución. Ejecute el script D:
   <div class="informalexample">
    <div class="example-contents">
<div class="cdata"><pre>
# ./user_oci8_probes.d
</pre></div>
    </div>

   </div>
  </p>

  <p class="para">
   Ejecute un script o aplicación de PHP. El script D de monitorización
   generará cada argumento del sondeo mientras se lanza. Por ejemplo, un sencillo
   script de PHP que requiere una tabla podría producir la siguiente salida
   de rastreo:
   <div class="informalexample">
    <div class="example-contents">
<div class="cdata"><pre>
1381794982092854582: PHP connect-entry
  credentials=&quot;hr@localhost/pdborcl&quot;
  charset=&quot;&quot;
  session_mode=0
  persistent=0
  exclusive=0
1381794982183158766: PHP oci8-connect-return
  connection=0x7f4a7907bfb8
1381794982183594576: PHP oci8-sqltext
  connection=0x7f4a7907bfb8
  client_id=&quot;Chris&quot;
  statement=0x7f4a7907c2a0
  sql=&quot;select * from employees&quot;
1381794982183783706: PHP oci8-execute-mode
  connection=0x7f4a7907bfb8
  client_id=&quot;Chris&quot;
  statement=0x7f4a7907c2a0
  mode=0x20
1381794982444344390: PHP oci8-connect-close
  connection=0x7f4a7907bfb8
</pre></div>
    </div>

   </div>
  </p>

  <p class="para">
   Cuando la monitorización está completa, el script D puede terminarse con
   <kbd class="keycombo"><kbd class="keycap">CTRL</kbd>+<kbd class="keycap">C</kbd></kbd>.
  </p>

 </div>

 <div class="section">
  <h2 class="title">Véase también</h2>
  <ul class="simplelist">
   <li><a href="features.dtrace.php" class="link">Rastreo dinámico de DTrace</a></li>
  </ul>
 </div>

</div>
<?php manual_footer($setup); ?>