<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>SQL eficiente</title>
	<atom:link href="http://sqleficiente.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqleficiente.wordpress.com</link>
	<description>Para escribir SQL eficiente sobre Oracle 11g</description>
	<lastBuildDate>Sat, 03 Dec 2011 19:49:43 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sqleficiente.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>SQL eficiente</title>
		<link>http://sqleficiente.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sqleficiente.wordpress.com/osd.xml" title="SQL eficiente" />
	<atom:link rel='hub' href='http://sqleficiente.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Lo he entendido y quiero demostrarlo!</title>
		<link>http://sqleficiente.wordpress.com/2009/07/19/lo-he-entendido-y-quiero-demostrarlo/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/19/lo-he-entendido-y-quiero-demostrarlo/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 19:34:33 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=295</guid>
		<description><![CDATA[Si has completado los posts de este capitulo puedes ponerte a prueba completando un Quiz de 10 preguntas. Puedes acceder al Quiz desde mi pagina personal en el sitio de la Comunidad Oracle Hispana.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=295&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Si has completado los posts de este capitulo puedes ponerte a prueba completando un Quiz de 10 preguntas. Puedes acceder al Quiz desde <a href="http://comunidadoraclehispana.ning.com/profile/2c72o3em9f7e3">mi pagina personal </a>en el sitio de la Comunidad Oracle Hispana.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/295/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/295/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/295/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=295&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/19/lo-he-entendido-y-quiero-demostrarlo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>
	</item>
		<item>
		<title>Estructura de un indice bitmap</title>
		<link>http://sqleficiente.wordpress.com/2009/07/09/estructura-de-un-indice-bitmap/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/09/estructura-de-un-indice-bitmap/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 19:56:21 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bitmap index]]></category>
		<category><![CDATA[estructura indice bitmap]]></category>
		<category><![CDATA[indice bitmap]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=241</guid>
		<description><![CDATA[El proposito de todo indice es proveer punteros a las filas de una tabla que tienen un valor determinado. En un indice B-tree, este objetivo se logra almacenando una lista de rowids de las filas de la tabla con el valor clave. Oracle almacena cada valor clave en forma repetida para cada fila. En un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=241&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_258" class="wp-caption alignright" style="width: 105px"><img class="size-full wp-image-258" title="Composicion II - Piet Mondrian" src="http://sqleficiente.files.wordpress.com/2009/07/composicion-ii-piet-mondrian.jpg?w=460" alt="Composicion II - Piet Mondrian"   /><p class="wp-caption-text">Composicion II - Piet Mondrian</p></div>
<p>El proposito de todo indice es proveer punteros a las filas de una tabla que tienen un valor determinado. En un indice B-tree, este objetivo se logra almacenando una lista de rowids de las filas de la tabla con el valor clave. Oracle almacena cada valor clave en forma repetida para cada fila. En un indice bitmap, en vez de una lista de rowids, Oracle crea un mapa de bits para cada valor clave del indice.</p>
<p>Cada bit del mapa corresponde a un rowid posible. Si el bit esta en 1, significa que el rowid contiene dicho valor clave. Una funcion interna de Oracle convierte la posicion del bit en el rowid conrrespondiente, de modo tal que los indices bitmap ofrecen la misma funcionalidad que los indices B-tree, a pesar de la diferente representacion interna. Si la cantidad de valores diferentes del indice es chica, entonces el indice bitmap sera muy eficiente en cuanto al uso de espacio fisico.</p>
<p>Supongamos que tenemos la siguiente tabla de clientes:</p>
<pre>CLIENTE        APELLIDO       REGION
101            PEREZ          NORTE
102            GARCIA         CENTRO
103            LOPEZ          SUR
104            SAN MARTIN     SUR
105            BROWN          CENTRO
106            CANEPA         CENTRO</pre>
<p>La columna region tiene baja cardinalidad, ya que los valores posibles son muy pocos (NORTE, CENTRO, SUR). Hay solamente tres valores posibles para la region por lo tanto un indice bitmap seria apropiado para esta columna. Sin embargo, no es recomendable un indice bitmap para la columna CLIENTE o APELLIDO, dada su alta cardinalidad. Para estos casos un indice B-tree proveera una representacion y acceso mas eficiente.</p>
<p>La siguiente seria la representacion del indice bitmap para la columna REGION. El indice tiene tres mapas de bits, uno para cada region.</p>
<pre>NORTE    CENTRO    SUR         
1        0         0
0        1         0
0        0         1
0        0         1
0        1         0
0        1         0</pre>
<p>Cada entrada o bit en el indice bitmap se corresponde  a una sola fila en la tabla de clientes. El valor del bit dependera del valor correspondiente de la fila en la tabla. Por ejemplo, para la region NORTE el mapa de bits tiene un 1 en la primer posicion. Eso es porque la primer fila de la tabla de clientes tiene el valor NORTE en la columna REGION. Luego, el mapa de bits tiene todos ceros, indicando que el resto de las filas de la tabla no tiene clientes en la region NORTE.</p>
<p>Una sentencia SQL sobre esta tabla y con el indice bitmap, ser resolveria de la siguiente manera.</p>
<pre>select count(*) from CLIENTES
    where REGION in ('NORTE','SUR');</pre>
<p>Un indice bitmap puede resolver esta sentencia con gran eficiencia contando la cantidad de unos existentes en el mapa de bits resultante como se muestra en la siguiente figura:</p>
<pre>NORTE   CENTRO   SUR   (NORTE O SUR)
1       0        0      1
0       1        0      0
0       0        1      1
0       0        1      1
0       1        0      0
0       1        0      0</pre>
<p>La columna &#8220;NORTE O SUR&#8221; es el mapa de bits resultante utilizado para acceder a la tabla.</p>
<p>Adicionalmente y a diferencia de los indices B-tree, los indices bitmap pueden incluir filas con valore NULL dentro de la estructura del indice.  En cuanto a las tablas particionadas, los indices bitmap se pueden utilizar solo si son locales a la particion. Los indices bitmap globales no son soportados para tablas particionadas.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/241/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=241&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/09/estructura-de-un-indice-bitmap/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/composicion-ii-piet-mondrian.jpg" medium="image">
			<media:title type="html">Composicion II - Piet Mondrian</media:title>
		</media:content>
	</item>
		<item>
		<title>Parmetros de inicializacion de SQL_TRACE</title>
		<link>http://sqleficiente.wordpress.com/2009/07/07/parmetros-de-inicializacion-de-sql_trace/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/07/parmetros-de-inicializacion-de-sql_trace/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 23:28:10 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[SQL Trace y Tkprof]]></category>
		<category><![CDATA[max_dump_file_size]]></category>
		<category><![CDATA[sql trace]]></category>
		<category><![CDATA[timed_statistics]]></category>
		<category><![CDATA[user_dump_dest]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=204</guid>
		<description><![CDATA[Cuando se habilita SQL Trace para una sesion, Oracle genera un archivo de trace que contiene estadisticas de las sentencias SQL de dicha sesion. Cuando se habilita SQL Trace para la instancia, Oracle crea un archivo por cada proceso. Como dijimos en el post Como utilizar SQL Trace, el primer paso es verificar algunos parametros [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=204&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_228" class="wp-caption alignright" style="width: 124px"><img class="size-full wp-image-228" title="El Cristo amarillo - Paul Gauguin" src="http://sqleficiente.files.wordpress.com/2009/07/el-cristo-amarillo-paul-gauguin.jpg?w=460" alt="El Cristo amarillo - Paul Gauguin"   /><p class="wp-caption-text">El Cristo amarillo - Paul Gauguin</p></div>
<p>Cuando se habilita SQL Trace para una sesion, Oracle genera un archivo de trace que contiene estadisticas de las sentencias SQL de dicha sesion. Cuando se habilita SQL Trace para la instancia, Oracle crea un archivo por cada proceso. Como dijimos en el post <a title="Como utilizar SQL Trace" href="http://sqleficiente.wordpress.com/2008/08/24/como-utilizar-sql-trace/" target="_self">Como utilizar SQL Trace</a>, el primer paso es verificar algunos parametros de inicializacion:</p>
<p><strong>TIMED_STATISTICS</strong></p>
<p>Este parametro habilita o deshabilita la colecta de estadisticas referidas a tiempos (de CPU y de ejecucion). Dado que la habilitacion de la colecta de tiempos implica tareas extra para el motor de base de datos, por defecto esta deshabilitado. De todos modos, por tratarse de un parametro dinamico, no es necesario bajar y subir la base para activarlo. Incluso puede habilitarse a nivel de sesion.</p>
<p>Para habilitarlo a nivel de sesion:</p>
<pre>ALTER SESSION SET TIMED_STATISTICS=TRUE;</pre>
<p>Para habilitarlo a nivel de sistema (tarea del DBA):</p>
<pre>ALTER SYSTEM SET TIMED_STATISTICS=TRUE;</pre>
<p><strong>USER_DUMP_DEST</strong></p>
<p>Permite indicar el destino del archivo generado por SQL Trace. Este parametro tambien es dinamico y puede modificarse a nivel de sesion. El archivo de trace se genera en el servidor de base de datos. Si el usuario no tiene acceso al servidor debera solicitar el archivo al DBA.</p>
<p>Para habilitarlo a nivel de sesion:</p>
<pre>ALTER SESSION SET USER_DUMP_DEST=/u01/oradata/dumps;</pre>
<p>Para habilitarlo a nivel de sistema (tarea del DBA):</p>
<pre>ALTER SYSTEM SET USER_DUMP_DEST=/u01/oradata/dumps;</pre>
<p> <strong>MAX_DUMP_FILE_SIZE</strong></p>
<p>Cuando se activa SQL Trace a nivel de instancia, cada invocacion al servidor de base de datos hara crecer alguno de los archivos de texto generados por SQL Trace. Para evitar que el rapido crecimiento de los archivos termine ocupando todo un file system o disco se puede limitar el tamaño maximo de cada archivo especificandolo en el parametro MAX_DUMP_FILE_SIZE. El valor por defecto es 500 bloques de sistema operativo. Cuando se llega al limite el archivo no sigue creciendo; aunque la sesion de usuario seguira funcionando sin inconvenientes. Este parametro tambien es dinamico y se puede modificar a nivel de sesion.</p>
<p>Para habilitarlo a nivel de sesion:</p>
<pre>ALTER SESSION SET MAX_DUMP_FILE_SIZE=1000;</pre>
<p>Para habilitarlo a nivel de sistema (tarea del DBA):</p>
<pre>ALTER SYSTEM SET MAX_DUMP_FILE_SIZE=1000;</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/204/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/204/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/204/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=204&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/07/parmetros-de-inicializacion-de-sql_trace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/el-cristo-amarillo-paul-gauguin.jpg" medium="image">
			<media:title type="html">El Cristo amarillo - Paul Gauguin</media:title>
		</media:content>
	</item>
		<item>
		<title>Uso de AUTOTRACE</title>
		<link>http://sqleficiente.wordpress.com/2009/07/06/uso-de-autotrace/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/06/uso-de-autotrace/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 23:40:39 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Procesamiento de sentencias]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=184</guid>
		<description><![CDATA[Como dijimos en el post Como ver el plan de ejecucion Oracle provee diversas herramientas para visualizar el plan de ejecucion de una sentencia SQL. Para los usuarios de SQL*Plus Oracle ofrece AUTOTRACE. AUTOTRACE es una variable de entorno de SQL*Plus que nos permite obtener un reporte del plan de ejecucion y algunos datos estadisticos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=184&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_230" class="wp-caption alignright" style="width: 129px"><img class="size-full wp-image-230" title="Cafe nocturno - Vincent Van Gogh" src="http://sqleficiente.files.wordpress.com/2009/07/cafe-nocturno-vincent-van-gogh.jpg?w=460" alt="Cafe nocturno - Vincent Van Gogh"   /><p class="wp-caption-text">Cafe nocturno - Vincent Van Gogh</p></div>
<p>Como dijimos en el post<a title="Como ver el plan de ejecucion" href="http://sqleficiente.wordpress.com/2009/07/06/como-ver-el-plan-de-ejecucion/" target="_self"> Como ver el plan de ejecucion </a>Oracle provee diversas herramientas para visualizar el plan de ejecucion de una sentencia SQL.</p>
<p>Para los usuarios de SQL*Plus Oracle ofrece AUTOTRACE.</p>
<p>AUTOTRACE es una variable de entorno de SQL*Plus que nos permite obtener un reporte del plan de ejecucion y algunos datos estadisticos de la sentencia ejecutada.</p>
<p>A continuacion vemos un ejemplo del uso de AUTOTRACE.</p>
<pre>SQL&gt; set autotrace on

SQL&gt; select emp_apellido from empleados;
EMP_APELLIDO
------------------------------
PEREZ
GARCIA
GOMEZ

Execution Plan
----------------------------------------------------------

Plan hash value: 3220727562
--------------------------------------------------------------------
|Id | Operation         | Name      |Rows|Bytes|Cost(%CPU)| Time   |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT  |           |  3 |  51 |    3  (0)|00:00:01|
| 1 |  TABLE ACCESS FULL| EMPLEADOS |  3 |  51 |    3  (0)|00:00:01|
--------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement

Statistics
----------------------------------------------------------
          5  recursive calls
          0  db block gets
         16  consistent gets
          0  physical reads
          0  redo size
        599  bytes sent via SQL*Net to client
        469  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed</pre>
<p>Hay varias configuraciones de AUTOTRACE que permiten controlar la salida del reporte:</p>
<ul>
<li><strong>SET AUTOTRACE OFF</strong> Desactiva la generacion del reporte. Es el valor por defecto.</li>
<li><strong>SET AUTOTRACE ON EXPLAIN</strong> El reporte muestra solamente el plan de ejecucion.</li>
<li><strong>SET AUTOTRACE ON STATISTICS</strong> El reporte muestra solo las estadisticas de la sentencia SQL ejecutada</li>
<li><strong>SET AUTOTRACE ON</strong> El reporte muestra las estadisticas y el plan de ejecucion de la sentencia SQL ejecutada</li>
<li><strong>SET AUTOTRACE TRACEONLY</strong> Es similar a SET AUTOTRACE ON pero se suprime la impresion de la salida del query. Si STATISTICS esta activado, la sentencia se ejecuta pero no se muestra el conjunto resultado.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/184/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=184&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/06/uso-de-autotrace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/cafe-nocturno-vincent-van-gogh.jpg" medium="image">
			<media:title type="html">Cafe nocturno - Vincent Van Gogh</media:title>
		</media:content>
	</item>
		<item>
		<title>Como ver el plan de ejecucion</title>
		<link>http://sqleficiente.wordpress.com/2009/07/06/como-ver-el-plan-de-ejecucion/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/06/como-ver-el-plan-de-ejecucion/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 22:30:09 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Procesamiento de sentencias]]></category>
		<category><![CDATA[DBMS_XPLAN]]></category>
		<category><![CDATA[UTLXPLP.SQL]]></category>
		<category><![CDATA[UTLXPLS.SQL]]></category>
		<category><![CDATA[visualizacion plan de ejecucion]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=181</guid>
		<description><![CDATA[Como vimos en el articulo &#8221;El comando EXPLAIN PLAN&#8220;, dicho comando inserta el plan de ejecucion de una sentencia SQL en la tabla PLAN_TABLE. Oracle provee ademas un conjunto de herramientas para visualizar el plan de ejecucion en un formato que resulte practico a quien deba interpretarlo.   Una vez ejecutado el comando EXPLAIN PLAN se puede utilizar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=181&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_232" class="wp-caption alignright" style="width: 106px"><img class="size-full wp-image-232" title="Moulin Rouge, la Goulue - Henri de Toulouse-Lautrec" src="http://sqleficiente.files.wordpress.com/2009/07/moulin-rouge-la-goulue-henri-de-toulouse-lautrec.jpg?w=460" alt="Moulin Rouge, la Goulue - Henri de Toulouse-Lautrec"   /><p class="wp-caption-text">Moulin Rouge, la Goulue - Henri de Toulouse-Lautrec</p></div>
<p>Como vimos en el articulo &#8221;<a title="El comando EXPLAIN PLAN" rel="bookmark" href="http://sqleficiente.wordpress.com/2009/07/05/el-comando-explain-plan/" target="_self">El comando EXPLAIN PLAN</a>&#8220;, dicho comando inserta el plan de ejecucion de una sentencia SQL en la tabla PLAN_TABLE. Oracle provee ademas un conjunto de herramientas para visualizar el plan de ejecucion en un formato que resulte practico a quien deba interpretarlo.<br />
 <br />
Una vez ejecutado el comando EXPLAIN PLAN se puede utilizar alguno de los siguientes scripts o package para visualizar el plan de ejecucion:</p>
<ul>
<li>UTLXPLS.SQL este script reside en el servidor de base de datos y se puede utilizar para visualizar la PLAN_TABLE cuando se ejecutan sentencias en forma serializada.</li>
<li>UTLXPLP.SQL reside en el servidor de base de datos y se puede utilizar para ver el plan de ejecucion cuando se ejecutan sentencias que se procesan en paralelo.</li>
<li>DBMS_XPLAN.DISPLAY esta funcion del package DBMS_XPLAN acepta diversas opciones de visualizacion de la PLAN_TABLE.</li>
</ul>
<p><strong>Ejemplo de visualizacion del plan de ejecucion utilizando UTLXPLS.SQL</strong></p>
<pre>SQL&gt; explain plan for select EMP_APELLIDO from EMPLEADOS;
Explained.
SQL&gt;  @$ORACLE_HOME/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3220727562
-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           |     1 |    17 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMPLEADOS |     1 |    17 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------
Note
-----
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   - dynamic sampling used for this statement
12 rows selected.</pre>
<p><strong>Ejemplo de visualizacion del plan de ejecucion utilizando UTLXPLP.SQL</strong></p>
<pre>SQL&gt; @$ORACLE_HOME/rdbms/admin/utlxplp
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3220727562
-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           |     1 |    17 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMPLEADOS |     1 |    17 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------
Note
-----
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   - dynamic sampling used for this statement
12 rows selected.</pre>
<p><strong>Ejemplo de visualizacion del plan de ejecucion utilizando DBMS_XPLAN.SQL</strong></p>
<pre>SQL&gt; SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3220727562
-------------------------------------------------------------------------------
| Id  | Operation         | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |           |     1 |    17 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMPLEADOS |     1 |    17 |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------
Note
-----
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   - dynamic sampling used for this statement
12 rows selected.</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=181&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/06/como-ver-el-plan-de-ejecucion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/moulin-rouge-la-goulue-henri-de-toulouse-lautrec.jpg" medium="image">
			<media:title type="html">Moulin Rouge, la Goulue - Henri de Toulouse-Lautrec</media:title>
		</media:content>
	</item>
		<item>
		<title>Como leer el plan de ejecucion</title>
		<link>http://sqleficiente.wordpress.com/2009/07/05/como-leer-el-plan-de-ejecucion/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/05/como-leer-el-plan-de-ejecucion/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 23:58:32 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[execution plan]]></category>
		<category><![CDATA[plan de ejecucion]]></category>
		<category><![CDATA[plan de ejecucion oracle]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=176</guid>
		<description><![CDATA[Para comprender como se debe leer un plan de ejecucion comencemos con un ejemplo muy simple. Veamos a continuacion un plan de ejecucion sencillo: Query Plan -------------------------------------------------- SELECT STATEMENT     [CHOOSE] Cost=1234   TABLE ACCESS FULL EMPLEADOS [:Q65001] [ANALYZED] Cuando analizamos un plan de ejecucion, el paso que esta indentado mas a la derecha es la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=176&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para comprender como se debe leer un plan de ejecucion comencemos con un ejemplo muy simple. Veamos a continuacion un plan de ejecucion sencillo:</p>
<pre>Query Plan
--------------------------------------------------
SELECT STATEMENT     [CHOOSE] Cost=1234
  TABLE ACCESS FULL EMPLEADOS [:Q65001] [ANALYZED]</pre>
<p>Cuando analizamos un plan de ejecucion, el paso que esta indentado mas a la derecha es la primer operacion que se realiza para la ejecucion de la sentencia (mas adelante veremos como se hace para determinar el orden de los pasos cuandoleemos un plan de ejecucion). Por lo tanto, en nuestro ejemplo, la primer operacion es <strong>TABLE ACCESS FULL EMPLEADOS</strong>. Este paso indica que estamos haciendo un barrido o recorrido completo de la tabla EMPLEADOS. Una vez finalizado dicho recorrido, el conjunto de filas resultante sera pasado al nivel superior para que siga procesando el query. Es decir que los datos seran pasados a la operacion <strong>SELECT</strong> que es la ultima etapa de la sentencia de nuestro ejemplo.</p>
<p><strong>[CHOOSE]</strong> indica cual es el valor de optimizer_goal para el query. Esto no necesariamente indica que el plan haya utilizado dicho objetivo. La unica forma de confirmarlo es mirando la variable  <strong>COST=</strong> que tambien es parte del plan de ejecucion. En el ejemplo el costo tiene valores, indicando que se utilizo CBO (optimizador basado en costos).</p>
<pre>SELECT STATEMENT     [CHOOSE] Cost=1234</pre>
<p>Si el plan de ejecucion hubiera dicho</p>
<pre>SELECT STATEMENT     [CHOOSE] Cost=</pre>
<p>entonces el optimizador utilizado seria RBO (optimizador basado en reglas).</p>
<p>Es posts posteriores veremos en detalle que es el optimizador y que significa CBO o RBO. El objetivo de este articulo es aprender a leer un plan de ejecucion, no a interpretarlo. Aprender a interpretarlo es un poco mas complejo pues requiere de muchos otros conceptos previos. Obviamente, todos estos conceptos seran tratados oportunamente en SqlEficiente. El numero que acompaña al costo es un valor que utiliza Oracle internamente a fines comparativos para determinar cual es el plan que tiene el mejor costo. Los valores de los costos no sirven para comparar sentencias diferentes.</p>
<p><strong>[:Q65001]</strong> indica que esta operacion particular del query se ejecuta en paralelo. Es decir que sera ejecutada por procesos esclavos en paralelo en vez de ser ejecutada por un solo proceso en forma serializada.</p>
<p><strong>[ANALYZED]</strong> indica que el objeto en cuestion (en nuestro caso, la tabla EMPLEADOS) ha sido analizado y hay estadisticas disponibles sobre dicho objeto para que las puede utilizar el optimizador basado en costos.</p>
<p>Para determinar el orden en que se ejecutan cada unos de los pasos del plan de ejecucion de la sentencia es necesario entender las siguientes relaciones PADRE-HIJO:</p>
<p>PADRE<br />
  PRIMER HIJO<br />
  SEGUNDO HIJO</p>
<p>En este ejemplo, la sentencia PRIMER HIJO se ejecuta primero, luego se ejecuta la sentecia SEGUNDO HIJO y por ultimo PADRE procesa la salida de ambos hijos.</p>
<p>Veamos a continuacion un caso mas complejo:</p>
<p>PADRE<br />
  PRIMER HIJO<br />
    PRIMER NIETO<br />
  SEGUNDO HIJO</p>
<p>Aplicando los mismo principios, PRIMER NIETO es la primer operacion, en segundo lugar se ejecuta la operacion PRIMER HIJO seguida por SEGUNDO HIJO. Por ultimo, la operacion PADRE.</p>
<p>Estos mismos principios pueden utilizarse para aplicarlos a las operaciones reales de un plan de ejecucion. Veamos algunos ejemplos concretos.</p>
<p><strong>Ejemplo 1</strong></p>
<pre>set autotrace traceonly explain
select ename,dname
  from empleados, deptos
 where empleados.deptno=deptos.deptno
   and dept.dname in ('TESORERIA','COMPRAS','VENTAS','OPERACIONES');
15 rows selected.</pre>
<p>Este query produce el siguiente plan de ejecucion:</p>
<pre>Execution Plan
---------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)
   1    0   HASH JOIN (Cost=3 Card=8 Bytes=248)
   2    1     TABLE ACCESS (FULL) OF 'DEPTOS' (Cost=1 Card=3 Bytes=36)
   3    1     TABLE ACCESS (FULL) OF 'EMPLEADOS' (Cost=1 Card=16 Bytes=304)</pre>
<p>En el plan de ejecucion vemos dos columnas de numeros que preceden al texto de cada fila. El primer numero es el identificador de sentencia (tambien llamado ID). El segundo numero es el identificador del padre (tambien llamado parent ID) de la operacion en cuestion. La primer operacion no tiene identificador de  padre ya que es la primera de todas. El ID y el PARENT ID son utilizados por el generador de planes del optimizador para construir el plan de ejecucion. Los pasos del plan de ejecucion son indentados para indicar la jerarquia y dependencia de las operaciones.</p>
<p>En nuestro ejemplo, el plan de ejecucion comienza con ID=0</p>
<pre>   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)</pre>
<p>ID=0 no tiene padre, pero tiene un hijo.<br />
ID=0 es padre de ID=1. Ademas ID=0 depende de las filas que devuelva ID=1<br />
Por lo tanto ID=1 debe ejecutarse si o si antes que ID=0</p>
<p>Pasemos a ID=1:</p>
<pre>   1    0   HASH JOIN (Cost=3 Card=8 Bytes=248)</pre>
<p>ID=1 es hijo de ID=0<br />
ID=1 is padre de ID=2 y de ID=3 y depende de las filas que le devuelvan ambos hijos.<br />
Por lo tanto ID=2 y ID=3 deben ejecutarse si o si antes que ID=1</p>
<p>Pasemos a ID=2:</p>
<pre>   2    1     TABLE ACCESS (FULL) OF 'DEPTOS' (Cost=1 Card=3 Bytes=36)</pre>
<p>ID=2 es el primer hijo de ID=1<br />
ID=2 no tiene hijos.<br />
Este es el primer paso en la ejecucion de este query.<br />
Las filas retornadas por esta operacion seran provistas a ID=1.</p>
<p>ID=1 tambien depende de ID=3:</p>
<pre>   3    1     TABLE ACCESS (FULL) OF 'EMPLEADOS' (Cost=1 Card=16 Bytes=304)</pre>
<p>ID=3 es el segundo hijo de ID=1<br />
ID=3 no tiene hijos.<br />
Esta es la seguna operacion que se ejecuta en este query.<br />
Las filas retornadas seran provistas a ID=1.</p>
<p>ID=1 procesa las filas quer recibe de las operaciones de las cuales depende (ID=2 y ID=3) y retorna las filas a su padre<br />
ID=0.<br />
ID=0 retorna las filas al usuario.</p>
<p>En resumen:</p>
<p>La ejecucion comienza con <strong>ID=0: SELECT STATEMENT</strong> que depende de sus hijos para resolver el query por lo tanto ejecuta a su primer hijo <strong>ID=1 PID=0 HASH JOIN</strong> que a su vez depende de otros objetos hijo y por lo tanto ejecuta a su primer hijo <strong>ID=2 PID=1   TABLE ACCESS (FULL) OF &#8216;DEPTOS&#8217;  </strong>y luego a su segundo hijo <strong>ID=3 PID=2   TABLE ACCESS (FULL) OF &#8216;EMPLEADOS&#8217;</strong><br />
Las filas van siendo retonadas a los padres hasta llegar al final.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=176&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/05/como-leer-el-plan-de-ejecucion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>
	</item>
		<item>
		<title>Creacion de la PLAN_TABLE</title>
		<link>http://sqleficiente.wordpress.com/2009/07/05/creacion-de-la-plan_table/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/05/creacion-de-la-plan_table/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 20:35:02 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Procesamiento de sentencias]]></category>
		<category><![CDATA[crear PLAN_TABLE]]></category>
		<category><![CDATA[PLAN_TABLE]]></category>
		<category><![CDATA[utlxplan]]></category>
		<category><![CDATA[utlxplan.sql]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=171</guid>
		<description><![CDATA[La PLAN_TABLE es creada automaticamente para todos los usuarios a fin de almacenar el output de la sentencia EXPLAIN PLAN. La PLAN_TABLE es la tabla de salida por defecto en la cual la sentencia EXPLAIN PLAN inserta las filas que describen el plan de ejecucion seleccionado por el generador de planes del optimizador de una [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=171&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_234" class="wp-caption alignright" style="width: 112px"><img class="size-full wp-image-234" title="Tres musicos - Pablo Picasso" src="http://sqleficiente.files.wordpress.com/2009/07/tres-musicos-pablo-picasso.jpg?w=460" alt="Tres musicos - Pablo Picasso"   /><p class="wp-caption-text">Tres musicos - Pablo Picasso</p></div>
<p>La PLAN_TABLE es creada automaticamente para todos los usuarios a fin de almacenar el output de la sentencia EXPLAIN PLAN. La PLAN_TABLE es la tabla de salida por defecto en la cual la sentencia EXPLAIN PLAN inserta las filas que describen el plan de ejecucion seleccionado por el generador de planes del optimizador de una base de datos Oracle.</p>
<p>Si bien la tabla PLAN_TABLE es creada automaticamente para cada usuario, es posible utilizar el script utlxplan.sql para crear manualmente una tabla local dentro de un esquema determinado. El nombre y ubicacion exacta del script utlxplan.sql depende de cada sistema operativo. En Unix, esta ubicado en $ORACLE_HOME/rdbms/admin. En general la ejecucion de utlxplan.sql es llevada adelante por el DBA ya que dicho script esta ubicado en un directorio local al servidor de la base de datos.</p>
<p>Por ejemplo, para ejecutar el script desde SQL*Plus:</p>
<pre>CONNECT usuario/password
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
Table created.</pre>
<p>Si por algun motivo se desea crear la tabla con otro nombre, es posible ejecutar utlxplan.sql y luego renombrar la tabla con la sentencia RENAME:</p>
<pre>RENAME PLAN_TABLE TO mi_plan_table;</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=171&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/05/creacion-de-la-plan_table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/tres-musicos-pablo-picasso.jpg" medium="image">
			<media:title type="html">Tres musicos - Pablo Picasso</media:title>
		</media:content>
	</item>
		<item>
		<title>El comando EXPLAIN PLAN</title>
		<link>http://sqleficiente.wordpress.com/2009/07/05/el-comando-explain-plan/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/05/el-comando-explain-plan/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 20:10:22 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Procesamiento de sentencias]]></category>
		<category><![CDATA[EXPLAIN PLAN]]></category>
		<category><![CDATA[plan de ejecucion]]></category>
		<category><![CDATA[PLAN TABLE]]></category>
		<category><![CDATA[PLAN_TABLE]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=167</guid>
		<description><![CDATA[Para ejecutar una sentencia SQL Oracle necesita llevar adelante varios pasos. Cada uno de estos pasos recupera fisicamente de la base filas de datos o los prepara de alguna manera para entregarlos al usuario que ejecuto la sentencia. La combinacion de pasos que Oracle lleva adelante para ejecutar una sentencia constituye el plan de ejecucion. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=167&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para ejecutar una sentencia SQL Oracle necesita llevar adelante varios pasos. Cada uno de estos pasos recupera fisicamente de la base filas de datos o los prepara de alguna manera para entregarlos al usuario que ejecuto la sentencia. La combinacion de pasos que Oracle lleva adelante para ejecutar una sentencia constituye el plan de ejecucion.</p>
<p>¿Como visualizamos dicho plan de ejecucion? La sentencia EXPLAIN PLAN permite examinar el plan de ejecucion determinado por el optimizador. Cuando se ejecuta EXPLAIN PLAN el optimizador selecciona un plan de ejecucion y lo inserta en una tabla de la base de datos. Para visualizar el plan de ejecucion simplemente hay que ejecutar el comando EXPLAIN PLAN y luego hacer un query sobre la tabla de salida.</p>
<p>Los pasos basicos para utilizar la sentencia EXPLAIN PLAN son:</p>
<ol>
<li>Crear la tabla de salida denominada PLAN_TABLE con el script UTLXPLAN.SQL</li>
<li>Incluir la clausula EXPLAIN PLAN antes de la sentencia SQL cuyo plan se pretende visualizar.</li>
<li>Una vez ejecutada la sentencia con la clausula EXPLAIN PLAN, visualizar la tabla PLAN_TABLE con alguno de los scripts o packages provistos por Oracle para tal fin. Existen otras herramientas para visualizar planes de ejecucion, Productos como TOAD o SqlDeveloper ofrecen dicha posibilidad facilmente a traves de opciones de menu.</li>
</ol>
<p>En general, la creacion de la PLAN_TABLE es realizada por el DBA. Para crearla, el administrador de base de datos suele ejecutar en forma manual el script utlxplan.sql. El nombre y ubicacion exacto de dicho script depende del sistema operativo. En Unix esta ubicado en el directorio $ORACLE_HOME/rdbms/admin.</p>
<p>Por ejemplo, estando conectado desde el mismo servidor de base de datos,</p>
<pre>CONNECT usuario/password
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
Table created.</pre>
<p>Una vez creada la PLAN_TABLE, es posible obtener un plan de ejecucion anteponiendo la clausula EXPLAIN PLAN FOR inmediatamente antes de la sentencia. Por ejemplo:</p>
<pre>EXPLAIN PLAN FOR
  SELECT empleado_apellido FROM empleados;</pre>
<p>La ejecucion de esta sentencia inserta el plan de ejecucion en la tabla PLAN_TABLE.</p>
<p>Por ultimo, se puede consultar la PLAN_TABLE utilizando alguno de los siguientes scripts o packages provistos por Oracle para obtener el plan de ejecucion mas reciente:</p>
<ul>
<li>Script UTLXPLS.SQL</li>
<li>Script UTLXPLP.SQL</li>
<li>Funcion DBMS_XPLAN.DISPLAY</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=167&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/05/el-comando-explain-plan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>
	</item>
		<item>
		<title>Que es el plan de ejecucion?</title>
		<link>http://sqleficiente.wordpress.com/2009/07/04/que-es-el-plan-de-ejecucion/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/04/que-es-el-plan-de-ejecucion/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 20:42:23 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Procesamiento de sentencias]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=164</guid>
		<description><![CDATA[Una sentencia SQL submitida por un usuario se puede ejecutar de varias maneras diferentes. Por ejemplo, una sentencia sencilla podria resolverse recorriendo una tabla completa o accediendo por un indice. El optimizador de sentencias, que es parte del motor de base de datos Oracle, es quien determina la forma mas eficiente para ejecutar una sentencia [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=164&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_216" class="wp-caption alignright" style="width: 111px"><img class="size-full wp-image-216" title="Mujer de rojo y verde - Fernand Leger" src="http://sqleficiente.files.wordpress.com/2009/07/mujer-de-rojo-y-verde-fernand-leger.jpg?w=460" alt="Mujer de rojo y verde - Fernand Leger"   /><p class="wp-caption-text">Mujer de rojo y verde - Fernand Leger</p></div>
<p>Una sentencia SQL submitida por un usuario se puede ejecutar de varias maneras diferentes. Por ejemplo, una sentencia sencilla podria resolverse recorriendo una tabla completa o accediendo por un indice. El optimizador de sentencias, que es parte del motor de base de datos Oracle, es quien determina la forma mas eficiente para ejecutar una sentencia SQL. Para determinar la forma mas eficiente, el optimizador debe considerar diversos factores relacionados con los objetos referenciados y las condiciones especificadas en el query. La eleccion de la forma en que se resolvera una sentencia constituye un paso muy importante en el procesamiento de una sentencia SQL dado que tiene un efecto muy importante en el tiempo de ejecucion.</p>
<p><strong>La forma en que Oracle resolvera la sentencia constituye el plan de ejecucion</strong>. Podriamos decir que el optimizador recibe como input una sentencia SQL y luego de determinar la forma mas eficiente para ejecutarlo devolvera como output un plan de ejecucion. <strong>Dicho plan describe el metodo optimo para la resolucion de la sentencia</strong>.</p>
<p><strong>El plan de ejecucion es una combinacion de pasos que llevara adelante Oracle para ejecutar una sentencia SQL</strong>.</p>
<p>Para determinar el plan de ejecucion de una sentencia SQL, el optimizador debe considerar varios factores. En primer lugar debe evaluar todas las expresiones y condiciones. En el caso de queries complejos que involucran vistas o subqueries correlacionados, el optimizador puede llegar a hacer una transformacion de la sentencia original. Tambien debe elegir los metodos de acceso, es decir que para cada tabla presente en la sentencia debe determinar como acceder para obtener los datos del modo mas eficiente. Por ultimo, el optimizador debe seleccionar el orden en que hara el join de las tablas. Si por ejemplo el query tiene tres tablas, el optimizador debe seleccionar las dos que joineara primero para luego hacer un nuevo join de la tercer tabla con el resultado del join anterior.</p>
<p>Como se puede apreciar, la seleccion del plan de ejecucion no es una tarea sencilla. Es una actividad que demanda recursos y tiempo. Como explicamos en el post <a title="Parseo" href="http://sqleficiente.wordpress.com/2009/06/30/parseo/" target="_self">parseo</a>, la determinacion del plan de ejecucion se realiza en la fase de parsing y es la parte mas costosa de dicha etapa; en algunas ocasiones, incluso puede llegar a demorar mas tiempo que la misma ejecucion de la sentencia.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=164&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/04/que-es-el-plan-de-ejecucion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/mujer-de-rojo-y-verde-fernand-leger.jpg" medium="image">
			<media:title type="html">Mujer de rojo y verde - Fernand Leger</media:title>
		</media:content>
	</item>
		<item>
		<title>Variables de binding (bind variables)</title>
		<link>http://sqleficiente.wordpress.com/2009/07/01/variables-de-binding-bind-variables/</link>
		<comments>http://sqleficiente.wordpress.com/2009/07/01/variables-de-binding-bind-variables/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 21:32:25 +0000</pubDate>
		<dc:creator>Fernando Garcia</dc:creator>
				<category><![CDATA[Procesamiento de sentencias]]></category>
		<category><![CDATA[bind variables]]></category>
		<category><![CDATA[oracle bind variables]]></category>
		<category><![CDATA[variables de binding]]></category>

		<guid isPermaLink="false">http://sqleficiente.wordpress.com/?p=148</guid>
		<description><![CDATA[A lo largo de los posts acerca del procesamiento de sentencias SQL hemos mencionado las variables de binding, tambien llamadas bind variables. Sin embargo, todavia no hemos dicho de que se tratan especificamente estas bind variables. En este post tratare de aclarar este concepto. Antes de avanzar especificamente en el concepto de bind variable es importante [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=148&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_224" class="wp-caption alignright" style="width: 112px"><img class="size-full wp-image-224" title="La travesia dificil - Rene Magritte" src="http://sqleficiente.files.wordpress.com/2009/07/la-travesia-dificil-rene-magritte.jpg?w=460" alt="La travesia dificil - Rene Magritte"   /><p class="wp-caption-text">La travesia dificil - Rene Magritte</p></div>
<p>A lo largo de los posts acerca del procesamiento de sentencias SQL hemos mencionado las variables de binding, tambien llamadas bind variables. Sin embargo, todavia no hemos dicho de que se tratan especificamente estas bind variables. En este post tratare de aclarar este concepto.</p>
<p>Antes de avanzar especificamente en el concepto de bind variable es importante recordar las etapas involucradas en la ejecucion de una sentencia SQL (<a title="parseo" href="http://sqleficiente.wordpress.com/2009/06/30/parseo/" target="_self">parse</a>, <a title="Binding" href="http://sqleficiente.wordpress.com/2009/06/30/binding/" target="_self">bind</a>, <a title="Ejecucion" href="http://sqleficiente.wordpress.com/2009/06/30/ejecucion/" target="_self">execute</a> y <a title="Fetch" href="http://sqleficiente.wordpress.com/2009/06/30/fetch/" target="_self">fetch</a>) como asi tambien el concepto de <a title="Cursor" href="http://sqleficiente.wordpress.com/2008/07/12/que-es-un-cursor-y-para-que-sirve/" target="_self">cursor</a>. Normalmente el desarrollador hace un uso implicito de los cursores y de las etapas de una sentencia a traves de APIs. Entre las APIs que frecuentemente utilizan los desarrolladores podemos mencionar ODP, JDBC, PL/SQL, etc.</p>
<p>Como dijimos en el post <a title="Como escribir codigo para compartir cursores" href="http://sqleficiente.wordpress.com/2009/07/01/como-escribir-codigo-sql-para-compartir-cursores/" target="_self">&#8220;Como escribir código para compartir cursores</a>&#8220;, solamente las sentencias SQL completamente identicas son reconocidas como tales cuando el parser de SQL consulta la library cache en busca de cursores para compartir. En consecuencia las sentencias</p>
<pre>select * from empleado where empno=1234
y
select * from empleado where empno=5678</pre>
<p>seran consideradas diferentes. Ejecutar estas dos sentencias implicara dos parseos diferentes y dos entradas diferentes en la <a title="La shared pool" href="http://sqleficiente.wordpress.com/2008/08/10/la-shared-pool/" target="_self">library cache</a>. Sin embargo, estas sentencias hacen lo mismo; la unica diferencia radica en el valor.</p>
<p>Para evitar estas duplicidades, las aplicaciones deben utilizar algun mecanismo de variables que tome los valores reales en tiempo de ejecucion. La sentencia SQL deberia ser del tipo:</p>
<pre>select * from emp where empno=:x</pre>
<p>para que pueda ser ejecutada multiples veces con diferentes valores para la variable :x.</p>
<p>Una aplicacion bien diseñada haria un solo parse de esta sentencia y repetiria la ejecucion tantas veces como sea necesario con distintos valores para la variable de bind que utilice en el programa de la aplicacion. Esta forma de programar no solo hace que un simple programa funcione mejor sino que tambien asegura la escalabilidad cuando se ejecuten multiples instancias concurrentes del mismo programa compartiendo el mismo codigo SQL en la library cache. Esta ha sido siempre la recomendacion de Oracle para la programacion de aplicaciones.</p>
<p>Hay dos formas que las diversas APIs (ODBC, JDBC, PL/SQL) utilizan para hacer binding: por valor o por referencia. Cuando el binding se hace por valor se debe proveer el valor de todas las variables que estan en la sentencia SQL antes de cada ejecucion. Cuando el binding es por referencia, se utilizan las direcciones de memoria de las variables con los valores reales.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sqleficiente.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sqleficiente.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sqleficiente.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sqleficiente.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sqleficiente.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sqleficiente.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sqleficiente.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sqleficiente.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqleficiente.wordpress.com&amp;blog=3181919&amp;post=148&amp;subd=sqleficiente&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqleficiente.wordpress.com/2009/07/01/variables-de-binding-bind-variables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/02a407090d1f1e1fe5f5b8273686be5a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Oracle RAC Notes</media:title>
		</media:content>

		<media:content url="http://sqleficiente.files.wordpress.com/2009/07/la-travesia-dificil-rene-magritte.jpg" medium="image">
			<media:title type="html">La travesia dificil - Rene Magritte</media:title>
		</media:content>
	</item>
	</channel>
</rss>
