<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8107960283713266625</id><updated>2011-12-24T02:21:00.856-06:00</updated><category term='apache'/><category term='mod_ssl'/><category term='sistemas'/><category term='administración'/><category term='productividad'/><category term='Linux'/><category term='cultura'/><category term='seguridad'/><category term='multitarea'/><category term='ssl'/><category term='Solaris'/><category term='procrastinación'/><category term='sociedad'/><category term='Ideología'/><category term='Sistemas Operativos'/><category term='ssh'/><category term='Windows'/><category term='Oracle'/><title type='text'>BLOG-A-TECH</title><subtitle type='html'>revisiones, comentarios u opiniones sobre sistemas</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-5814082305229563495</id><published>2010-08-24T12:13:00.000-05:00</published><updated>2010-08-24T12:13:35.010-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideología'/><title type='text'>Piensa</title><content type='html'>&lt;div style="text-align: justify;"&gt;Leyendo el libro de Tom Kyte "Expert Oracle Database Architecture, Segunda Edición", me pareció excelente el prefacio escrito por Ken Jacobs en el cual escribe sobre cómo una palabra usada en 1914 por Thomas J. Watson para transmitirles una idea a los trabajadores en IBM, no importando su puesto, teniendo cuidado en la toma de desiciones además de hacer el trabajo con inteligencia.&lt;br /&gt;&lt;br /&gt;Jacobs hace énfasis sobre la "experiencia convencional" que existe en la comunidad Oracle sobre como optimizar para un mejor rendimiento o la mejor manera de usar varias características de Oracle. Esta experiencia que algunas veces se vuelve folclore o incluso mito y que tanto desarrolladores como administradores de bases de datos aplican ciegamente o van más allá pero sin razonamiento alguno.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Un ejemplo de lo anterior es la idea de "si uno es bueno, más -muchos más- son mejor". La idea es popular, pero no siempre cierta. La interfaz de arreglo de Oracle, por ejemplo, que permite a los desarrolladores insertar o extraer varios registros con una sola llamada reduciendo asi el número de mensajes de red entre la aplicación y la base de datos lo cual es bueno. Pero si lo analizas, hay un punto en el que el rendimiento decrece. Es mucho mejor transportar 100 registros a la vez que 1,000 ya que para este último caso el método ya no es eficiente, especialmente por requerimientos de memoria.&lt;br /&gt;&lt;br /&gt;Otro ejemplo es cuando se enfoca en aspectos equivocados del diseño o configuración del sistema, en lugar de aquellos en los que se puede mejorar el rendimiento (o, si es el caso, confiabilidad, disponibilidad o seguridad). Considera la experiencia convencional de optimizar el sistema para maximizar el 'buffer hit ratio'. Para algunas aplicaciones, es verdad que maximizar la oportunidad de que el sistema encuentre los datos en memoria aumentará el rendimiento. Sin embargo, en la mayoría de sistemas lo mejor es enfocarse en los cuellos de botella (lo que en el argot de Oracle se conocen como "wait states"), en lugar de centrarse en indicadores específicos. Atacarlas desde el diseño asegurará que el sistema tenga un buen desempeño.&lt;br /&gt;&lt;br /&gt;A veces, buenas prácticas que se basaban, en parte, en un grado de certeza ya no aplican cuando los hechos cambian. Considera el viejo adagio, "poner índices y datos en distintos tablespaces para un mejor rendimiento". Hay administradores de base de datos que defienden a capa y espada esta idea sin tomar en consideración cambios en la velocidad de los discos y su capacidad, o lo relacionado con cargas de trabajo. Al evaluar esta "regla", se debería pensar en el &lt;i&gt;hecho&lt;/i&gt; de que Oracle carga en memoria los bloques de base de datos usados recientemente y con frecuencia (a menudo bloques que pertenecen a un índice), y en el &lt;i&gt;hecho&lt;/i&gt; de que hace uso de estos bloques de manera secuencial, no simultánea, para cualquier petición. Esto implica que las operaciones de I/O tanto para índices como para datos deberían repartirse entre todos los usuarios simultáneos y repartirse en todos los discos de los que se pueda disponer. Puedes elegir separar índices y datos por razones administrativas o por preferencia personal, pero no por rendimiento. Lo importante de esto es basar las decisiones en hechos, bastantes hechos.&lt;br /&gt;&lt;br /&gt;No importa que tan veloces sean nuestras computadoras o que tan sofisticada pueda llegar a ser la base de datos, e independientemente del poder de nuestras herramientas de programación, simplemente no hay sustituto para la inteligencia humana acompañada con una "disciplina pensante". Si bien es importante aprender las complejidades de las tecnologías que usamos en nuestras aplicaciones, es aún más importante saber como pensar en darles el uso apropiado.&lt;br /&gt;&lt;br /&gt;El libro de Tom no solo enseña sobre características de Oracle y como usarlas, también refleja muchos de estos pensamientos sencillos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No creas en mitos. Razona por tí mismo.&lt;/li&gt;&lt;li&gt;No te vayas con la experiencia convencional. ¡A menudo las cosas que todo mundo sabe simplemente están mal!&lt;/li&gt;&lt;li&gt;Desconfia de los rumores u opiniones. Prueba las cosas tu mismo y fundamenta tus decisiones en ejemplos hechos.&lt;/li&gt;&lt;li&gt;Divide el problema en preguntas simples y arma las respuestas a cada paso en una solución elegante y eficiente.&lt;/li&gt;&lt;li&gt;No ejecutes cosas en tus programas cuando la base de datos las puede hacer mejor y más rápido.&lt;/li&gt;&lt;li&gt;Investiga sobre el tema y se escéptico de políticas injustificadas en la empresa para estándares técnicos.&lt;/li&gt;&lt;li&gt;Tómate el tiempo para PENSAR.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Aunado a esto, yo agregaría además los consejos de &lt;a href="http://sartigas.blogspot.com/2009/10/algunos-consejos-1ra-parte.html"&gt;Steven Feuerstein&lt;/a&gt; que publiqué hace unos posts atrás. Si bien es cierto que lo ideal siempre es tener el tiempo y el equipo para hacer todas las pruebas que se necesitan la realidad es que pocas veces se tienen, muchas veces quizá por la falta de tiempo muchos se quedan con la idea de que lo que vieron que a otros les funcionó también funcionará para ellos y posiblemente así sea, sin embargo, con tantas combinaciones en cuanto a Oracle como base de datos, sistemas operativos y hardware, se podría tomar como base ese conocimiento pero queda de uno el probar que efectivamente será la solución del problema.&lt;br /&gt;&lt;br /&gt;Una vez que tienes como solucionar el problema es importante ver también las implicaciones hacia los demás ya que en lugar de solucionarlo podrías estarlo solo cambiando de lugar.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-5814082305229563495?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/5814082305229563495/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/08/piensa.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5814082305229563495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5814082305229563495'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/08/piensa.html' title='Piensa'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-5360166034296430350</id><published>2010-08-16T18:03:00.000-05:00</published><updated>2010-08-16T18:03:40.756-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>ORA-01220: file based sort illegal before database is open</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;Hace unos días trabajando con RMAN me topé con el mensaje descrito en el título. Se trataba de una base aún preproductiva y menor de 50 Gb de tamaño con un poco más de 30 datafiles. La actividad en ese momento consistía en restaurar los más de 30 datafiles junto con los control files, es decir, se simuló el peor escenario donde "todos" los archivos de base de datos se pierden. Con todos entre comillas me refiero solo a los archivos que se pueden restaurar desde RMAN, ya que la base incluye otros archivos más que no se consideran críticos para echar a andar un respaldo.&lt;br /&gt;&lt;br /&gt;El mensaje completo es:&lt;br /&gt;&lt;div class="code_block"&gt;RMAN-00571: ===========================================================&lt;br /&gt;RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============&lt;br /&gt;RMAN-00571: ===========================================================&lt;br /&gt;RMAN-03002: failure of restore command at 08/11/2010 16:36:39&lt;br /&gt;ORA-01220: file based sort illegal before database is open&lt;/div&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Después de eliminar los control files junto con los más de 30 datafiles del filesystem, el comando para restaurarlos desde RMAN simplemente arrojó el mensaje anterior.&lt;br /&gt;&lt;br /&gt;De acuerdo con la documentación de Oracle, el mensaje &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ORA-01220&lt;/span&gt; se refiere a que se intentó ejecutar una consulta pero el buffer (memoria) para realizar ordenamientos no es lo suficientemente grande para llevarlo a cabo. Se trata específicamente de los parámetros &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SORT_AREA_SIZE&lt;/span&gt; y &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SORT_AREA_RETAINED_SIZE&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="code_block"&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUE&lt;br /&gt;------------------------- -------- -------&lt;br /&gt;nls_sort&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;br /&gt;sort_area_retained_size&amp;nbsp;&amp;nbsp;&amp;nbsp;integer&amp;nbsp;&amp;nbsp;0&lt;br /&gt;sort_area_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;integer&amp;nbsp;&amp;nbsp;65536&lt;/div&gt;&lt;br /&gt;Por default en 10g, el parámetro &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SORT_AREA_SIZE&lt;/span&gt; tiene un valor de 64K y el parámetro &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SORT_AREA_RETAINED_SIZE&lt;/span&gt; tiene 0, puesto que RMAN requiere hacer un ordenamiento pero el tamaño del buffer no le alcanza para hacerlo, acude al segundo recurso que es el &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;TEMP&lt;/span&gt; (tablespace temporal), sin embargo, como la base de datos en este momento solo se encuentra en estado &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;MOUNT&lt;/span&gt; no es posible utilizar el TEMP, de ahí que el único recurso sea aumentar el valor de esos dos parámetros.&lt;br /&gt;&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt; alter system set sort_area_size=10485760 scope=spfile;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; alter system set sort_area_retained_size=10485760 scope=spfile;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; shutdown immediate;&lt;br /&gt;ORA-01109: database not open&lt;br /&gt;&lt;br /&gt;Database dismounted.&lt;br /&gt;ORACLE instance shut down.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; startup mount;&lt;br /&gt;ORACLE instance started.&lt;br /&gt;&lt;br /&gt;Database mounted.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; show parameter sort&lt;br /&gt;&lt;br /&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUE&lt;br /&gt;------------------------- -------- -------&lt;br /&gt;nls_sort&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&lt;br /&gt;sort_area_retained_size&amp;nbsp;&amp;nbsp;&amp;nbsp;integer&amp;nbsp;&amp;nbsp;10485760&lt;br /&gt;sort_area_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;integer&amp;nbsp;&amp;nbsp;10485760&lt;/div&gt;&lt;br /&gt;10 Mb deberían ser suficientes para lanzar el restore sin problemas. Una vez recuperado el respaldo y comprobado que la instancia abre sin problemas es necesario regresar los parámetros con sus valores originales. Como dba no lleva mucho tiempo darse cuenta de qué se trata y su posible solución, como implementador de soluciones de respaldo sin conocimientos profundos en RMAN u Oracle, como por ejemplo Data Protector de HP o Avamar de EMC que crean scripts personalizados para lanzarlos desde Recovery Manager, podría ser un dolor de cabeza ya que no tienen acceso para modificar parámetros -que de hecho no deberían hacerlo, solo previa autorización- o peor aún tardarse horas o días en encontrar de qué se trata el problema y aplicar la posible solución.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-5360166034296430350?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/5360166034296430350/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/08/ora-01220-file-based-sort-illegal.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5360166034296430350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5360166034296430350'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/08/ora-01220-file-based-sort-illegal.html' title='ORA-01220: file based sort illegal before database is open'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2465261550363029497</id><published>2010-08-09T17:13:00.001-05:00</published><updated>2010-08-09T17:16:21.932-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><title type='text'>Y tu, ¿Qué aplicaciones Open Source usas?</title><content type='html'>&lt;div style="text-align: justify;"&gt;Todas las aplicaciones que instalamos en nuestras computadoras cuentan con un licenciamiento, comenzando por el sistema operativo. Las licencias van desde las que tienes que pagar recibiendo unicamente copia de los ejecutables hasta las que son libres (no confundir con gratis) y te dan acceso al código fuente.&lt;br /&gt;&lt;br /&gt;La gran diferencia entre el software "gratis" y el de "código abierto" es que el primero va implícito en el segundo pero en el segundo tienes la oportunidad de ver como es la aplicación por dentro, es decir, su código fuente. Como usuario final lo más importante es aprovechar al máximo la facilidad de uso que te brinda una aplicación, como desarrollador es interesante ver como son aplicadas diversas técnicas de programación, desde la forma de escribir el código hasta el empleo de paradigmas computacionales tanto simples como avanzados.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Las aplicaciones Open Source de uso cotidiano que no pueden faltar en mi máquina:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mozilla.com/en-US/products/firefox/"&gt;Firefox&lt;/a&gt; - No necesita descripción.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mozilla.com/en-US/products/thunderbird/"&gt;Thunderbird&lt;/a&gt; - Excelente cliente de correo.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.workrave.org/"&gt;Workrave&lt;/a&gt; - Te ayuda a hacer pausas en el uso de la computadora. Excelente para quienes pasan periodos largos de tiempo frente a una.&lt;/li&gt;&lt;li&gt;&lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; - Excelente editor de texto, con muchas y muy útiles opciones.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.winscp.org/"&gt;WinSCP&lt;/a&gt; - Mejor y más completo cliente para transferencia de archivos que Filezilla (para mi gusto claro).&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/pdfcreator"&gt;PDFCreator&lt;/a&gt; - Excelente aplicación para crear archivos PDF via una impresora virtual, con muchas otras opciones de formatos de salida, no solo PDF. Muy recomendable para esas ocasiones en que necesitas guardar páginas web.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cygwin.com"&gt;Cygwin&lt;/a&gt; - Emulador de comandos Linux para Windows. Recomendable para los administradores que no temen a la línea de comandos.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.privoxy.org"&gt;Privoxy&lt;/a&gt; - ¿Cansado de ver sitios web donde lo que más resalta (y en osaciones estorba) es la publicidad? Con esta aplicación te olvidarás de toda esa basura visual.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gimp.org"&gt;GIMP&lt;/a&gt; - Excelente aplicación para manipular imágenes.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bunkus.org/videotools/mkvtoolnix"&gt;MKVToolnix&lt;/a&gt; - Excelente herramienta para manipular archivos tipo Matroska.&lt;/li&gt;&lt;li&gt;&lt;a href="htt://www.jubler.org"&gt;Jubler&lt;/a&gt; - Muy buena aplicación para editar archivos de subtítulos (SRT) aunque podría ser todavía mejor.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sharpdevelop.com"&gt;SharpDevelop&lt;/a&gt; - Muy buena IDE para programar en C#, entre otros lenguajes de programación de la plataforma .NET&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/mpc-hc/"&gt;Media Player Classic - Home Cinema&lt;/a&gt; - Reproductor multimedia con soporte para varios formatos multimedia.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2465261550363029497?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2465261550363029497/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/08/y-tu-que-aplicaciones-open-source-usas.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2465261550363029497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2465261550363029497'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/08/y-tu-que-aplicaciones-open-source-usas.html' title='Y tu, ¿Qué aplicaciones Open Source usas?'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-4087320275158173576</id><published>2010-08-06T08:00:00.002-05:00</published><updated>2010-08-16T20:44:39.500-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Transporte de datos encriptados con ASO</title><content type='html'>&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5364399772137510626" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" style="float: right; height: 100px; margin: 5px 0px 0px 10px; width: 200px;" /&gt;&lt;div style="text-align: justify;"&gt;Por default, la comunicación entre la base de datos y un cliente remoto se lleva a cabo sin ningún método de encriptamiento, es decir, que todas las instrucciones ejecutadas así como los datos pueden ser interceptados por alguien que esté a la escucha en la red usando un 'sniffer'. En empresas donde se maneja información confidencial el riesgo de fuga es muy alto por lo que alguien con habilidades en reconocimiento de patrones podría fácilmente hacerse de esta información.&lt;br /&gt;&lt;br /&gt;Oracle tiene una funcionalidad llamada 'Oracle Advanced Security' la cual es necesario configurar tanto en el servidor como en el cliente. Esta configuración se hace en el archivo &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sqlnet.ora&lt;/span&gt; por lo que no es necesario alterar las aplicaciones ni reiniciar la instancia. Las conexiones remotas hechas después de la configuración ya estarán empleando el método de encriptamiento que se haya definido no así las conexiones ya existentes.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;En el esquema &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SCOTT&lt;/span&gt; tengo la tabla &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;CUSTOMER&lt;/span&gt; con la siguiente definición y datos:&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt; select name,credit_card from scott.customer;&lt;br /&gt;&lt;br /&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CREDIT_CARD&lt;br /&gt;-------- --------------------&lt;br /&gt;sergio&amp;nbsp;&amp;nbsp;&amp;nbsp;1234-1234-1234-1234&lt;br /&gt;pedro&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1234-1234-1234-1235&lt;br /&gt;juan&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1234-1234-1234-1236&lt;/div&gt;&lt;br /&gt;Usando la herramienta &lt;a href="http://erwan.l.free.fr/"&gt;IP Tools&lt;/a&gt; como 'sniffer' y aplicándolo al query anterior obtenemos lo siguiente.&lt;br /&gt;&lt;br /&gt;La definición:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs72y5JuGI/AAAAAAAAAMA/n091E_M-qvw/s1600/snif1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs72y5JuGI/AAAAAAAAAMA/n091E_M-qvw/s320/snif1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;y el resultado:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_t1WQBJYuFhI/TFs9Z-vSjnI/AAAAAAAAAMI/Z2_L29mZrK4/s1600/snif2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/TFs9Z-vSjnI/AAAAAAAAAMI/Z2_L29mZrK4/s320/snif2.jpg" /&gt;&lt;span id="goog_1010877947"&gt;&lt;/span&gt;&lt;span id="goog_1010877948"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_t1WQBJYuFhI/TFs9fz-oVcI/AAAAAAAAAMQ/F7H_D0URbwk/s1600/snif3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/TFs9fz-oVcI/AAAAAAAAAMQ/F7H_D0URbwk/s320/snif3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Además de muchos caracteres conocidos y otro tanto extraños, vemos que se logra distinguir a simple vista los nombres 'sergio', 'pedro', 'juan' acompañados de sus números de tarjetas de crédito. En un ambiente productivo esta situación por supuesto que no es aceptable.&lt;br /&gt;&lt;br /&gt;He aquí donde entra en juego la seguridad a través de encriptamiento.&lt;br /&gt;&lt;br /&gt;Usando la herramienta 'Oracle Net Manager' expandes el nodo 'Local' y seleccionas 'Profile'. En la parte superior del panel derecho abres el 'combo box' y seleccionas 'Oracle Advanced Security'.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_t1WQBJYuFhI/TFtAhYBtK5I/AAAAAAAAANQ/9b6sJJPcAbU/s1600/netmgr.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/TFtAhYBtK5I/AAAAAAAAANQ/9b6sJJPcAbU/s320/netmgr.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Si la opción 'Oracle Advanced Security' no aparece desplegada, tendrás que hacer lo siguiente. Edita el archivo &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;NetProperties&lt;/span&gt; del directorio &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ORACLE_HOME/network/tools&lt;/span&gt;, y agrega "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ASO&lt;/span&gt;" al final de la línea que comienza con "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;INSTALLEDCOMPONENTS&lt;/span&gt;".&lt;br /&gt;&lt;div class="code_block"&gt;INSTALLEDCOMPONENTS=CLIENT,ORACLENET,ANO,ASO&lt;/div&gt;&lt;br /&gt;Cierra el 'Oracle Net Manager' y ejecútalo nuevamente, la opción 'Oracle Advanced Security' ya debería aparecer.&lt;br /&gt;&lt;br /&gt;Selecciona la pestaña 'Integrity', en el item 'Integrity' selecciona "SERVER", en 'Checksum Level' selecciona "requested" y en la lista 'Available Methods' selecciona "MD5" y presiona el botón con '&amp;gt;'&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs_D0MdIAI/AAAAAAAAAMw/3FBZg8snfME/s1600/integrity_server.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs_D0MdIAI/AAAAAAAAAMw/3FBZg8snfME/s320/integrity_server.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Después selecciona la pestaña 'Encryption', en el item 'Encryption' selecciona "SERVER", en 'Encryption Type' selecciona "requested", en 'Encryption Seed' escribe una cadena lo suficientemente larga que servirá para hacer el cifrado y en la lista 'Available Methods' selecciona "3DES168" y presiona el botón con '&amp;gt;'&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_t1WQBJYuFhI/TFs_JvoxHvI/AAAAAAAAAM4/c2xsBpk9yic/s1600/encryption_server.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/TFs_JvoxHvI/AAAAAAAAAM4/c2xsBpk9yic/s320/encryption_server.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La configuración en cada uno de los clientes es básicamente la misma, solo tienes que cambiar el valor de los items 'Integrity' y 'Encryption' de "SERVER" a "CLIENT" y especificar en 'Encryption Seed' una cadena totalmente distinta a la del servidor.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs_PDTEHBI/AAAAAAAAANA/k6TMnM2CMdc/s1600/integrity_client.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs_PDTEHBI/AAAAAAAAANA/k6TMnM2CMdc/s320/integrity_client.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="http://4.bp.blogspot.com/_t1WQBJYuFhI/TFs_WBbmI4I/AAAAAAAAANI/IeBRLdz2sho/s1600/encryption_client.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/TFs_WBbmI4I/AAAAAAAAANI/IeBRLdz2sho/s320/encryption_client.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;No olvides grabar las configuraciones hechas en 'Oracle Net Manager' (File -&amp;gt; Save Network Configuration), luego cuando se nos olvida nos preguntamos por qué no funciona e incluso se llega a buscar una solución más allá del problema, suele pasar :) .&lt;br /&gt;&lt;br /&gt;Finalmente, para probar que todo funciona correctamente hay que cerrar la sesión de SQL*Plus, abrir una nueva, habilitar el 'sniffer' y ejecutar el query sobre la tabla scott.customer nuevamente.&lt;br /&gt;&lt;br /&gt;Vemos ahora que solo aparece un conjunto de caracteres sin sentido y no es posible ver la definición:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs-o71l7II/AAAAAAAAAMY/wqrttHdAolc/s1600/snif4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/TFs-o71l7II/AAAAAAAAAMY/wqrttHdAolc/s320/snif4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;así como tampoco es posible ver ya los datos:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_t1WQBJYuFhI/TFs-vnT7X4I/AAAAAAAAAMg/t-L4FkaOUYc/s1600/snif5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/TFs-vnT7X4I/AAAAAAAAAMg/t-L4FkaOUYc/s320/snif5.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="http://4.bp.blogspot.com/_t1WQBJYuFhI/TFs-0CjuT9I/AAAAAAAAAMo/DaURtsN-RZs/s1600/snif6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/TFs-0CjuT9I/AAAAAAAAAMo/DaURtsN-RZs/s320/snif6.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Todos los métodos de encriptamiento mostrados en 'Oracle Net Manager' son estándares industriales, por lo que dependerá prácticamente del grado de encriptamiento que se requiera el que se elija cualquiera de ellos.&lt;br /&gt;&lt;br /&gt;¿Cambios en las aplicaciones? Ninguno. ¿Suspensión del servicio de base de datos? Ninguno. ¿Grado de confiabilidad? Completo.&lt;br /&gt;&lt;br /&gt;Nota: Como la mayoría de "componentes extra" que vienen con la base de datos, es posible que esta funcionalidad tenga un costo de licenciamiento extra por lo que recomendaría verificarlo antes de implementarlo en un ambiente productivo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-4087320275158173576?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/4087320275158173576/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/08/transporte-de-datos-encriptados-con-aso.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4087320275158173576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4087320275158173576'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/08/transporte-de-datos-encriptados-con-aso.html' title='Transporte de datos encriptados con ASO'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2633606173889119780</id><published>2010-08-04T11:25:00.001-05:00</published><updated>2010-08-04T11:27:28.612-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Obteniendo DDLs con Oracle export/import y Pretoria</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;Una manera rápida y elegante de extraer las instrucciones &lt;a href="http://en.wikipedia.org/wiki/Data_Definition_Language"&gt;DDL&lt;/a&gt; de la base de datos es crear un archivo dmp solo con las estructuras, extraer las instrucciones SQL con import (opción indexfile) y aplicarle formato con Pretoria.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/pretoria/"&gt;Pretoria&lt;/a&gt; es una herramienta que analiza la estructura del archivo creado con import -específicamente con la opción indexfile-. Puede buscar y reemplazar los parámetros de almacenamiento de las tablas, índices y clusters, además de separar las instrucciones de creación de tablas e índices en su propio archivo. Con estos archivos se pueden pre-crear todos los segmentos de la base de datos, básicamente para reorganizarla. Si se tiene una base de datos con cientos de tablas, hacer una reorganización manual en las instrucciones DDL llevaría mucho tiempo. Emplear Pretoria toma solo unos minutos.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Creando el archivo dmp&lt;/h3&gt;La herramienta de Oracle export básicamente lo que hace es extraer la definición de los segmentos de base de datos (tablas, índices) y los datos que contienen. Para este ejercicio usaré el esquema SCOTT creado por Oracle como parte de los esquemas de ejemplo para una base de datos 10gR2 montada en Linux RHEL 4.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Si SCOTT está bloqueado, habrá que desbloquearlo y asignarle una contraseña.&lt;br /&gt;&lt;div class="code_block"&gt;SQL&gt; alter user scott account unlock;&lt;br /&gt;&lt;br /&gt;User altered.&lt;br /&gt;&lt;br /&gt;SQL&gt; alter user scott identified by tiger;&lt;br /&gt;&lt;br /&gt;User altered.&lt;/div&gt;&lt;br /&gt;Se ejecuta el export sin segmentos de bd.&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ exp scott/tiger@orcl file=~/sch_scott.dmp owner=scott grants=n rows=n statistics=none&lt;br /&gt;&lt;br /&gt;Export: Release 10.2.0.4.0 - Production on Tue Aug 3 12:40:14 2010&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2007, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;Export done in US7ASCII character set and AL16UTF16 NCHAR character set&lt;br /&gt;server uses AL32UTF8 character set (possible charset conversion)&lt;br /&gt;Note: table data (rows) will not be exported&lt;br /&gt;Note: grants on tables/views/sequences/roles will not be exported&lt;br /&gt;. exporting pre-schema procedural objects and actions&lt;br /&gt;. exporting foreign function library names for user SCOTT &lt;br /&gt;. exporting PUBLIC type synonyms&lt;br /&gt;. exporting private type synonyms&lt;br /&gt;. exporting object type definitions for user SCOTT &lt;br /&gt;About to export SCOTT's objects ...&lt;br /&gt;. exporting database links&lt;br /&gt;. exporting sequence numbers&lt;br /&gt;. exporting cluster definitions&lt;br /&gt;. about to export SCOTT's tables via Conventional Path ...&lt;br /&gt;. . exporting table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BONUS&lt;br /&gt;. . exporting table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEPT&lt;br /&gt;. . exporting table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EMP&lt;br /&gt;. . exporting table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SALES&lt;br /&gt;. . exporting table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SALGRADE&lt;br /&gt;. . exporting table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TEST3&lt;br /&gt;. exporting synonyms&lt;br /&gt;. exporting views&lt;br /&gt;. exporting stored procedures&lt;br /&gt;. exporting operators&lt;br /&gt;. exporting referential integrity constraints&lt;br /&gt;. exporting triggers&lt;br /&gt;. exporting indextypes&lt;br /&gt;. exporting bitmap, functional and extensible indexes&lt;br /&gt;. exporting posttables actions&lt;br /&gt;. exporting materialized views&lt;br /&gt;. exporting snapshot logs&lt;br /&gt;. exporting job queues&lt;br /&gt;. exporting refresh groups and children&lt;br /&gt;. exporting dimensions&lt;br /&gt;. exporting post-schema procedural objects and actions&lt;br /&gt;. exporting statistics&lt;br /&gt;Export terminated successfully without warnings.&lt;/div&gt;&lt;br /&gt;Puedes especificar en lugar de owner=y sea full=y o incluso por tablas específicas.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Creando el archivo indexfile&lt;/h3&gt;Se crea el archivo de índices -opción indexfile- con import.&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ imp scott/tiger@orcl file=sch_scott.dmp fromuser=scott touser=scott indexfile=sch_scott.idx constraints=y&lt;br /&gt;&lt;br /&gt;Import: Release 10.2.0.4.0 - Production on Tue Aug 3 12:47:02 2010&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2007, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;Export file created by EXPORT:V10.02.01 via conventional path&lt;br /&gt;import done in US7ASCII character set and AL16UTF16 NCHAR character set&lt;br /&gt;import server uses AL32UTF8 character set (possible charset conversion)&lt;br /&gt;Import terminated successfully without warnings.&lt;/div&gt;&lt;br /&gt;El archivo resultante 'sch_scott.idx' contiene las DDL de tablas, constraints e índices. Las dos primeras aparecen como comentarios (con REM al principio de la línea) lo único legible a primera vista son las instrucciones CREATE INDEX. Es aquí donde entra en juego la herramienta Pretoria. La ejecución del import con la opción indexfile en realidad no ejecuta ninguna instrucción DDL o importa datos (en caso de usar un archivo dmp completo) lo único que hace es extraer las DDLs y almacenarlas en el archivo especificado en la opción indexfile.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Segregando instrucciones DDL&lt;/h3&gt;Pretoria es en realidad un conjunto de clases Java convertidas a este lenguaje multiplataforma para evitar los inconvenientes que representa la codificación de shell scripts en los diferentes tipos de *nix particularmente la herramienta AWK. En la parte de documentación trae una gráfica con el esquema que los desarrolladores emplearon para hacerlo eficiente.&lt;br /&gt;&lt;br /&gt;Si lo que nos interesa es extraer las instrucciones DDL tal como están, basta con ejecutar la siguiente instrucción:&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ java Pretoria -i sch_scott.idx -ot scott_tables.ddl -oi scott_indexes.ddl -nc&lt;br /&gt;Spawn input thread !&lt;br /&gt;Spawn process threads !&lt;br /&gt;Spawn output threads !&lt;br /&gt;Input thread done !&lt;br /&gt;All done !&lt;/div&gt;&lt;br /&gt;Con esto, el archivo sch_scott.idx apenas legible a primera vista es procesado y dividido en dos archivos, uno con la definición de las tablas y otro con la definición de índices y constraints.&lt;br /&gt;&lt;br /&gt;Ejemplo de código sin aplicar Pretoria:&lt;br /&gt;&lt;div class="code_block"&gt;REM  CREATE TABLE "SCOTT"."BONUS" ("ENAME" VARCHAR2(10), "JOB" &lt;br /&gt;REM  VARCHAR2(9), "SAL" NUMBER, "COMM" NUMBER) PCTFREE 10 PCTUSED 40 &lt;br /&gt;REM  INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST &lt;br /&gt;REM  GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS ;&lt;br /&gt;REM  CREATE TABLE "SCOTT"."DEPT" ("DEPTNO" NUMBER(2, 0), "DNAME" &lt;br /&gt;REM  VARCHAR2(14), "LOC" VARCHAR2(13)) PCTFREE 10 PCTUSED 40 INITRANS 1 &lt;br /&gt;REM  MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 &lt;br /&gt;REM  BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS ;&lt;/div&gt;&lt;br /&gt;Ejemplo de código aplicando Pretoria:&lt;br /&gt;&lt;div class="code_block"&gt;CREATE  TABLE "SCOTT"."BONUS"&lt;br /&gt;&amp;nbsp;&amp;nbsp;( "ENAME" VARCHAR2 ( 10 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"JOB" VARCHAR2 ( 9 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"SAL" NUMBER ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"COMM" NUMBER ) &lt;br /&gt;PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 &lt;br /&gt;STORAGE&lt;br /&gt;&amp;nbsp;&amp;nbsp;( INITIAL 65536&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELISTS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELIST GROUPS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;BUFFER_POOL DEFAULT ) TABLESPACE "USERS" LOGGING NOCOMPRESS ; &lt;br /&gt;&lt;br /&gt;CREATE  TABLE "SCOTT"."DEPT"&lt;br /&gt;&amp;nbsp;&amp;nbsp;( "DEPTNO" NUMBER ( 2 ,0 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"DNAME" VARCHAR2 ( 14 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"LOC" VARCHAR2 ( 13 ) ) &lt;br /&gt;PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 &lt;br /&gt;STORAGE&lt;br /&gt;&amp;nbsp;&amp;nbsp;( INITIAL 65536&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELISTS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELIST GROUPS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;BUFFER_POOL DEFAULT ) TABLESPACE "USERS" LOGGING NOCOMPRESS ;&lt;/div&gt;&lt;br /&gt;Ejemplo especificando archivo de parámetros.&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ java Pretoria -s storage -i sch_scott.idx -ot scott_tables.ddl -oi scott_indexes.ddl -nc&lt;br /&gt;Hashing storage parameters...&lt;br /&gt;Done !&lt;br /&gt;Spawn input thread !&lt;br /&gt;Spawn process threads !&lt;br /&gt;Spawn output threads !&lt;br /&gt;Input thread done !&lt;br /&gt;All done !&lt;/div&gt;&lt;br /&gt;El archivo parámetros debe contener lo que necesitamos actualizar en el script de salida. Para el ejemplo anterior solo especifiqué que actualice el tablespace para las tablas BONUS y DEPT:&lt;br /&gt;&lt;div class="code_block"&gt;"SCOTT"."BONUS" TABLESPACE TS1&lt;br /&gt;"SCOTT"."DEPT" TABLESPACE TS2&lt;/div&gt;&lt;br /&gt;Siendo el resultado:&lt;br /&gt;&lt;div class="code_block"&gt;CREATE  TABLE "SCOTT"."BONUS"&lt;br /&gt;&amp;nbsp;&amp;nbsp;( "ENAME" VARCHAR2 ( 10 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"JOB" VARCHAR2 ( 9 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"SAL" NUMBER ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"COMM" NUMBER ) &lt;br /&gt;PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 &lt;br /&gt;STORAGE&lt;br /&gt;&amp;nbsp;&amp;nbsp;( INITIAL 65536&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELISTS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELIST GROUPS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;BUFFER_POOL DEFAULT ) TABLESPACE &lt;b&gt;TS1&lt;/b&gt; LOGGING NOCOMPRESS ; &lt;br /&gt;&lt;br /&gt;CREATE  TABLE "SCOTT"."DEPT"&lt;br /&gt;&amp;nbsp;&amp;nbsp;( "DEPTNO" NUMBER ( 2 ,0 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"DNAME" VARCHAR2 ( 14 ) ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;"LOC" VARCHAR2 ( 13 ) ) &lt;br /&gt;PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 &lt;br /&gt;STORAGE&lt;br /&gt;&amp;nbsp;&amp;nbsp;( INITIAL 65536&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELISTS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;FREELIST GROUPS 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;BUFFER_POOL DEFAULT ) TABLESPACE &lt;b&gt;TS2&lt;/b&gt; LOGGING NOCOMPRESS ;&lt;/div&gt;&lt;br /&gt;Cambiando el tablespace de USERS a TS1 para la tabla BONUS y TS2 para DEPT.&lt;br /&gt;&lt;br /&gt;Todavía mejor aún, si vas a reorganizar la base de datos moviendo las tablas de tablespace puedes hacerlo con la siguiente línea en el archivo de parámetros:&lt;br /&gt;&lt;div class="code_block"&gt;DEFAULT_TABLE("SCOTT") TABLESPACE TS_DATA&lt;/div&gt;&lt;br /&gt;Haciendo que a todas las tablas del esquema SCOTT se les asigne el tablespace TS_DATA por default, bastante útil si se trata de cientos de tablas. Puedes incluso especificar el tablespace en tablas particulares, por ejemplo:&lt;br /&gt;&lt;div class="code_block"&gt;DEFAULT_TABLE("SCOTT") TABLESPACE TS_DATA&lt;br /&gt;"SCOTT"."BONUS" TABLESPACE TS1&lt;/div&gt;&lt;br /&gt;es decir, asigna por default a las tablas del esquema SCOTT el tablespace TS_DATA excepto a la tabla BONUS a la cual le vas a asignar TS1.&lt;br /&gt;&lt;br /&gt;Además del tablespace los parámetros que puedes especificar en el archivo para actualizar el script con estos valores están:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PCTUSED&lt;/li&gt;&lt;li&gt;PCTFREE&lt;/li&gt;&lt;li&gt;INITIAL&lt;/li&gt;&lt;li&gt;NEXT&lt;/li&gt;&lt;li&gt;MINEXTENTS&lt;/li&gt;&lt;li&gt;MAXEXTENTS&lt;/li&gt;&lt;li&gt;PCTINCREASE&lt;/li&gt;&lt;li&gt;FREELISTS&lt;/li&gt;&lt;li&gt;FREELIST GROUPS&lt;/li&gt;&lt;li&gt;INITRANS&lt;/li&gt;&lt;li&gt;MAXTRANS&lt;/li&gt;&lt;li&gt;DEGREE&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;El resto de las opciones que incluye Pretoria pueden verse ejecutando:&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ java Pretoria&lt;br /&gt;java Pretoria [-l] [-ss] [-nc] [-nv] -i &amp;lt;indexfile&amp;gt; -s &amp;lt;storagefile&amp;gt; -ot &amp;lt;table outputfile&amp;gt; -oi &amp;lt;index outputfile&amp;gt;&lt;br /&gt;java Pretoria -p [-l] [-ss][-nc] [-nv] -i &amp;lt;indexfile&amp;gt; -ot &amp;lt;table outputfile&amp;gt; -oi &amp;lt;index outputfile&amp;gt;&lt;br /&gt;java Pretoria -p [-l] [-ss] [-nc] [-nv] -o1|2 -i &amp;lt;indexfile&amp;gt; -ot &amp;lt;table outputfile&amp;gt; -oi &amp;lt;index outputdiretory&amp;gt; -oc &amp;lt;contraint outputfile&amp;gt;&lt;br /&gt;-i&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: indexfile name&lt;br /&gt;-s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: storage parameter file - not used in combination with -p switch&lt;br /&gt;-ot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: outputfile for table DDL&lt;br /&gt;-oi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: outputfile for index DDL&lt;br /&gt;-oi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: using -o1 switch - output directory for index DDL&lt;br /&gt;-oc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: using -o1 or -o2 switch - outputfile for constraint DDL&lt;br /&gt;-o1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: output mode 1&lt;br /&gt;-o2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: output mode 2&lt;br /&gt;-l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: line mode - print each DDL statement on one cowabunga line&lt;br /&gt;-p&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: pretty printing only - do not process new storage parameters&lt;br /&gt;-ss&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: strip storage clause - except for LOB's&lt;br /&gt;-nc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: no connect - do not generate CONNECT commands&lt;br /&gt;-nv&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: no validate - add NOVALIDATE in enable constraint DDL&lt;br /&gt;&lt;br /&gt;Pretoria 3c - Kurt Van Meerbeeck - www.ora600.be&lt;/div&gt;&lt;br /&gt;En la parte superior de los scripts generados por Pretoria aparece un apartado en comentarios donde los autores mencionan que antes de ejecutar el script en SQL*Plus deben activar lo siguiente 'set SQLBLANK on' ya que puede haber líneas en blanco entre las líneas de las instrucciones lo que daría lugar a errores al momento de ejecutarlo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2633606173889119780?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2633606173889119780/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/08/obteniendo-ddls-con-oracle-exportimport.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2633606173889119780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2633606173889119780'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/08/obteniendo-ddls-con-oracle-exportimport.html' title='Obteniendo DDLs con Oracle export/import y Pretoria'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-8124104885197470295</id><published>2010-08-02T12:15:00.000-05:00</published><updated>2010-08-02T12:15:19.465-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='administración'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Sin espacio en la Flash Recovery Area (FRA)</title><content type='html'>&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5364399772137510626" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" style="float: right; height: 100px; margin: 5px 0px 0px 10px; width: 200px;" /&gt;&lt;div style="text-align: justify;"&gt;Como parte del respaldo de una base de datos 10g en RHEL 4, tengo que se ejecuta uno de nivel 0 (Full) todos los domingos, incremental lunes, martes, miércoles, viernes y sábado e incremental cumulativo el jueves, todos con RMAN, sin embargo, me encuentro con el siguiente mensaje registrado en el log de ejecución del respaldo de nivel 0:&lt;br /&gt;&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ tail rman/logs/Level0-1008021002.log&lt;br /&gt;piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2010_08_02/o1_mf_nnnd0_WEEKLY_BACKUP_65fqjdjj_.bkp tag=WEEKLY_BACKUP comment=NONE&lt;br /&gt;channel ORA_DISK_1: backup set complete, elapsed time: 00:02:56&lt;br /&gt;RMAN-00571: ===========================================================&lt;br /&gt;RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============&lt;br /&gt;RMAN-00571: ===========================================================&lt;br /&gt;RMAN-03002: failure of backup plus archivelog command at 08/02/2010 10:05:46&lt;br /&gt;ORA-19809: limit exceeded for recovery files&lt;br /&gt;ORA-19804: cannot reclaim 52428800 bytes disk space from 2147483648 limit&lt;br /&gt;&lt;br /&gt;Recovery Manager complete.&lt;/div&gt;&lt;a href="" id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Vemos que se trata en realidad de tres mensajes. El primero (RMAN-03002) indica que RMAN falló en la ejecución del respaldo incluyendo archivelogs. El segundo (ORA-19809) que no hay espacio para almacenar más respaldos y finalmente (ORA-19804) que no se pudieron liberar cerca de 52 Mb de espacio en la FRA.&lt;br /&gt;&lt;br /&gt;Revisando el tamaño del directorio designado para FRA a nivel sistema operativo vemos que:&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver oracle]$ du -sk flash_recovery_area&lt;br /&gt;1835880 flash_recovery_area&lt;/div&gt;&lt;br /&gt;Tiene ocupados poco más de 1.8 Gb y revisando la configuración a nivel Oracle:&lt;br /&gt;&lt;div class="code_block"&gt;SQL&gt; show parameter db_recovery_file_dest_size&lt;br /&gt;&lt;br /&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TYPE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;db_recovery_file_dest_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;big integer 2G&lt;/div&gt;&lt;br /&gt;El tamaño de la FRA es de 2 Gb.&lt;br /&gt;&lt;br /&gt;Para solucionarlo, Oracle propone ejecutar cualquier de las siguientes 5 opciones:&lt;ol&gt;&lt;li&gt;Respaldar la FRA usando RMAN.&lt;/li&gt;&lt;li&gt;Cambiar la política de retención de RMAN.&lt;/li&gt;&lt;li&gt;Cambiar la política de borrado de los archive logs.&lt;/li&gt;&lt;li&gt;Agregar espacio en disco e incrementar el valor del parámetro DB_RECOVERY_FILE_DEST_SIZE.&lt;/li&gt;&lt;li&gt;Eliminar archivos de la FRA usando RMAN.&lt;/li&gt;&lt;/ol&gt;La FRA puede configurarse para ocupar solo una porción de disco -dos 2 Gb por default- por lo que en este caso la opción más conveniente es aumentar su tamaño.&lt;br /&gt;&lt;div class="code_block"&gt;SQL&gt; alter system set db_recovery_file_dest_size=3G scope=both;&lt;br /&gt;&lt;br /&gt;System altered.&lt;/div&gt;&lt;br /&gt;Hecho esto, solo tienes que lanzar nuevamente tu respaldo.&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver ~]$ tail rman/logs/Level0-1008021027.log&lt;br /&gt;&lt;br /&gt;Starting Control File and SPFILE Autobackup at 02-AUG-10&lt;br /&gt;piece handle=/opt/oracle/flash_recovery_area/ORCL/autobackup/2010_08_02/o1_mf_s_725970724_65fs7ooy_.bkp comment=NONE&lt;br /&gt;Finished Control File and SPFILE Autobackup at 02-AUG-10&lt;br /&gt;&lt;br /&gt;using channel ORA_DISK_1&lt;br /&gt;using channel ORA_DISK_2&lt;br /&gt;no obsolete backups found&lt;br /&gt;&lt;br /&gt;Recovery Manager complete.&lt;/div&gt;&lt;br /&gt;Revisando el log de ejecución, vemos que esta vez ya no regresó ningún mensaje de error. Y vemos la diferencia de espacio ocupado en la FRA que pasó de 1.8 Gb a poco más de 2.6, es decir, se necesitaban poco más de 800 Mb de espacio libre en la FRA para que el respaldo pudiera ejecutarse sin problemas.&lt;br /&gt;&lt;div class="code_block"&gt;[oracle@testserver oracle]$ du -sk flash_recovery_area&lt;br /&gt;2635256 flash_recovery_area&lt;/div&gt;&lt;br /&gt;Si el espacio configurado para la FRA fuera igual al tamaño del disco o filesystem y no tuviera espacio adicional, tendría entonces que emplear alguna de las otras 4 opciones que implican deshacerse de archivos para liberar espacio en la FRA. Antes de eliminar cualquier archivo administrado por RMAN asegúrate que exista un respaldo fuera de la FRA, en cinta por ejemplo o cualquier otro medio de almacenamiento, con esto te aseguras que ante una eventualidad en la base de datos productiva, tendrás los medios para poder restaurarla.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-8124104885197470295?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/8124104885197470295/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/08/sin-espacio-en-la-flash-recovery-area.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8124104885197470295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8124104885197470295'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/08/sin-espacio-en-la-flash-recovery-area.html' title='Sin espacio en la Flash Recovery Area (FRA)'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-6873433467832898299</id><published>2010-07-30T12:52:00.003-05:00</published><updated>2010-07-30T17:17:51.672-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><title type='text'>Científicos rompen la barrera de ordenamiento del terabyte</title><content type='html'>&lt;div style="text-align: justify;"&gt;Científicos en computación de la Universidad de California, San Diego (E.U.) rompieron "la barrera del terabyte" —y un récord mundial— al ordenar más de un terabyte de información (1,000 gigabytes o 1 millón de megabytes) en solo 60 segundos.&lt;br /&gt;&lt;br /&gt;En la competencia de este 2010 organizada por &lt;a href="http://sortbenchmark.org/"&gt;Sort Benchmark&lt;/a&gt; —la "Copa del Mundo del ordenamiento de datos"— los científicos en informática de la Escuela de Ingeniería Jacobs de la UC San Diego empataron también un récord mundial para la tasa de ordenamiento más veloz. Ordenaron un trillón de registros en 172 minutos y lo lograron con solo un cuarto de los recursos computacionales del récord anterior.&lt;br /&gt;&lt;br /&gt;Compañías en busca de tendencias, eficiencia y otras ventajas en competitividad han volteado hacia este tipo de ordenamiento pesado el cual exige poder de procesamiento del hardware típico en los data centers. La Internet ha creado también varios escenarios donde el ordenamiento de la información es crítico. La publicidad en las páginas de Facebook, las recomendaciones personalizadas de Amazon, y los resultados de búsqueda al-segundo de Google todos son resultado de ordenar conjuntos de datos gigantes múltiplos de los petabytes. Un petabyte equivale a 1,000 terabytes.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;"Si una corporación grande quisiera correr una consulta a través de todas las visitas a sus páginas o de productos vendidos, puede requerir ordenar un conjunto de datos multi-petabyte y sobre todo aquellas que crecen varios gigabytes al día", comenta el profesor en informática de la UC San Diego Amin Vahdat, líder del proyecto. "Las compañías están llevando al límite la cantidad de información que pueden ordenar, y cuan veloz. Esto es análisis de información en tiempo real", explica Vahdat. Se necesitan mejores tecnologías de ordenamiento, sin embargo.&lt;br /&gt;&lt;br /&gt;“En data centers, el ordenamiento es el cuello de botella más frecuente de muchas actividades de alto nivel”, apunta Vahdat quien dirige el Centro de Sistemas de Redes (CNS) en la UC San Diego.&lt;br /&gt;&lt;br /&gt;Los dos nuevos récords mundiales de la UC San Diego están entre los resultados revelados recientemente en sortbenchmark.org — sitio dirigido por científicos en informática voluntarios de academias y empresas quienes administran las competencias. Estas competencias proveen de marcas en cuanto a ordenamientos de datos y de un foro interactivo para investigadores trabajando en mejorar técnicas de ordenamiento.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Records Mundiales&lt;/h3&gt;Este es el primer año que los científicos entran a la competencia y ganan en El Ordenamiento Indy en un Minuto y el Ordenamiento Indy Gris.&lt;br /&gt;&lt;br /&gt;En el primero, los investigadores ordenaron 1,014 terabytes en un minuto — rompiendo así la barrera del minuto por primera vez.&lt;br /&gt;&lt;br /&gt;"Pusimos nuestra agenda de investigación en torno a como mejorarlo... además de hacerlo más genérico", comenta el estudiante en doctorado en ciencias de la computación de la UC San Diego Alex Rasmussen, lider de estudiantes de posgrado del equipo.&lt;br /&gt;&lt;br /&gt;Además el equipo empató el récord mundial en el "Ordenamiento Indy Gris" que mide la tasa de ordenamiento por minuto por 100 terabytes de información.&lt;br /&gt;&lt;br /&gt;"Utilizamos una cuarta parte de computadoras que el equipo del récord anterior empleó para alcanzar la misma tasa de ordenamiento — lo cual implicó usar solo una cuarta parte de energía eléctrica, enfriamiento y espacio físico", comenta George Porter, científico investigador en la CNS de la UC San Diego.&lt;br /&gt;&lt;br /&gt;Los dos récords mundiales están en la categoría "Indy" — lo que significa que los sistemas fueron diseñados en torno a parámetros específicos para la competencia. El equipo busca generalizar sus resultados para la competencia "Daytona" y que se puedan emplear en ambientes reales.&lt;br /&gt;&lt;br /&gt;"El ordenamiento es también un medio interesante hacia varios problemas de procesamiento de información. En general, es una buena manera de medir qué tan rápido se puede leer una gran cantidad de datos de un conjunto de discos, aplicarles algo de procesamiento, distribuirlos por una red y escribirlos en otro conjunto de discos", explica Rasmussen. "Ordenar mete mucha presión a todo el subsistema de entrada/salida, desde los discos duros y las tarjetas de red hasta el sistema operativo y las aplicaciones".&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Sistemas balanceados&lt;/h3&gt;El desafío de ordenar datos que tomaron los científicos son muy diferentes a los modestos ordenamientos que los sistemas de bases de datos convencionales pueden hacer mediante la comparación de dos tablas. La mayor diferencia es que los ordenamientos de datos de terabytes y petabytes van más allá de la capacidad de memoria del servidor que lo hace.&lt;br /&gt;&lt;br /&gt;Al crear el sistema de ordenamiento para trabajo pesado, los científicos lo diseñaron para balanceo y rapidez. Un sistema balanceado es uno en el cual los recursos como memoria, almacenamiento y ancho de banda de red son aprovechados en su totalidad y solo se desaprovechan unos cuantos recursos.&lt;br /&gt;&lt;br /&gt;"Nuestro sistema muestra lo que es posible si se pone atención en la eficiencia — y queda aún mucho qué mejorar", comenta Vahdat "Nos planteamos la pregunta ¿Qué significa construir un sistema balanceado en el no se desaprovechan recursos de sistema que tiene un alto desempeño de computo? Si tienes procesadores ociosos o sin usar toda la RAM, estás desperdiciando energía y perdiendo eficiencia". A menudo la memoria usa la misma energía que un procesador o más inclusive, por ejemplo, sin embargo, nadie se fija en eso.&lt;br /&gt;&lt;br /&gt;Para romper la barrera del terabyte en el Ordenamiento Indy en un Minuto, los investigadores construyeron un sistema hecho de 52 nodos de computadoras. Cada nodo es un servidor estándar con dos procesadores quad-core, 24 gigabytes de memoria y 16 discos todos interconectados mediante un switch Cisco Nexus 5020. Cisco donó los switches como parte del tratado de investigación que tienen con el Centro de Sistemas de Redes de la UC San Diego. El cluster de computadoras se hospedó en el Instituto para Telecomunicaciones y Tecnologías de la Información de California(Calit2).&lt;br /&gt;&lt;br /&gt;Para ganar el Ordenamiento Indy Gris, los investigadores ordenaron un trillón de registros en 10.318 segundos (aproximadamente 172 minutos), quedando su récord mundial empatado con un ordenamiento de 0.582 terabytes por minuto por 100 terabytes de datos. El sistema vencedor está hecho de 47 nodos similares a los usados en el ordenamiento de un minuto.&lt;br /&gt;&lt;br /&gt;100 terabytes de información equivalen a 4,000 discos Blu-Ray de una capa, 21,000 DVDs de una capa, 12,000 DVDs de doble capa o 142,248 CDs (asumiendo que son CDs de 703 MB).&lt;br /&gt;&lt;br /&gt;Vía:&lt;br /&gt;&lt;a href=”http://www.drdobbs.com/database/226300166”&gt;Dr. Dobbs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-6873433467832898299?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/6873433467832898299/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/07/cientificos-rompen-la-barrera-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/6873433467832898299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/6873433467832898299'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/07/cientificos-rompen-la-barrera-de.html' title='Científicos rompen la barrera de ordenamiento del terabyte'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-8377722347104306725</id><published>2010-07-13T21:38:00.000-05:00</published><updated>2010-07-13T21:38:33.389-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='administración'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Y tú ¿que tan DBA eres?</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight:bold;"&gt;Rescato del libro &lt;span style="font-style:italic;"&gt;"Oracle 11g Underground Advice for Database Administrator's - Beyond the basics - A real-world DBA survival guide for Oracle 11g database implementations"&lt;/span&gt; escrito por April Sims y publicado por Packt Publishing el siguiente texto que lista atinadamente las actividades que como DBA deberían cumplirse, tomando en cuenta por supuesto el ambiente de trabajo ya que no todas aplican para todos los casos. Por ejemplo, una persona que fue contratada para estar a cargo de digamos 20 bases de datos con las que la empresa funciona, tiene muchas más responsabilidades que un consultor, ya que —en primer lugar— un consultor cobrará en la medida de su consumo de horas por atención y generalmente el costo de este servicio no es nada barato. Por supuesto que dependiendo del contrato, el consultor podrá desde realizar diagnósticos por tal o cual problema que la base de datos presenta, hasta implementar soluciones que bien corrigen problemas de desempeño o aplican nuevas funcionalidades todo esto en pro de mejorar los procesos informáticos organizacionales. Se puede decir que ambos cuentan con perfiles similares pero con distintas especializaciones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;¿Qué hace un DBA todo el día?&lt;/h3&gt;Entre las responsabilidades están, instalar, configurar y administrar la base de datos, estas responsabilidades pueden dividirse en tareas programadas para ejecutarse a ciertos intervalos. Lo anterior es una lista generalizada y dependiendo del lugar de trabajo pueden o no aplicar.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Tareas como el monitoreo y rotación de logs pueden hacerse desde el Enterprise Manager, Grid Control, scripts shell de Unix, DBMS_SCHEDULER, Perl, herramientas de base de datos de terceros o combinaciones de algunos de estos.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Priorizando actividades—diarias, semanales, mensuales, trimestrales o anuales&lt;/h3&gt;Veamos cuales son las actividades prioritarias que se necesitan cubrir. La calendarización dependerá del lugar de trabajo, necesidades de la aplicación y el peso que tengan las actividades en general.&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;Diarias&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Respaldos — usualmente son incrementales o acumulativas, uno completo por semana y los logs son almacenados y enviados por correo al DBA en caso de fallas.&lt;/li&gt;&lt;li&gt;Alert Log de la base de datos — tales como errores ORA, notificaciones automáticas por correo, mensajes a localizadores.&lt;/li&gt;&lt;li&gt;ADRCI — Automatic Repository Utility and Log Rotation.&lt;/li&gt;&lt;li&gt;Espacio en el filesystem, CPU y estadísticas de I/O — requiere de apoyo del administrador del SO.&lt;/li&gt;&lt;li&gt;Instrucciones SQL — Sentencias que están entre el top 5 y 10.&lt;/li&gt;&lt;li&gt;Corrupción — logs de RMAN, logs de exports y/o datapump, dbverify, &lt;span style="font-family: courier new;"&gt;v$database_block_corruption&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Crecimiento de tablespaces — crecerlos, administración de particiones, tablespaces temporales, undo.&lt;/li&gt;&lt;li&gt;Data Guard — revisar en los logs que la aplicación/transporte esté en sincronía.&lt;/li&gt;&lt;li&gt;Logs del listener SQL*NET — detección de intrusos.&lt;/li&gt;&lt;li&gt;Auditoría de logs y evidencias — detección de intrusos, quitar cuentas sin uso.&lt;/li&gt;&lt;li&gt;Dumps del core y usuario — espacio que ocupan, bugs de Oracle.&lt;/li&gt;&lt;li&gt;Creación de nuevas cuentas — debería ser al menos automatizado parcialmente.&lt;/li&gt;&lt;li&gt;Actualizar al usuario sobre la seguridad — al menos con 24 horas de anticipación.&lt;/li&gt;&lt;li&gt;Migrar esquemas y cambios al código o actualizaciones específicas de SQL.&lt;/li&gt;&lt;li&gt;Crecimiento de las tablas grandes, crecimiento uniforme del tablespace.&lt;/li&gt;&lt;li&gt;Llevar un registro de los cambios diarios a la base de datos — publicarlos para ciertas personas del staff de IT.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;Semanales&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Respaldos — usualmente de toda la base de datos.&lt;/li&gt;&lt;li&gt;Clonaciones para bases de datos no productivas — automatizado o con scripts.&lt;/li&gt;&lt;li&gt;Crecimiento de tablespaces — el diario acumulado en uno semanal.&lt;/li&gt;&lt;li&gt;Mejora de versión de Oracle o proyectos de migración para aplicar parches — Actualizaciones significativas.&lt;/li&gt;&lt;li&gt;Pruebas en sitio de Data Guard.&lt;/li&gt;&lt;li&gt;Revisar actualizaciones de My Oracle Support(MOS) — nuevos parches, actualizaciones o nuevas versiones.&lt;/li&gt;&lt;li&gt;Actualizaciones en la intranet local sobre procedimientos operacionales.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;Mensuales&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Clonaciones para bases de datos no productivas — automatizado o con scripts.&lt;/li&gt;&lt;li&gt;Monitoreo del crecimiento de tablespaces — el semanal acumulado en uno mensual.&lt;/li&gt;&lt;li&gt;Tendencias y previsiones — consumo de CPU, estadísticas de I/O, accesos&lt;/li&gt;&lt;li&gt;Cambio de passwords en producción — sys, system, wallet, schema, grid control, OAS.&lt;/li&gt;&lt;li&gt;Licensiamiento de uso de Oracle y cuanto abarca.&lt;/li&gt;&lt;li&gt;Poner en práctica escenarios de recuperación.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;Trimestrales&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Aplicación de CPUs(Critical Patch Upate) y PSUs(Patch Set Updates) en producción con planeación de la suspensión del servicio. Aplicación de CPUs, PSUs una sola vez en instancias no productivas.&lt;/li&gt;&lt;li&gt;Monitoreo del crecimiento de tablespaces — el mensual acumulado en un anual&lt;/li&gt;&lt;li&gt;Cursos de actualización de Oracle — de Oracle University(en línea o presenciales), libros, encuentros informales.&lt;/li&gt;&lt;li&gt;Acumulación de tendencias y previsiones.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;Anuales&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crecimiento de tablespaces — reporte anual.&lt;/li&gt;&lt;li&gt;Suma de tendencias y previsiones.&lt;/li&gt;&lt;li&gt;Ir a conferencias sobre Oracle — grupos de usuarios locales o nacionales.&lt;/li&gt;&lt;li&gt;Actualizaciones de Oracle con suspensión de servicio planeado — versión + parches + PSUs + aplicación una sola vez.&lt;/li&gt;&lt;li&gt;Licenciamiento de software y renovación de servicios.&lt;/li&gt;&lt;li&gt;Evaluación y actualización de hardware.&lt;/li&gt;&lt;li&gt;Renovación de certificados SSL, Oracle Wallets.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Así es, se ve como un conjunto desolador de actividades qué realizar, sin embargo, se cuenta con el apoyo de herramientas tales como el OEM, Grid Control, monitoreo de terceros o scripts hechos a medida. Es por eso que se hace la reiteración de que la automatización de estas tareas es de gran importancia.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Si se generalizan varios de los puntos mencionados arriba, veremos que no aplican exclusivamente para la plataforma Oracle sino que pueden servir también como referencia para administrar otros manejadores de bases de datos.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-8377722347104306725?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/8377722347104306725/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/07/y-tu-que-tan-dba-eres.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8377722347104306725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8377722347104306725'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/07/y-tu-que-tan-dba-eres.html' title='Y tú ¿que tan DBA eres?'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-272959809288625795</id><published>2010-07-07T23:26:00.012-05:00</published><updated>2010-07-13T21:42:37.810-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='administración'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Evitando meter la pata (en serio) como DBA Oracle</title><content type='html'>&lt;img style="margin: 5px 0px 0px 10px; float: right; width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" alt="" id="BLOGGER_PHOTO_ID_5364399772137510626" border="0" /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight:bold;"&gt;Leyendo el libro "&lt;span style="font-style:italic;"&gt;Oracle Database 11g—Underground Advice for Database Administrators. Beyond the basics. A real-world DBA survival guide for Oracle 11g database implementations&lt;/span&gt;" de la editorial Packt Publishing escrito por April C. Sims, hace una excelente recapitulación de situaciones o actividades que como DBA Oracle en caso de suceder podrían hacernos pasar un mal día o a nuestro jefe o al jefe del jefe. Ser precavido, concentrarse en lo que se hace y en algunos casos hacer una doble revisión de lo que vas a ejecutar y en cual servidor no es más que parte del desempeño para hacer bien tu trabajo y más si se porta el título de "DBA". En serio, hay quienes tienen la idea equivocada sobre lo que hace un DBA, pero ese es tema para otra entrada.&lt;br /&gt;&lt;br /&gt;Estos son los puntos que A. Sims tiene bien a mencionar.&lt;/span&gt;&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Evita usar &lt;span style="font-family: courier new;"&gt;rm -rf *.*&lt;/span&gt; en cualquier momento y por el motivo que sea, procura ser específico &lt;span style="font-family: courier new;"&gt;rm *.log&lt;/span&gt; o &lt;span style="font-family: courier new;"&gt;*.lis&lt;/span&gt; o &lt;span style="font-family: courier new;"&gt;*.trc&lt;/span&gt;: lo más seguro es respaldar el directorio y usar mejor &lt;span style="font-family: courier new;"&gt;rmdir&lt;/span&gt;. Sería aún mejor si renombraras el directorio completo y lo dejaras ahí por uno o dos días.&lt;/li&gt;&lt;li&gt;Asumir que todos los archivos que ves en un directorio pertenecen a una sola base de datos es presagio de un desastre, esos archivos pueden crearse en cualquier lugar del filesystem al que Oracle tenga acceso de escritura.&lt;/li&gt;&lt;li&gt;Modificar el acceso a una instancia productiva a nivel SQL*Plus no es una regla y por lo general no se concede directamente a los desarrolladores a menos que haya una persona que se haga cargo de tal responsabilidad, como el jefe de desarrollo.&lt;/li&gt;&lt;li&gt;Es bueno usar la herramienta de Unix &lt;span style="font-family: courier new;"&gt;fuser&lt;/span&gt; contra un archivo para determinar si está o no siendo usado antes de ejecutar los comandos &lt;span style="font-family: courier new;"&gt;rm&lt;/span&gt; o &lt;span style="font-family: courier new;"&gt;mv&lt;/span&gt;. Otra manera sería forzar un checkpoint y revisar el timestamp antes de eliminarlo. Si el archivo está activo, el timestamp se habrá actualizado.&lt;/li&gt;&lt;li&gt;Agrega el ORACLE_SID y el usuario al prompt de SQL. Esto prevendrá desastres al revisar visualmente el prompt antes de ejecutar un script en lo que tu piensas que es un servidor no productivo.&lt;/li&gt;&lt;li&gt;Usa un prompt extendido a nivel Unix que contenga el hostname, usuario y ORACLE_SID lo cual agregará más pistas visuales para que te asegures de saber exactamente que es lo que vas a modificar.&lt;/li&gt;&lt;li&gt;Copiar y pegar directamente en SQL*Plus u otra herramienta de línea de comando puede ocasionar que se ejecute el código equivocado. Mejor copia y pega en un editor de texto. De esta manera checas exactamente que es lo que está en el buffer del copy/paste.&lt;/li&gt;&lt;li&gt;Teclea la palabra &lt;span style="font-family: courier new;"&gt;produccion&lt;/span&gt; en la ventana de línea de comando después de que terminas de usarla. Esto prevendrá desastres accidentales al cambiar entre ventanas si ejecutas algo que no debías. Sólo se producirá un error ya que no existe un comando llamado produccion.&lt;/li&gt;&lt;li&gt;Es bueno correr escenarios de recuperación en un servidor diferente al de producción. Además de probar restauraciones a nivel sistema operativo. El sitio donde se hará la recuperación en caso de desastre debería estar en un servidor diferente para contar con capacidades de permutación reales.&lt;/li&gt;&lt;li&gt;Asegúrate de saber como usar todas las herramientas de Oracle desde línea de comando y del uso del editor &lt;span style="font-family: courier new;"&gt;vi&lt;/span&gt; de Unix en caso de que no cuentes con nada más a tu disposición.&lt;/li&gt;&lt;li&gt;De preferencia cambia los colores de entorno de las aplicaciones, ventanas o herramientas de línea de comando como Putty que están conectadas a ambientes productivos de las que están conectadas a ambientes no productivos y de aumentar el tamaño de guardado del historial al mayor posible. Unix cuenta con una herramienta de captura del historial llamada &lt;span style="font-family: courier new;"&gt;script&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Avisa que vas a hacer una modificación... por si acaso. Decirlo en voz alta puede darle tiempo a alguien para detenerte o al menos confirmarte que lo vas a hacer.&lt;/li&gt;&lt;li&gt;Los scripts de rotación de archivos logs pueden causar estragos si nombraste los online redo logs con la extensión &lt;span style="font-family: courier new;"&gt;log&lt;/span&gt;. Sería más seguro usar la extensión &lt;span style="font-family: courier new;"&gt;rdo&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Un consultor externo desconocido no necesariamente te dará el mejor consejo. Sé precavido hasta que estés seguro de su expertise y habilidad. Si es posible, solicita hacer tú el trabajo bajo su tutela de manera que sepas que es lo que está haciendo.&lt;/li&gt;&lt;li&gt;Usar el número 8 en cualquier tipo de script, en el &lt;span style="font-family: courier new;"&gt;ORACLE_SID&lt;/span&gt; o en lo te vas a apoyar para correr algo, puede causar estragos al momento de ejecutarlo ya que el caracter comodín * se encuentra arriba del 8—es muy fácil equivocarse y teclearlo accidentalmente.&lt;/li&gt;&lt;li&gt;Has siempre una revisión exhaustiva sobre el rendimiento del sistema operativo en el servidor, específicamente de que no se quede sin espacio en disco.&lt;/li&gt;&lt;li&gt;Ten cuidado al usar la opción 'reuse' cuando agregas o modificas un archivo de base de datos. El comando sobreescribe el datafile actual destruyendo cualquier información.&lt;/li&gt;&lt;li&gt;Sé precavido con scripts generados por herramientas de terceros, pueden tener instrucciones poderosas. Un script puede recrear un objeto eliminándolo primero lo cual puede ser desastroso en  caso de que no se haya respaldado la información.&lt;/li&gt;&lt;li&gt;Tú eres el responsable de los respaldos. No es aconsejable delegarlo de ninguna manera.&lt;/li&gt;&lt;li&gt;Asegúrate de investigar el consumo de recursos de los usuarios que tienen acceso especial en producción. Esos usuarios pueden adueñarse fácilmente de CPU o I/O que son más necesarios para las aplicaciones OLTP.&lt;/li&gt;&lt;li&gt;La cuenta de Unix root no es para uso diario y en especial para tareas dedicadas para Oracle. Investiga el uso de &lt;span style="font-family: courier new;"&gt;sudo&lt;/span&gt; para rastrear actividades autorizadas con root.&lt;/li&gt;&lt;li&gt;Este es el tip más importante para evitar meter la pata—en caso de duda lo más aconsejable es no hacer nada que no puedas deshacer, revertir o arreglar.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;En la lista se mencionan buenas prácticas que no se deberían olvidar en el quehacer diario de un DBA. Las consecuencias de cometer un error grave en una base de datos productiva puede ir desde una amonestación hasta perder el trabajo o incluso meterse en problemas legales.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-272959809288625795?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/272959809288625795/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/07/evitando-meter-la-pata-en-serio-como.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/272959809288625795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/272959809288625795'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/07/evitando-meter-la-pata-en-serio-como.html' title='Evitando meter la pata (en serio) como DBA Oracle'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-4617577740812001496</id><published>2010-07-05T23:42:00.010-05:00</published><updated>2010-07-06T00:15:31.113-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><title type='text'>Crystal Clear</title><content type='html'>&lt;div style="text-align: justify;"&gt;Uno de los conjuntos de íconos más populares hasta la fecha son los creados por el diseñador gráfico Brasileño &lt;a href="http://en.wikipedia.org/wiki/Crystal_icons#Crystal"&gt;Everaldo Cohelo&lt;/a&gt; por ahí del año 2001 para la interfaz gráfica de Linux KDE y que al día de hoy aparecen en el mismo.&lt;br /&gt;&lt;br /&gt;El conjunto de íconos está bajo licencia &lt;a href="http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License"&gt;LGPL (GNU Lesser General Public License)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="position:relative; right:-40px; margin:0px auto 10px;width: 128px; height: 128px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/TDK09h1YA_I/AAAAAAAAALY/OiUSRG78ROQ/s200/Konqueror-icon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5490649864865317874" /&gt;&lt;img style="position:relative; right:-40px; margin:0px auto 10px; width: 128px; height: 128px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/TDK08idGW9I/AAAAAAAAALI/1TQs9Fs74kU/s200/Crystal_Clear_app_terminal.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5490649847852063698" /&gt;&lt;img style="position:relative; right:-40px; margin:0px auto 10px; width: 128px; height: 128px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/TDK09PIfS7I/AAAAAAAAALQ/VryZTNxIOyc/s200/Crystal_Clear_Networksettings.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5490649859845213106" /&gt;&lt;img style="position:relative; right:-40px; margin:0px auto 10px; width: 128px; height: 128px;" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/TDK08G_pHKI/AAAAAAAAALA/5BTpHMog1W8/s200/Crystal_Clear_app_kmenu.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5490649840480754850" /&gt;&lt;img style="position:relative; right:-40px; margin:0px auto 10px; width: 128px; height: 128px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/TDK07xQwv5I/AAAAAAAAAK4/ZT-FYM2kXNY/s200/Crystal_Clear_app_download_manager.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5490649834646978450" /&gt;&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Si necesitas darle a tu aplicación un toque más gráfico seguro que estos íconos te serán de utilidad.&lt;br /&gt;&lt;br /&gt;Actualmente Everaldo dirige su propia consultoría de diseño gráfico desde &lt;a href="http://yellowicon.com/"&gt;Yellow.com&lt;/a&gt; empleando a 12 personas en la misma área.&lt;br /&gt;&lt;br /&gt;¿Quien dice que darse a conocer mediante proyectos de código abierto no es redituable?&lt;br /&gt;&lt;br /&gt;El conjunto completo en varias presentaciones y formatos lo encuentras en:&lt;br /&gt;&lt;a href="http://openiconlibrary.sourceforge.net/downloads.html"&gt;http://openiconlibrary.sourceforge.net/downloads.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Las vistas previas las encuentras en Wikimedia:&lt;br /&gt;&lt;a href="http://commons.wikimedia.org/wiki/Crystal_Clear"&gt;http://commons.wikimedia.org/wiki/Crystal_Clear&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-4617577740812001496?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/4617577740812001496/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/07/crystal-clear.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4617577740812001496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4617577740812001496'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/07/crystal-clear.html' title='Crystal Clear'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t1WQBJYuFhI/TDK09h1YA_I/AAAAAAAAALY/OiUSRG78ROQ/s72-c/Konqueror-icon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-8973206153335660466</id><published>2010-07-04T21:13:00.002-05:00</published><updated>2010-07-06T00:16:21.280-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Las Alternativas NoSQL</title><content type='html'>&lt;div style="text-align: justify;"&gt;Una nueva generación de software de base de datos de alto-desempeño y bajo costo está emergiendo muy rápido llegando a retar el dominio de SQL en procesos distribuidos y aplicaciones con grandes volúmenes de datos. Algunas compañías ya reemplazaron la alta funcionalidad de SQL con estas nuevas opciones que les permiten crear, trabajar y administrar enormes conjuntos de datos.&lt;br /&gt;&lt;br /&gt;El aliciente para este movimiento, denominado &lt;a href="http://en.wikipedia.org/wiki/NoSQL"&gt;NoSQL&lt;/a&gt;, es que diferentes implementaciones web, empresariales y aplicaciones de &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;cómputo en nube&lt;/a&gt; tienen diferentes requerimientos para sus bases de datos. No toda aplicación requiere una consistencia de datos estricta, por ejemplo.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Además, cuando una aplicación usa datos distribuidos en cientos o incluso miles de servidores, los números(en cuestión de dinero) apuntan al uso de software servidor sin costo en lugar de pagar licencias por procesador. Una vez resuelto el tema de los costos de las licencias, se puede escalar horizontalmente con hardware comercial u optar por servicios de cómputo en nube y evitar un desembolso grande de entrada. Las herramientas previas no siempre facilitaban esto.&lt;br /&gt;&lt;br /&gt;Desafíos a la hegemonía de SQL vienen de productos especializados construidos desde cero para el análisis a gran escala y almacenamiento de documentos, así como para la construcción de sistemas que requieren de alta disponibilidad más que consistencia cuando se trata de particionar datos.&lt;br /&gt;&lt;br /&gt;Aplicaciones tales como las de procesamiento de transacciones en línea, inteligencia de negocios, gestión de relaciones con clientes, procesamiento de documentos y las redes sociales no tienen las mismas necesidades de datos, consultas o tipos de índices, ni tienen requisitos equivalentes de consistencia, escalabilidad y seguridad.&lt;br /&gt;&lt;br /&gt;Por ejemplo, las aplicaciones de &lt;a href="http://en.wikipedia.org/wiki/Business_intelligence"&gt;BI(inteligencia de negocios)&lt;/a&gt; ejecutan consultas de análisis y de toma de decisiones que pueden aprovechar los índices bitmap para las operaciones en bases de datos de gigas o terabytes de tamaño. Análisis web, descubrimiento de fármacos, modelos financieros y otras aplicaciones similares voltean hacia los sistemas distribuidos por su procesamiento eficaz de conjuntos de datos de gigas o teras. &lt;a href="http://en.wikipedia.org/wiki/OLTP"&gt;OLTP&lt;/a&gt; es sinónimo de fiabilidad. Y las aplicaciones de redes sociales como Facebook y Amazon.com han adoptado propiedades &lt;a href="http://en.wikipedia.org/wiki/Eventual_consistency"&gt;BASE (básicamente disponibles, flexibles, eventualmente consistentes)&lt;/a&gt; por arriba de las ya conocidas &lt;a href="http://en.wikipedia.org/wiki/ACID"&gt;ACID (atomicidad, consistencia, aislamiento, durabilidad)&lt;/a&gt; para soportar sus comunidades masivas de usuarios web de millones.&lt;br /&gt;&lt;br /&gt;Estas diferencias son una razón por las que bases de datos NoSQL no relacionales, bases de datos enfocadas a documentos y de almacenamiento vertical hayan cobrado fuerza. Son más como herramientas especializadas en lugar de Navajas Suizas con funcionalidad de plataformas SQL.&lt;br /&gt;&lt;br /&gt;Los arquitectos de sistemas deberían considerar las características y funciones especializadas que necesita una aplicación al momento de elegir una base de datos. Las base de datos NoSQL pueden construirse específicamente para funciones tales como BI, OLTP, &lt;a href="http://en.wikipedia.org/wiki/Customer_relationship_management"&gt;CRM&lt;/a&gt;, redes sociales y data warehousing, e incluyen características tales como escalabilidad, particionamiento, seguridad y versatilidad.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Escalabilidad y Alta Disponibilidad&lt;/h3&gt;Para cómputo en nube y sitios web con altos volúmenes de datos como eBay, Amazon, Twitter y Facebook, la escalabilidad y alta disponibilidad son esenciales. De hecho, son la razón para que en las bases de datos distribuidas se hayan relajado los requerimientos en cuanto a consistencia.&lt;br /&gt;&lt;br /&gt;Los sistemas que operan en ambientes de alta disponibilidad deben sobrevivir a fallas de software, hardware y red, y estar listos para escalar a pesar de la impredecible demanda en materia de recursos de cómputo. Un enfoque para la construcción de sistemas es el uso de bases de datos distribuidas con una &lt;a href="http://en.wikipedia.org/wiki/Shared-nothing_architecture"&gt;arquitectura de compartición nula&lt;/a&gt; y &lt;a href="http://en.wikipedia.org/wiki/Partition_%28database%29"&gt;particionamiento horizontal&lt;/a&gt;. &lt;a href="http://en.wikipedia.org/wiki/Apache_Cassandra#Elasticity"&gt;Elasticidad&lt;/a&gt; y &lt;a href="http://en.wikipedia.org/wiki/Shard_%28database_architecture%29"&gt;fragmentación (particionamiento)&lt;/a&gt; — ambas característics NoSQL — son soluciones de escalamiento horizontal que proveen disponibilidad y procesamiento de grandes volúmenes de datos.&lt;br /&gt;&lt;br /&gt;Una variedad de almacenes de datos están cobrando popularidad para la creación de aplicaciones de sitios web escalables y ambientes elásticos tales como la nube pública o privada. Los almacenes distribuidos de clave-valor son estupendos cuando no necesitas aplicar reglas SQL, rigidez de consistencia, consultas complejas, encolamiento integrado o la capacidad de funcionar con bases de datos en operación que exceden la memoria RAM disponible.&lt;br /&gt;&lt;br /&gt;Nuevos almacenes de datos de baja-latencia ofrecen escalabilidad para aplicaciones que no requieren de consultas elaboradas ni capacidades analíticas. Amazon ha desarrollado SimpleDB y Google Bigtable. Otras opciones de baja-latencia de código abierto incluyen Cassandra, Hypertable, MongoDB, Project Voldemort, Redis, Tokyo Tyrant y Dynamo, base de datos usada para Amazon V3 que hasta marzo contenía 102 billones de objetos.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Las Opciones&lt;/h3&gt;Google ha desarrollado Bigtable para distribuir datos a través de miles de servidores y escalar a conjuntos de datos en el orden de los peta bytes. Aplicaciones como la indexación de la web, Google Earth, Google Maps, Blogger, YouTube y Gmail lo emplean. La colección de 100 millones de videos de YouTube requiere de 600 TB de espacio. Bigtable es propietario, pero el modelo de datos existe en implementaciones de código abierto como Hypertable, Cassandra y HBase. Bigtable puede usarse como entrada o salida de MapReduce, que permite el procesamiento distribuido de archivos o bases de datos usando mapeos o funciones de reducción.&lt;br /&gt;&lt;br /&gt;Dynamo fue creado para proporcionar un almacén de datos tipo clave-valor de alta disponibilidad, sin perder cambios en los datos debido a fallas en el servidor o problemas de red. Amazon construyó posteriormente SimpleDB como un almacén tipo clave-valor disponible para los clientes de Amazon Web Services. SimpleDB está limitado a no más de 256 atributos de pares nombre-valor, dominios no mayores a 10 GB y bases de datos de no más de 1 TB. Amazon dice que las copias de los datos son actualizados en un segundo para mantener la consistencia. SimpleDB utiliza un lenguaje de consulta parecido a SQL.&lt;br /&gt;&lt;br /&gt;Project Voldemort, un clon de código abierto de Amazon Dynamo, es un almacén de datos clave-valor que soporta versiones, consistencia eventual(donde la base de datos devuelve a veces la respuesta incorrecta con el fin de conservar su tamaño), y particionamiento y replicación automático. Claves y valores pueden ser objetos complejos tales como mapas o listas. El Proyecto Voldemort soporta la construcción de almacenes de datos distribuidos en modo apagado. Los desarrolladores de LinkedIn la crearon, y sitios como Lookery lo utilizan.&lt;br /&gt;&lt;br /&gt;Cassandra integra el modelo de datos Bigtable con el diseño distribuido de Dynamo. Ofrece consistencia eventual, no la rígida consistencia que las transacciones de comercio electrónico y operaciones en la Bolsa requieren. En lugar de almacenar los datos en secuencias de fila-principal o columna-principal, Cassandra utiliza el orden ColumnFamily inspirado por Bigtable.&lt;br /&gt;&lt;br /&gt;Cassandra es distribuido geográficamente a través de múltiples data centers, tal como están las zonas de disponibilidad de Amazon EC2. Se pueden hacer cargas masivas con Hadoop.&lt;br /&gt;&lt;br /&gt;&lt;div style="padding-left:25px; padding-right:25px; padding-top:35px; padding-bottom:35px; border-top: thin solid red; border-bottom: thin solid red"&gt;El Costo de Escalar&lt;br /&gt;&lt;br /&gt;SimpleGeo, proveedor de datos geográficos, utiliza Apache Cassandra, opción de código abierto NoSQL, para evitar los costos de licencias de gestores de bases de datos comerciales como parte de su esfuerzo para escalar a una arquitectura de base de datos multiservidor.&lt;br /&gt;&lt;br /&gt;"Corre un cluster de 50 nodos, que abarca tres data centers del servicio de Amazon EC2 pagando cerca de USD$10,000 al mes", comenta el director de tecnología de la empresa Joe Stump, quien anteriormente utilizó Cassandra en Digg. "En contraste, el soporte premium de MySQL costaría cerca de USD$5,000 por nodo al año, o USD$250,000 por todos al año — más del doble por la implementación de Cassandra" agreaga Stump, "y Microsoft SQL Server puede costar hasta USD$55,000 por procesador al año".&lt;br /&gt;&lt;br /&gt;"USD$10,000 es un gasto operable todo lo contrario a un gasto mayor, y eso es 'un poco agradable fiscalmente'", comenta.&lt;/div&gt;&lt;br /&gt;Cassandra proporciona disponibilidad y escalabilidad a una cantidad de sitios bastante conocidos, incluyendo las vastas comunidades de Twitter y Facebook. Cuando el número de usuarios de Twitter despegó, migraron de MySQL a una combinación MySQL/memcached más 45 nodos corriendo Cassandra. Ese ambiente combinado se encarga ahora de 50 millones de 'tweets' al día. Facebook agrega cerca de 60 millones de fotos a la semana usando Cassandra. En Digg, Cassandra administra cerca de 3 TB de información.&lt;br /&gt;&lt;br /&gt;Digg anunció con bombo y platillo su movimiento de MySQL a Cassandra. La razón principal de Digg para moverse de plataforma fue "lo problemático que se volvió hacer que la aplicación tuviera un alto rendimiento cuando la escritura(en la base de datos) se volvió intensa en un conjunto de datos que crece rápidamente, y al cual no le ves fin" comenta John Quinn, vice presidente de ingeniería de Digg. El crecimiento forzó a Digg a tomar estrategias de particionamiento horizontal y vertical que eliminaron la mayoría de conceptos de una base de datos relacional, y aún así había sobrecarga", agrega Quinn.&lt;br /&gt;&lt;br /&gt;"Nuestro sistema crece rápidamente y necesita que se le proporcione rendimiento y redundancia con múltiples data centers y para agregar capacidad o reemplazar nodos con fallas inmediatamente. En cuanto a la consistencia de la información, los ingenieros de Digg pueden implementar controles a nivel aplicación más eficientemente con Cassandra que con MySQL", comenta Quinn.&lt;br /&gt;&lt;br /&gt;Tokyo Tyrant es un servidor de base de datos de código abierto, acompañado de un motor de búsqueda de texto, que tiene seguimiento en la comunidad NoSQL. Es una base de datos clave-valor con una estructura de índices hash y b-tree, capaz de insertar 1 millón de registros en 0.4 segundos por registro y de ejecutar 58,000 consultas por segundo. Soporta replicación asíncrona y procesamiento de transacciones con propiedades ACID y &lt;a href="http://en.wikipedia.org/wiki/Write-ahead_logging"&gt;registro prematuro de transacciones&lt;/a&gt;. Puede usarse con varios lenguajes de programación, incluyendo Perl, Java, Ruby y PHP. Implementaciones productivas incluyen Scribd y Mixi, el equivalente Japonés de Facebook. LightCloud modificó Tokyo Tyrant en una base de datos distribuida escalable horizontalmente agregando una capa hash universal. El diario social Plurk utiliza esta opción de LightCloud Tokyo Tyrant.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Almacenes de Base de Datos de Documentos&lt;/h3&gt;CouchDB y MongoDB son ejemplos de bases de datos de documentos de la clase JSON, a la vez que hay un gran número de productos que almacenan documentos codificados en formato XML. MongoDB es un producto popular basado en la arquitectura de base de datos cliente-servidor con índices b-tree y comunicación sobre redes TCP/IP.&lt;br /&gt;&lt;br /&gt;MongoDB administra colecciones de objetos JSON y provee de escalabilidad con &lt;a href="http://en.wikipedia.org/wiki/Shard_%28database_architecture%28"&gt;fragmentación&lt;/a&gt; y replicación. Las consultas son objetos JSON además de proporcionar también de búsquedas geoespaciales en 2-D. Existen APIs controladoras para varios lenguajes incluidos JavaScript, Java, Perl, PHP, Python, Ruby y C++. Entre las implementaciones productivas que usan MongoDB destacan Justin.tv, The New York Times, Disqus, Electronic Arts y Business Insider.&lt;br /&gt;&lt;br /&gt;CouchDB es un almacén de datos que carece de esquema y proporciona una API estilo REST para operaciones CRUD(crear, recuperar, actualizar, eliminar) sobre documentos. CouchDB puede hacer recuperaciones usando valores clave y puede operar con Hadoop MapReduce para consultas nada triviales. Es posible también la generación de vistas usando funciones JavaScript. Crear una vista puede tomar tiempo, pero las consultas posteriores que la van usan son muy rápidas.&lt;br /&gt;&lt;br /&gt;CouchDB soporta replicación multimaster y distribución de datos a través de múltiples instancias. Administra documentos en formato JSON y utiliza el motor JavaScript SpiderMonkey por lo que es muy apropiado para aplicaciones web, como con Erlang, HTTP, JavaScript, PHP, Python y Ruby.&lt;br /&gt;&lt;br /&gt;Para aplicaciones donde son preferibles los documentos XML y XQuery sobre los documentos JSON y las consultas en JavaScript, hay una cantidad de productos de código abierto y comerciales. Además de los almacenes de documentos XML, hay una docena de procesadores XQuery. La lista incluye Apache Xindice, Berkeley DB, eXist-db, IBM DB2, MonetDB, Mark Logic, Sedna, WebMethods Tamino y TigerLogic XDMS.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Procesamiento Distribuido&lt;/h3&gt;Cuando se trata de procesamiento distribuido de conjuntos de datos masivos, Hadoop MapReduce se ha convertido en la tecnología por excelencia. Investigadores en Yahoo, por ejemplo, lo usaron en 3,800 nodos para ordenar un petabyte de información en 16.25 horas.&lt;br /&gt;&lt;br /&gt;Google desarrolló y patentó recientemente MapReduce. La función de mapeo produce una lista de pares clave-valor que MapReduce convierte a una lista de valores.&lt;br /&gt;&lt;br /&gt;El Proyecto Hadoop de Apache incluye el Sistema de Archivos Distribuído Hadoop (HDFS), MapReduce, base de datos HBase, lenguaje de análisis Pig, la herramienta de consulta y análisis Hive, entre otros. HBase es un almacén vertical(por columna) distribuido, modelado después de Google Bigtable que puede servir como entrada o salida para MapReduce.&lt;br /&gt;&lt;br /&gt;HBase es uno de los muchos almacenes verticales compitiendo en el mercado del análisis e inteligencia de negocios. Almacenar tablas en orden de columna-principal proporciona mejoras de desempeño sustanciales sobre las tablas almacenadas en fila-principal. Beneficios como ubicación mejorada y desempeño del cache hacen que el desempeño de la lectura mejore, sin embargo el desempeño es pobre para escritura. Otros almacenes verticales incluyen Sybase IQ, Vertica y CStore que es una colaboración entre varias universidades y es de código abierto.&lt;br /&gt;&lt;br /&gt;El creciente interés de búsquedas semánticas y de información relacionada ha puesto en los reflectores a los &lt;a href="http://en.wikipedia.org/wiki/RDF_Data_Store"&gt;almacenes de triples RDF(Resource Description Framework)&lt;/a&gt;. Estas opciones incluyen AllegroGraph, Bigdata, Garlik, Jena, Ontotext Big-OWLIM, OpenLink Virtuoso, Oracle 11g y Sesame. Varios de estos han sido implementados en Amazon EC2 para explotar el poder del procesamiento distribuido de la nube. Los investigadores de Raytheon BBN usaron también Hadoop MapReduce para crear un almacén RDF distribuido que soporta procesamiento de consulta &lt;a href="http://en.wikipedia.org/wiki/SPARQL"&gt;SPARQL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Restricciones y Mejores Prácticas&lt;/h3&gt;Para asegurar la durabilidad e integridad de la información, las bases de datos SQL proveen de registro de transacciones y replicación. Las opciones NoSQL necesitan algo similar. Cassandra, por ejemplo, soporta ambos. Tokyo Cabinet y HBase soportan &lt;a href="http://en.wikipedia.org/wiki/Write-ahead_logging"&gt;registro prematuro&lt;/a&gt;. Tokyo Cabinet y CouchDB soportan replicación master-master, mientras que MongoDB soporta replicación master-slave y pares de réplicas.&lt;br /&gt;&lt;br /&gt;Los arquitectos que emplean bases de datos orientadas a documentos deben lidiar con como almacenar cada tipo de documento y si les conviene tener o no una base de datos para cada tipo. En vez de separar en bases de datos se puede incluir un atributo que especifique el tipo o usar colecciones.&lt;br /&gt;&lt;br /&gt;La nueva generación de almacenes de datos está dirigida a atender necesidades de disponibilidad y escalabilidad, aunque aplican ciertas restricciones para alcanzar su mayor eficacia. Con Amazon SimpleDB, por ejemplo, el tiempo máximo que puede durar una consulta es 5 segundos. Si la consulta demora más, SimpleDB regresa el resultado parcial y la aplicación debe hacer consultas adicionales para complementarla. SimpleDB restringe el resultado de una consulta a un máximo de 250 items, mientras que recientemente Google aumentó el resultado máximo de una consulta del almacén de datos AppEngine a 1,000 items.&lt;br /&gt;&lt;br /&gt;En sistemas particionados horizontalmente las consultas que necesitan hacer joins cruzados-fragmentados son costosos, de ahí que el diseño de algoritmos para particionamiento requieran de habilidad y conocimiento en patrones de uso de datos. Cuando se requiere de consultas complejas con agregación, las bases de datos NoSQL no son una buena opción, sin embargo pueden ser fuentes de datos para soluciones separadas encargadas de análisis. Las organizaciones que utilizan almacenes de datos clave-valor a veces necesitan las capacidades de indexación y consulta de SQL. Pueden recurrir a otros programas que soporten indexación y consulta como Lucene de Apache. Independientemente de si la organización usa bases de datos SQL o NoSQL, es una buena idea emplear control de versiones y bases de datos separadas para pruebas y producción.&lt;br /&gt;&lt;br /&gt;Para todas las áreas que abordan las opciones NoSQL, todavía nos quedamos con la pregunta de qué software de base de base de datos adoptar. La respuesta depende de cosas fundamentales: ¿Cuánto y qué tipo de datos se almacenarán? ¿Será usado para consultas complejas? ¿Cuantos usuarios concurrentes tendrá? ¿Escalará la base de datos según aumente la cantidad de usuarios e información? SQL o NoSQL, es lo primero a definir.&lt;br /&gt;&lt;br /&gt;Vía &lt;a href="http://www.drdobbs.com/database/224900500"&gt;Dr. Dobbs&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-8973206153335660466?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/8973206153335660466/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/07/la-alternativa-nosql.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8973206153335660466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8973206153335660466'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/07/la-alternativa-nosql.html' title='Las Alternativas NoSQL'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2877547236113142092</id><published>2010-06-29T11:29:00.005-05:00</published><updated>2010-06-29T11:46:58.622-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Lesión por Esfuerzo Repetitivo - Workrave</title><content type='html'>&lt;img style="float:right; margin:5px 0px 0px 10px;width: 200px; height: 100px;" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/TCodixrSjPI/AAAAAAAAAKw/iZIg_v7HeQI/s320/workrave.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5488231579192036594" /&gt;&lt;div style="text-align: justify;"&gt;Ya con varios años trabajando frente a una computadora -de 8 a 9 horas al día por supuesto, en contadas ocasiones han sido más- comienzas a adolecer de ciertas molestias que en un principio inconscientemente es probable que ni siquiera notes. Entre los ejemplos más notables están la vista cansada, leve dolor en las manos para ser más preciso en la parte de la palma con la que te apoyas cuando escribes en el teclado, entumecimiento leve de los dedos, molestia leve en la espalda baja, y peor aún si experimentas frecuentes periodos de estrés producto ya sea de la carga de trabajo, el ambiente laboral, problemas personales, &amp;lt;ponga aquí su motivo&amp;gt;, etc.&lt;br /&gt;&lt;br /&gt;Específicamente el medio con el cual llegamos a plasmar las ideas en cosas tangibles(computacionalmente hablando) es con nuestras manos usando el teclado y el ratón en un 99% de los casos me atrevería a decir, el otro 1% (el cual se me hace demasiado) pongámoslo así, utiliza programas de reconocimiento de voz u otro medio de entrada, empleados por personas con enfermedad crónica o con alguna discapacidad.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Derivado del uso constante del teclado y el ratón por largos periodos durante el día, se puede llegar a desarrollar la llamada lesión por esfuerzo repetitivo o &lt;a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury"&gt;RSI(Repetitive Strain Injury)&lt;/a&gt; por sus siglas en inglés. Desafortunadamente, la mayoría no sabemos sobre este tema ni qué tan grave puede ser.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;¿Cuales son los síntomas?&lt;/h3&gt;Citándolos de &lt;a href="http://www.eecs.umich.edu/~cscott/rsi.html#symptoms"&gt;esta página&lt;/a&gt;.&lt;br /&gt;Experimentas:&lt;ol&gt;&lt;li&gt;¿Fatiga o falta de resistencia?&lt;/li&gt;&lt;li&gt;¿Debilidad en las manos o antebrazos?&lt;/li&gt;&lt;li&gt;¿Hormigueo, entumecimiento o pérdida de sensibilidad?&lt;/li&gt;&lt;li&gt;Pesadez: ¿Sientes que tus manos parecen peso muerto?&lt;/li&gt;&lt;li&gt;Torpeza: ¿Dejas caer seguido las cosas?&lt;/li&gt;&lt;li&gt;¿Falta de fuerza en las manos? ¿Se te dificulta abrir frascos o cortar las verduras?&lt;/li&gt;&lt;li&gt;¿Falta de control o coordinación?&lt;/li&gt;&lt;li&gt;¿Casi todo el tiempo tienes las manos frías?&lt;/li&gt;&lt;li&gt;¿Que estás consciente de algo? Estar al pendiente de una parte de tu cuerpo puede ser indicio de que algo anda mal.&lt;/li&gt;&lt;li&gt;¿Hipersensibilidad?&lt;/li&gt;&lt;li&gt;¿Auto-masajes frecuentes? (subconscientemente)&lt;/li&gt;&lt;li&gt;¿Afinidad al dolor? ¿Tus manos te duelen cuando alguien más habla sobre su dolor en las manos?&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Cómo reducir el riesgo de desarrollar RSI&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Haz pausas, cuando uses la computadora cada 10, 20 o 30 minutos.&lt;/li&gt;&lt;li&gt;Ejercitarse regularmente puede prevenir las lesiones incluyendo las RSI&lt;/li&gt;&lt;li&gt;Mejora tu postura. Ajusta tu escritorio y/o silla para soportar los músculos necesarios y tener una buena postura&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Workrave&lt;/h3&gt;Es un programa de código abierto cuyo propósito es ayudar a prevenir la RSI o la miopía en los usuarios de computadoras. Este bloquea periódicamente la pantalla mientras una figura animada guía al usuario a través de diversos ejercicios de estiramiento y los insta a tomar un descanso. El programa avisa con frecuencia a tomar micro-pausas, descansos y restringe tu límite de horas al día con el horario establecido.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Instalando Workrave&lt;/h3&gt;Ejecuta el siguiente comando si tu sistema es Linux Debian / Ubuntu:&lt;div class="code_block"&gt;sudo apt-get install workrave&lt;/div&gt;&lt;br /&gt;En caso de tener instalado Fedora:&lt;div class="code_block"&gt;su - -c 'yum install workrave'&lt;/div&gt;&lt;br /&gt;O si tienes Windows, descargas el instalador de aquí:&lt;br /&gt;&lt;a href="http://www.workrave.org/download/"&gt;http://www.workrave.org/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La configuración por default es para personas en recuperación de RSI, micropausas de 25 segundos por cada dos minutos y medio de actividad y descansos de 10 minutos por cada 20 minutos de actividad. Si nunca has tenido molestias puedes comenzar tomando micropausas de digamos 10 segundos por cada 10 minutos y descansos de 5 minutos por cada hora de actividad. Es complicado recomendar tal o cual configuración, lo mejor es ir probando hasta encontrar la que se ajuste y haga disminuir tu padecimiento.&lt;br /&gt;&lt;br /&gt;Enlaces recomendados:&lt;br /&gt;&lt;a href="http://www.eecs.umich.edu/~cscott/rsi.html"&gt;Repetitive Strain Injury: How to prevent, identify, and manage RSI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vía: &lt;a href="http://www.cyberciti.biz/tips/repetitive-strain-injury-prevention-software.html"&gt;nixCraft&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2877547236113142092?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2877547236113142092/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/06/lesion-por-esfuerzo-repetitivo-workrave.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2877547236113142092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2877547236113142092'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/06/lesion-por-esfuerzo-repetitivo-workrave.html' title='Lesión por Esfuerzo Repetitivo - Workrave'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_t1WQBJYuFhI/TCodixrSjPI/AAAAAAAAAKw/iZIg_v7HeQI/s72-c/workrave.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-4905507759096130971</id><published>2010-05-06T16:08:00.013-05:00</published><updated>2010-05-07T23:10:41.388-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>[Caso de estudio] Oracle export -&gt; import usando Netcat</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;Existen muchas razones para ejecutar un export, el principal, es hacer un respaldo de la base de datos a manera de "protección" en caso de que esta se pierda. En principio, este mecanismo de respaldo es el más básico y, por supuesto, no se recomienda para bases de datos productivas de varios gigas de tamaño; para eso hay otros métodos más sofisticados que van desde el uso de RMAN hasta los respaldos a nivel filesystem como Netbackup de Veritas, EMC, etc.&lt;br /&gt;&lt;br /&gt;Otro uso común del export es trasladar un esquema o esquemas o incluso la base de datos completa de un ambiente a otro, como por ejemplo: "planchar"(hacer una copia de la base de datos) el ambiente &lt;a href="http://en.wikipedia.org/wiki/User_acceptance_testing#User_acceptance_testing"&gt;UAT&lt;/a&gt; con una copia del ambiente productivo, es decir, ejecutas un export de la base de datos productiva, se genera el archivo dump(.dmp) y ejecutas un import en la base de datos UAT. ¿Suena sencillo no? y lo es si la base de datos es relativamente pequeña, las complicaciones vienen cuando la base de datos es relativamente grande y el espacio en los filesystems no es suficiente para crear el archivo dump.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Otro uso no tan común es usar export/import para migrar una base de datos ó solo los objetos(esquemas) que interesan cuando se trata de un cambio de plataforma(sistema operativo), es decir, que si la base de datos está montada en un servidor Linux 64 bits e interesa montarla en un servidor con Solaris(SPARC) no es posible hacerlo copiando solo los archivos de base de datos de un servidor a otro como generalmente se hace cuando los servidores son de la misma plataforma, el mismo caso aplica cuando se trata de migrar de Solaris(SPARC) a HP-UX(RISC o Itanium) o viceversa. No es posible hacerlo debido al &lt;a href="http://en.wikipedia.org/wiki/Endian"&gt;ENDIAN&lt;/a&gt; que emplea cada plataforma.&lt;br /&gt;&lt;br /&gt;Haciendo a un lado la discusión del por qué cambiar de una plataforma a otra y enfocando la atención en cuales son los puntos a considerar(para migrar la base de datos de un servidor a otro) y poder llevarla a cabo en el menor tiempo posible, poniendo el caso de que se trata de una base de datos productiva relativamente grande(mayor a 1 Tb) y que no puede estar fuera de línea por un periodo largo de tiempo, se vuelve un reto con muchas vertientes.&lt;br /&gt;&lt;br /&gt;La solución ideal, revisas en la documentación de RMAN la matriz que te muestra las plataformas para las que puedes crear "tablespaces transportables" con la versión del motor de tu bd actual. Si aplica, generas los tablespaces transportables correspondientes, los cargas en la bd de la nueva plataforma, bajas la base de datos productiva, aplicas los archive logs generados en la bd productiva desde que inició la generación de los tablespaces transportables en la bd de la nueva plataforma, levantas la nueva bd, pides que hagan pruebas con la aplicación apuntando a la nueva bd para validar que funciona correctamente y es todo, no debería llevarte más de un par de horas desde que bajas la base de datos productiva hasta que las pruebas con la aplicación puedan ser dadas como satisfactorias y la bd en la nueva plataforma se convierta ahora en la bd productiva. Por supuesto que tiene que haber todo un proceso de validaciones previas para que el plan sea exitoso, y sobre todo haber ejecutado el plan tantas veces como hayan sido posibles para afinar todos los detalles, resolver los errores presentados, entre otros muchos puntos.&lt;br /&gt;&lt;br /&gt;Los puntos en contra, qué pasa si no puedes crear "tablespaces transportables" entre las dos plataformas, qué pasa si la plataforma lo permite(crear tablespaces transportables) pero no tienes espacio en los filesystems, qué pasa si la plataforma no lo permite(crear tablespaces transportables) y además no cuentas con espacio en los filesystems. Qué pasa si cuentas con el espacio suficiente y se requiere comprimir el respaldo para transferirlo por la red, qué pasa si el ancho de banda en la red no es aceptable(100 Mbps), etc., etc., etc.&lt;br /&gt;&lt;br /&gt;Las variables en este sentido hacen que el proceso se vuelva complejo y lo mejor en este caso es ponerlas sobre la mesa y consultar con la empresa la posibilidad de que adquiera estos medios(más espacio, red gigabit o mejor, etc.)&lt;br /&gt;&lt;br /&gt;Que tal si la empresa no está en posibilidad de adquirir ninguno de estos medios(más espacio, red gigabit, etc.); no en este momento quizá más por cuestiones de presupuesto que de no querer adquirirlo.&lt;br /&gt;&lt;br /&gt;La solución. Usando recursos de *nix en combinación con el export/import es posible hacer la migración directa de base de datos a base de datos sin tener que generar el archivo dump, en donde además ambos procesos corren paralelamente, es decir, que desde que el export es lanzado, la salida que genera es transferida de manera immediata vía red al servidor donde se lanzó el import aplicando los datos al instante. ¿Cool cierto?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/S-MweG1FsLI/AAAAAAAAAKU/55SCCeHWtVk/s1600/ora-netcat1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 106px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/S-MweG1FsLI/AAAAAAAAAKU/55SCCeHWtVk/s400/ora-netcat1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5468267666345406642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;¿Qué necesitas?&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Galleta(Poder de procesamiento) en ambos servidores.&lt;/li&gt;&lt;li&gt;Que la red sea velóz(mínimo Gigabit).&lt;/li&gt;&lt;li&gt;Optimizar la base de datos para el import.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ventajas&lt;/h3&gt;Si ambos servidores tienen dos o más procesadores o procesadores con cores, se pueden lanzar en paralelo dos, tres, cuatro o hasta cinco procesos export/import. De entre tantas, tienes una tabla particionada de 300 Gb la cual puedes transferir por ejemplo en tres procesos que se encarguen de 100 Gb cada uno.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/S-MweQMu5PI/AAAAAAAAAKc/uxw69ETMQWM/s1600/ora-netcat2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 110px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/S-MweQMu5PI/AAAAAAAAAKc/uxw69ETMQWM/s400/ora-netcat2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5468267668860495090" /&gt;&lt;/a&gt;&lt;br /&gt;Compresión. Mejor aún, ¿que tal si en lugar de transferir 300 Gb por la red, sólo se transfiriera un porcentaje relatívamente mínimo? Suponiendo que la tabla en cuestión contiene solo campos con tipos de datos comunes(no LOBs, ni LONGs) el nivel de compresión con gzip puede ser de hasta un 80% o mayor. Es decir, que en lugar de transferir los 300 Gb de punto a punto, se aplica compresión gzip estandar reduciendo la transferencia a 55 Gb. O todavía mejor, que tal si lo aplicas al ejemplo de los tres procesos, repartirías entonces la carga de transferencia en 18.3 Gb por cada uno. ¡Super cool! He aquí donde entra en juego la "galleta" de los servidores.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/S-MweuDoLxI/AAAAAAAAAKk/hGxPY-DSfN8/s1600/ora-netcat3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 110px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/S-MweuDoLxI/AAAAAAAAAKk/hGxPY-DSfN8/s400/ora-netcat3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5468267676875370258" /&gt;&lt;/a&gt;&lt;br /&gt;Es necesario optimizar la base de datos en donde vas a ejecutar el import, la nota en Metalink 93763.1 contiene justamente lo que debes hacer. Esta optimización SOLO es para el import, después de asegurarte de que todo ocurrió satisfactoriamente y antes de que hagas el cambio para que la nueva bd sea ahora la bd productiva, será necesario regresar los parámetros a sus valores originales.&lt;br /&gt;&lt;br /&gt;En el ejemplo de la tabla con un tamaño de 300 Gb, no tomé en cuenta los índices, es decir, solo tomo en cuenta que el tamaño de la tabla es de 300 Gb incluyendo el índice de la llave primaria, la tabla podría tener otros índices lo cual aumentaría considerablemente el volumen de transferencia, por ejemplo, si la tabla tiene además 5 índices con un tamaño en conjunto de 100 Gb, el total de transferencia sería de 400 Gb. Puesto que el objetivo es transferir lo esencial en el menor tiempo posible, es aceptable sólo transferir datos y posteriormente crear los índices en la bd destino. Generando por supuesto un script de la base de datos productiva con las sentencias para crearlos.&lt;br /&gt;&lt;br /&gt;Con dos bases de datos una en 9i(origen) y la otra en 10g(destino) montadas en servidores HP-UX y una red a 100 Mbps, los números obtenidos para transferir un esquema completo de 2.3 Gb son:&lt;br /&gt;&lt;br /&gt;Datos + índices + bd destino sin optimizar:&lt;table cellspacing="0" cellpadding="3"&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;Mb Totales&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;Método de compresión&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;Tiempo de transferencia&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2,336&lt;/td&gt;&lt;td&gt;compress&lt;/td&gt;&lt;td&gt;362 Mb&lt;/td&gt;&lt;td align="right"&gt;16:16 Min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2,336&lt;/td&gt;&lt;td&gt;gzip&lt;/td&gt;&lt;td&gt;254 Mb&lt;/td&gt;&lt;td align="right"&gt;15:33 min&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Datos - índices + bd destino optimizada:&lt;table cellspacing="0" cellpadding="3"&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;Mb Totales&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;Método de compresión&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;Tiempo de transferencia&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1,387&lt;/td&gt;&lt;td&gt;compress&lt;/td&gt;&lt;td&gt;361 Mb&lt;/td&gt;&lt;td align="right"&gt;07:01 Min&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1,387&lt;/td&gt;&lt;td&gt;gzip&lt;/td&gt;&lt;td&gt;254 Mb&lt;/td&gt;&lt;td align="right"&gt;06:12 min&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Como se puede observar, el volumen de bytes transferido es casi el mismo con o sin índices, sin embargo, la diferencia está en el tiempo de transferencia la cual se reduce en un poco más del 50%. El ejercicio incluye también la comparación empleando dos métodos de compresión, siendo el más eficiente gzip tanto en bytes como en tiempo.&lt;br /&gt;&lt;br /&gt;De acuerdo con Oracle, un import dura aproximadamente entre 2 y 2.5 veces la duración del export. En el caso del ejemplo, el tiempo de transferencia mostrado en las tablas es el tiempo que dura el import, más bien ambos, tanto el export como el import, de ahí que el mejor escenario sea de 6 minutos con 12 segundos(export/import optimizado) y el peor escenario sea de 15 minutos con 33 segundos(export/import tradicional), lo cual si lo aplicas a un ambiente de base de datos real en el orden de los cientos de gigas vemos que la diferencia es bastante considerable sobre todo por el hecho de que la migración se hace en un solo paso y dependes solamente del poder de procesamiento de los servidores y la velocidad de la red, ¿y el espacio en disco? ya no es ningún problema.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Desventajas&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Este método no funciona con Data Pump&lt;/li&gt;&lt;li&gt;Si la transferencia es interrumpida debido a problemas en la red, se tiene que reiniciar el proceso desde cero.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-4905507759096130971?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/4905507759096130971/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2010/05/caso-de-estudio-oracle-export-import.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4905507759096130971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4905507759096130971'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2010/05/caso-de-estudio-oracle-export-import.html' title='[Caso de estudio] Oracle export -&gt; import usando Netcat'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-1889938478654511200</id><published>2009-12-15T11:05:00.009-06:00</published><updated>2009-12-15T11:16:21.901-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Algunos consejos al desarrollador de PL/SQL - Última parte</title><content type='html'>&lt;img style="margin: 5px 0px 0px 10px; float: right; width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5364399772137510626" /&gt;&lt;div style="text-align: justify;"&gt;&lt;h3&gt;Toma un enfoque creativo, radical inclusive&lt;/h3&gt;La mayoría tendemos a caer en rutinas, en casi cualquier aspecto de nuestras vidas. Las personas son criaturas de hábitos: aprendes a escribir código de una manera; asumes ciertas limitaciones sobre el producto; dejas a un lado posibles soluciones sin una revisión más seria porque sabes que no se puede hacer. Los desarrolladores se vuelven abiertamente prejuiciosos incluso con sus propios programas, y muchas veces no de manera positiva. A menudo se les oye decir cosas como:&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;ul&gt;&lt;li&gt;"Ya no puede ejecutarse más rápido; es un asco"&lt;/li&gt;&lt;li&gt;"No puedo hacer que funcione como quiere el usuario; tendrá que esperar hasta la siguiente versión"&lt;/li&gt;&lt;li&gt;"Si usara X o Y o tal producto, quedaría al instante. Pero con este, solo se batalla"&lt;/li&gt;&lt;/ul&gt;En la realidad tu programa casi siempre puede ejecutarse un poco más rápido. Y que puede, de hecho, funcionar &lt;span style="font-style:italic;"&gt;justo&lt;/span&gt; de la manera que el usuario desea. Y aunque cada producto tiene sus limitaciones, fortalezas y debilidades, nunca deberías tener que esperar hasta la siguiente versión. ¿No es más gratificante poder decirle a tu terapista que le entraste al problema de frente, que no pusiste excusas, y armaste una solucion?&lt;br /&gt;&lt;br /&gt;¿Cómo lo logras? Echa abajo esa barrera de las mismas soluciones de siempre y dale una mirada fresca al mundo (o tal vez solo a tu cubículo). Revalora tus hábitos de programación. Sé creativo—apártate de los métodos rutinarios, de los enfoques mecánicos y limitados que son reforzados constantemente en nuestros lugares de trabajo.&lt;br /&gt;&lt;br /&gt;Intenta algo nuevo: experimenta con lo que parezca ser un cambio radical a lo de siempre. Te sorprenderás de cuanto aprenderás y crecerás como programador y solucionador de problemas. A través de los años -dice Steven-, me he sorprendido una y otra vez de hasta donde puedes llegar cuando de repente dices "¡Eso no se puede hacer!" en lugar de simplemente asentir y murmurar, "Veamos, si lo hago de esta manera..."&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-1889938478654511200?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/1889938478654511200/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/12/algunos-consejos-al-desarrollador-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/1889938478654511200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/1889938478654511200'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/12/algunos-consejos-al-desarrollador-de.html' title='Algunos consejos al desarrollador de PL/SQL - Última parte'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-8624850361471847965</id><published>2009-11-02T20:23:00.004-06:00</published><updated>2009-11-02T20:29:43.772-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Algunos consejos al desarrollador de PL/SQL - 2da parte</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;&lt;h3&gt;Que no te de miedo pedir ayuda&lt;/h3&gt;Es probable que, si eres un profesional del software, seas una persona muy inteligente. Estudiaste muy duro, perfeccionaste tus habilidades y ahora te das la buena vida escribiendo código. Resuelves casi cualquier problema que tocas y eso te enorgullece. Desafortunadamente, el éxito puede también hacerte egoísta, arrogante, y renuente a pedir ayuda cuando te atoras. Esta dinámica es uno los aspectos más peligrosos y destructivos del desarrollo de software.&lt;br /&gt;&lt;br /&gt;El software es escrito por seres humanos; y por lo tanto, es importante reconocer que la psicología humana juega un papel importante en el desarrollo de software. Un ejemplo de esto es el siguiente.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Joe, un desarrollador con antigüedad en un equipo de seis, tiene un problema con su código. Lo ha revisado por horas, incrementando su frustración y sin poder encontrar donde está el bug. No se le ocurre ni siquiera pensar el pedir ayuda a sus compañeros porque ninguno de ellos tiene la experiencia de él. Finalmente, su cabeza no le da más y termina "dándose por vencido". Suspirando, levanta su teléfono y marca una extensión: "Sandra, ¿podrías venir y darle una revisada a mi código? tengo un problema el cual no encuentro en donde puede estar". Sandra pasa por su lugar y, de una rápida revisada al código de Joe, señala lo que para él debió ser obvio desde hace mucho. ¡Hurra! El código funciona, y Joe le da las gracias, aunque de hecho se siente apenado en su interior.&lt;br /&gt;&lt;br /&gt;Pensamientos como "¿Cómo es que no lo vi antes?" y "Si hubiera pasado otros cinco minutos haciendo mis pruebas lo hubiera encontrado" pasan por la mente de Joe. Es entendible aunque también muy estúpido. El punto aquí es que con frecuencia no alcanzamos a ver nuestros problemas porque estamos muy metidos en nuestro propio código. Algunas veces todo lo que necesitamos es una nueva perspectiva, la visión relativamente objetiva de alguien sin nada en juego. No tiene nada que ver con la antigüedad, pericia o competencia.&lt;br /&gt;&lt;br /&gt;Steven recomienda fuertemente establecer dentro de la organización los siguientes lineamientos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Retribuye admisiones de ignorancia&lt;/span&gt;&lt;br /&gt;Ocultar lo que no sabes acerca de una aplicación o su código es muy peligroso. Desarrolla una cultura de preguntas y peticiones de ayuda.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Pide ayuda&lt;/span&gt;&lt;br /&gt;Si no puedes encontrar la causa de un bug en 30 minutos, pide ayuda inmediata. Puedes incluso idear un "sistema amigo", de tal manera que cada quien tiene asignado a alguien del grupo a quien &lt;span style="font-style:italic;"&gt;se espera&lt;/span&gt; se le pida soporte. No te permitas (o a otros en tu grupo) estar por horas golpeándote contra la pared en una infructuosa búsqueda de respuestas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Establece un proceso de revisión de código por un compañero&lt;/span&gt;&lt;br /&gt;No permitas que ningún código se suba a producción sin que sea leído y criticado (en una manera positiva y constructiva) por uno o más desarrolladores en tu equipo&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-8624850361471847965?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/8624850361471847965/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/11/algunos-consejos-al-desarrollador-de.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8624850361471847965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/8624850361471847965'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/11/algunos-consejos-al-desarrollador-de.html' title='Algunos consejos al desarrollador de PL/SQL - 2da parte'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-1099781507955928142</id><published>2009-10-31T14:15:00.000-06:00</published><updated>2009-10-31T14:33:06.527-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Algunos consejos al desarrollador de PL/SQL - 1ra parte</title><content type='html'>&lt;img style="margin: 5px 0px 0px 10px; float: right; width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5364399772137510626" /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight:bold;"&gt;Leyendo el libro de Steven Feuerstein Oracle PL/SQL Programming 5ta ed. -el cual es dicho sea de paso material de referencia altamente recomendado para quienes desarrollan en PL- comparte los siguientes consejos que en su opinión son el resultado de haber capacitado, enseñar y trabajar con miles de desarrolladores en PL y en cuyo proceso ha obtenido algunas conclusiones sobre la forma en la que todos hacemos nuestro trabajo en el mundo de PL/SQL.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;¡No desarrolles a las prisas!&lt;/h3&gt;Casi siempre estamos trabajando con tiempos de entrega apretados, o poniéndonos al día por alguno que otro contratiempo. No tenemos tiempo que perder y si mucho código que escribir. Asi que manos a la obra—¿cierto?&lt;br /&gt;&lt;br /&gt;Falso. Si nos metemos así de pronto y de lleno a construir código convirtiendo al pie de la letra los requerimientos en cientos, miles o incluso cientos de miles de líneas de código, vamos a terminar con un caos total que es casi imposible de depurar y mantener.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;No hay que entrar en pánico ante las fechas de entrega; lo más probable es que cumplas si haces una cuidadosa planeación.&lt;br /&gt;&lt;br /&gt;Steven recomienda a resistir la presión de la entrega y a asegurarse de hacer lo siguiente antes de comenzar una nueva aplicación, o inclusive alguna parte específica de la aplicación:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Construir casos y scripts de prueba antes de escribir el código&lt;/span&gt;&lt;br /&gt;Debes determinar como vas a verificar una implementación exitosa antes de escribir una sola línea código del programa. Haciéndolo, es más probable que la interfaz de tu programa sea la correcta, e identifiques plenamente qué es lo que tu programa necesita hacer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Establecer reglas claras de como los desarrolladores escribirán las sentencias SQL en la aplicación&lt;/span&gt;&lt;br /&gt;En general, Steven no recomienda que cada desarrollador escriba montones de SQL. En vez de eso, los queries que regresan un solo registro, inserts y updates deberían estar "ocultos" en procedimientos y funciones preconstruídos y bien probados (llamado &lt;span style="font-style:italic;"&gt;encapsulamiento de información&lt;/span&gt;). Estos programas se pueden probar, optimizar y mantener de una manera más efectiva que solo sentencias SQL (algunas de ellas redundantes) desparramadas por todo el código.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Establecer reglas claras de como los desarrolladores manejarán las excepciones en la aplicación&lt;/span&gt;&lt;br /&gt;Todos los desarrolladores del equipo deberían lanzar, manejar y registrar los errores de la misma manera. Para lograrlo, lo mejor es crear un solo paquete de manejo-de-errores que oculte los detalles de como se registran estos, que establezca como se lanzan y propagan las excepciones hacia arriba a través de bloques anidados, y que evite la codificación en duro de excepciones específicas-de-la-aplicación. Asegurarse de que todos usen ese paquete y que &lt;span style="font-style:italic;"&gt;no&lt;/span&gt; escriban su propio código de manejo de errores complicado, que consume tiempo y que es propenso a errores.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Usar el "refinamiento paso a paso" (también llamado diseño top-down) para limitar la complejidad de los requerimientos a enfrentar en un momento dado&lt;/span&gt;&lt;br /&gt;Si utilizas este enfoque, verás que las partes ejecutables de tus módulos son cortos y fáciles de entender, lo que hace que el código sea fácil de mantener y de mejorarlo con el tiempo. Los módulos locales o anidados juegan un papel clave en el seguimiento de este principio de diseño.&lt;br /&gt;&lt;br /&gt;Estas son solo unas cuantas cosas importantes a tener en cuenta para &lt;span style="font-style:italic;"&gt;antes&lt;/span&gt; de comenzar a escribir todo ese código. Solo recuerda: en el mundo del desarrollo de software, la prisa no solo hace cosas frágiles, prácticamente garantiza un generoso ofrecimiento de bugs y de fines de semana perdidos.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-1099781507955928142?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/1099781507955928142/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/10/algunos-consejos-1ra-parte.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/1099781507955928142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/1099781507955928142'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/10/algunos-consejos-1ra-parte.html' title='Algunos consejos al desarrollador de PL/SQL - 1ra parte'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-5668247279859038669</id><published>2009-09-03T12:01:00.021-05:00</published><updated>2009-09-03T18:48:50.636-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Fundamentos de Rendimiento de Software - Referencia rápida</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Muchas veces cuando nos ponemos a programar nos olvidamos que no solo se trata de escribir líneas de código que "hagan algo" y ya, nos olvidamos que el ambiente de desarrollo en el que trabajamos no tiene ni la décima parte de la carga de trabajo que tiene un ambiente productivo y es en este último que sucede lo que no consideramos -en el peor de los casos- y tenemos que hacer una revisión de los puntos donde podría estarse presentando el cuello de botella. Leyendo una entrada en el blog de Cary Millsap me encontré con lo que él llama una &lt;a href="http://carymillsap.blogspot.com/2009/07/fundamentals-of-software-performance.html"&gt;"Referencia rápida sobre los Fundamentos de Rendimiento del Software"&lt;/a&gt; de los términos que deberíamos tener presentes cuando algo no funciona eficientemente.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Glosario&lt;/h3&gt;&lt;b&gt;eficiencia&lt;/b&gt; Es la medida de cuantos recursos está consumiendo la ejecución de una tarea. Eficiencia es lo inverso a cuanto del tiempo total de servicio de la ejecución de la tarea puede eliminarse sin incrementar su capacidad ni sacrificar la función de negocio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ocupación&lt;/b&gt; Es el valor de utilización de un recurso cuya tasa de transferencia se maximiza con un mínimo impacto en los tiempos de respuesta. El valor de ocupación para un número dado de canales de servicio es menor o igual que el valor mostrado a continuación:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="3" cellspacing="0" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-top-width: medium;border-top-style: solid;"&gt;# de canales de servicio&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;1&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;2&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;4&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;8&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;16&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;32&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;64&lt;/td&gt;&lt;td style="border-top-width: medium;border-top-style: solid;" align="center"&gt;128&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;" align="center"&gt;Ocupación&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;50%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;57%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;66%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;74%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;81%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;86%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;89%&lt;/td&gt;&lt;td style="border-bottom-width: medium;border-bottom-style: solid;"&gt;92%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;carga&lt;/b&gt; Competencia por un recurso inducido por las ejecuciones concurrentes de tareas, medida como utilización.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;rendimiento&lt;/b&gt; Velocidad de ejecución de la tarea, medido ya sea como tasa de transferencia o tiempo de respuesta.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;perfil&lt;/b&gt; Descomposición tabular del tiempo de respuesta, listado comúnmente en orden descendente de la aportación del tiempo de respuesta del componente.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;demora en la cola&lt;/b&gt; Duración que una tarea pasa encolada en un recurso dado, a la espera de su oportunidad de consumirlo, medido en tiempo de ejecución por tarea: &lt;i&gt;segundos por click&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tiempo de respuesta&lt;/b&gt; Duración de ejecución de una tarea, medido en tiempo por tarea: &lt;i&gt;segundos por click&lt;/i&gt;. El tiempo de respuesta es la suma de la demora en la cola y el tiempo de servicio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;diagrama de secuencia&lt;/b&gt; Es un diagrama especificado en el Lenguaje de Modelado Unificado (UML), usado para mostrar las interacciones entre objetos en el orden secuencial en que estas ocurren.  Este diagrama es útil para visualizar el tiempo de respuesta.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;canal de servicio&lt;/b&gt; Un sub-recurso que comparte una sola cola con otros sub-recursos, como una cabina de cuota en un centro comercial o un CPU en una computadora SMP.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tiempo de servicio&lt;/b&gt; Duración que una tarea pasa consumiendo un recurso dado, medido en tiempo por ejecución de tarea: &lt;i&gt;segundos por click&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tarea&lt;/b&gt; Unidad de trabajo orientada al negocio. Éstas pueden anidarse: &lt;i&gt;imprimir facturas&lt;/i&gt; es una tarea; &lt;i&gt;imprimir una factura&lt;/i&gt;—subtarea— es también un tarea.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tasa de transferencia&lt;/b&gt; Conteo de las ejecuciones completadas por la tarea dentro de un intervalo específico de tiempo: &lt;i&gt;clicks por segundo&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;utilización&lt;/b&gt; Uso de recurso dividido por capacidad por un intervalo de tiempo específico; una medida cuantitativa de carga.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;h3&gt;Principios&lt;/h3&gt;1. Un &lt;i&gt;diagrama de secuencia&lt;/i&gt; es una herramienta útil para conceptualizar el tiempo de respuesta, sin embargo, para tareas que ejecutan miles de invocacioes (incluso docenas), es más útil el &lt;i&gt;perfil&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;2. La tasa de transferencia es el recíproco del tiempo de respuesta. Si agregas carga para crear altas tasas de transferencia &lt;i&gt;cambias&lt;/i&gt; el tiempo de respuesta ya que añades &lt;i&gt;espera en la cola&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;3. La diferencia entre el tiempo de respuesta de una tarea que tiene un recurso con carga ligera y su tiempo de respuesta con carga pesada es la espera en la cola.&lt;br /&gt;&lt;br /&gt;4. La duración de una tarea en la cola para obtener un recurso depende del número de &lt;i&gt;canales de servicio&lt;/i&gt; de ese recurso además de su &lt;i&gt;carga&lt;/i&gt;:&lt;br /&gt;&lt;ol type="a"&gt;&lt;li&gt;Agregar canales de servicio reduce la espera en la cola para una carga dada. Sin embargo, el beneficio disminuye cuando los agregas.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Reducir la carga disminuye la espera en la cola para una determinada arquitectura. No hay un límite de escalabilidad para reducir la carga&lt;/li&gt;&lt;/ol&gt;5. La ocupación es el valor de utilización que define el umbral entre carga ligera y carga pesada sobre un recurso.&lt;br /&gt;&lt;ol type="a"&gt;&lt;li&gt;En un recurso con carga pesada, los tiempos de respuesta se degradan exponencialmente cuando la carga crece.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;En un recurso con carga pesada, los tiempos de respuesta mejoran exponencialmente cuando la carga disminuye&lt;/li&gt;&lt;/ol&gt;6. Para sistemas con peticiones de servicio de tiempo aleatorio, permitir excesivas cargas sostenidas en los recursos con respecto al valor de ocupación resulta en tiempos de respuesta severamente degradados y tasas de transferencia que fluctúan constantemente con cambios microscópicos en la carga.&lt;br /&gt;&lt;br /&gt;7. Para un conjunto de recursos de una computadora, no se puede mejorar el rendimiento haciendo que el código se &lt;i&gt;ejecute velózmente&lt;/i&gt;; se puede mejorar el rendimiento &lt;i&gt;solamente&lt;/i&gt; eliminando las instrucciones innecesarias en el código, o en el código que compite contra tu código para hacerse de recursos.&lt;br /&gt;&lt;br /&gt;8. Mejorar el enfoque de tu código de manera eficiente reduce el tiempo de servicio &lt;i&gt;y&lt;/i&gt; carga, los cuales mejoran el tiempo de respuesta, los cuales mejoran exponencialmente el rendimiento en recursos con demasiada carga pesada.&lt;br /&gt;&lt;br /&gt;9. No se puede optimizar la tasa de transferencia de una tarea ineficaz. Para analizar la eficiencia de una tarea, se debe analizar su tiempo de respuesta. De aquí que, para optimizar la tasa de transferencia primero se debe analizar el tiempo de respuesta.&lt;br /&gt;&lt;br /&gt;10. No le atinarás a la primera en donde es que un programa consume su tiempo, y que es ineficaz tratar de optimizar cualquier cosa que le veas. Analizar su comportamiento ayuda a escribir código que sea más veloz.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-5668247279859038669?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/5668247279859038669/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/09/fundamentos-de-rendimiento-de-software.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5668247279859038669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5668247279859038669'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/09/fundamentos-de-rendimiento-de-software.html' title='Fundamentos de Rendimiento de Software - Referencia rápida'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-6946905215984102378</id><published>2009-08-05T22:24:00.014-05:00</published><updated>2009-08-05T23:24:28.797-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Creador y colaboradores de CentOS llegan a acuerdo</title><content type='html'>&lt;div style="text-align: justify;"&gt;Vaya que sí resonó la carta publicada por el equipo de desarrolladores del proyecto CentOS ya que finalmente estos y Lance Davis se reunieron para llegar a acuerdos sobre los puntos mencionados en un post anterior donde los primeros solicitaban entre otros puntos, el que hubiera un delegado tanto para la administración del dominio 'centos.org' como de los canales IRC.&lt;br /&gt;&lt;br /&gt;Ahora el proyecto está en control de los dominios 'centos.org' y 'centos.info', además de tener todos los derechos sobre las marcas registradas, materiales y trabajo gráfico contenido en las distribuciones de CentOS.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Por supuesto que no muere el proyecto, hay un plan de acción elaborado de mutuo acuerdo para los casos extraordinarios.&lt;br /&gt;&lt;br /&gt;El proyecto es llevado completamente por voluntarios y están conscientes de que requiere un estilo diferente de administración. Han y continúan trabajando para evitar que situaciones como estas ocurran en el futuro.&lt;br /&gt;&lt;br /&gt;Los desarrolladores están completamente comprometidos con el proyecto, por lo que seguiremos viendo actualizaciones sobre las versiones actuales, esperando también, por supuesto, nuevos releases.&lt;br /&gt;&lt;br /&gt;Enhorabuena&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-6946905215984102378?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/6946905215984102378/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/08/creador-y-colaboradores-de-centos.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/6946905215984102378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/6946905215984102378'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/08/creador-y-colaboradores-de-centos.html' title='Creador y colaboradores de CentOS llegan a acuerdo'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-5824526972302264513</id><published>2009-07-30T18:34:00.006-05:00</published><updated>2009-08-05T23:25:04.060-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>¿Adiós a CentOS?</title><content type='html'>&lt;img style="margin: 5px 0px 0px 10px; float: right; width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SnItK8NxVuI/AAAAAAAAAJo/QJdRx5RKwXI/s320/linux.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5364399772137510626" /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.centos.org/"&gt;CentOS&lt;/a&gt; es una distro Linux -nacida del código fuente del Red Hat Enterprise(RHEL)- el cual cobró fuerza cuando Red Hat comenzó a comercializar su sistema operativo por medio de lincencias de uso y de soporte. CentOS por su parte surge como una alternativa de software libre ofreciendo la calidad y robustes de RHEL sin pagar costosas licencias y pólizas de soporte sosteniéndo el proyecto únicamente a base de donaciones.&lt;br /&gt;&lt;br /&gt;El día de hoy el equipo base de desarrolladores de este proyecto, hizo pública una carta dirigida a su fundador Lance Davis.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;blockquote&gt;Julio 30, 2009 04:39 GMT&lt;br /&gt;&lt;br /&gt;Carta abierta a Lance Davis de los miembros que desarrollan CentOS.&lt;br /&gt;&lt;br /&gt;Es lamentable que nos veamos obligados a escribir esta carta no nos quedó otra opción. De algún tiempo a la fecha hemos tratado de arreglar estos problemas:&lt;br /&gt;&lt;br /&gt;Parece que te arrastraste hacia un agujero ... y no es aceptable.&lt;br /&gt;&lt;br /&gt;Por mucho tiempo diste por hecho que habría fondos para el proyecto CentOS; al día de hoy no hemos visto nada.&lt;br /&gt;&lt;br /&gt;Sólo tú tienes control del dominio 'centos.org' sin nadie más delegado; no es lo apropiado.&lt;br /&gt;&lt;br /&gt;Sólo tú, así parece, eres el único que tiene privilegios de 'Fundador' en los canales de IRC sin nadie más delegado; no es lo apropiado.&lt;br /&gt;&lt;br /&gt;Cuando traté de comunicarme (Russ) a los números telefónicos de Linux UK o a tu número, he escuchado el mensaje 'Líneas temporalmente ocupadas' durante las últimas dos semanas. Finalmente ayer, me respondió una máquina contestadora en la cual te dejé un mensaje solicitando que me regreses la llamada con caracter urgente. Karanbir reportó que también te ha llamado dejándote mensajes sin respuesta.&lt;br /&gt;&lt;br /&gt;Por favor no mates CentOS sólo por el hecho de tener miedo en querer compartir la administración del proyecto.&lt;br /&gt;&lt;br /&gt;Está claro que el proyecto muere si todos los desarrolladores se van.&lt;br /&gt;&lt;br /&gt;Contáctame de favor, o a cualquiera de los demás que firman esta carta para ponernos de acuerdo sobre la información arriba mencionada y mantener vivo el proyecto con el dominio 'centos.org'.&lt;br /&gt;&lt;br /&gt;Firman,&lt;br /&gt;&lt;br /&gt;Russ Herrold&lt;br /&gt;Ralph Angenendt&lt;br /&gt;Karanbir Singh&lt;br /&gt;Jim Perrin&lt;br /&gt;Donavan Nelson&lt;br /&gt;Tim Verhoeven&lt;br /&gt;Tru Huynh&lt;br /&gt;Johnny Hughes&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;CentOS ha sido adoptado por empresas de todos los calibres demostrando su calidad, sería una verdadera pena que por actitudes de esta naturaleza pudiera ver su fin un proyecto tan bueno como este.&lt;br /&gt;&lt;br /&gt;Vía&lt;br /&gt;&lt;a href="http://www.cyberciti.biz/tips/centos-linux-project-in-trouble.html"&gt;CentOS Linux Project In Trouble&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-5824526972302264513?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/5824526972302264513/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/07/adios-centos.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5824526972302264513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5824526972302264513'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/07/adios-centos.html' title='¿Adiós a CentOS?'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SnItK8NxVuI/AAAAAAAAAJo/QJdRx5RKwXI/s72-c/linux.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2961775255745751885</id><published>2009-07-15T16:55:00.011-05:00</published><updated>2009-07-15T18:32:44.996-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>¿Quien bloqueó mi sesión?</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight:bold;"&gt;Recientemente me encontré con el siguiente &lt;a href="http://www.orafaq.com/node/854" target="_blank"&gt;artículo de Natalka Roshak&lt;/a&gt; publicado en orafaq.com que espero les sea de utilidad.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cuando un usuario o desarrollador te dice que tiene su sesión bloqueada, —entendiendo por bloqueo la ejecución de una instrucción &lt;a href="http://en.wikipedia.org/wiki/Data_Manipulation_Language"&gt;DML&lt;/a&gt; la cual después de lanzarla deja de responder— sabes cuan útil puede ser identificar no solo quien lo está haciendo, sino también cual objeto es ó mejor aún, puedes identificar el registro exacto que tu sesión está esperando bloquear.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Creando el bloqueo&lt;/h3&gt;Usaré la tabla &lt;span style="font-family:courier new;"&gt;emp&lt;/span&gt; del esquema &lt;span style="font-family:courier new;"&gt;SCOTT&lt;/span&gt;. Abro una sesión de SQL*Plus y configuro los siguiente parámetros&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt; set sqlprompt "SESION1&amp;gt; "&lt;br /&gt;SESION1&amp;gt; set linesize 200&lt;/div&gt;&lt;br /&gt;actualizo todos los registros&lt;br /&gt;&lt;div class="code_block"&gt;SESION1&amp;gt;&amp;nbsp;update&amp;nbsp;emp&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;set&amp;nbsp;sal=1000*1.05;&lt;br /&gt;&lt;br /&gt;14 rows updated.&lt;/div&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;span style="font-weight:bold;"&gt;sin dar commit&lt;/span&gt; abro otra sesión de SQL*Plus actualizo la variable&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;set&amp;nbsp;sqlprompt&amp;nbsp;"SESION2&amp;gt;&amp;nbsp;"&lt;br /&gt;SESION2&amp;gt;&lt;/div&gt;&lt;br /&gt;y en esta actualizo sólo un registro&lt;br /&gt;&lt;div class="code_block"&gt;SESION2&amp;gt;&amp;nbsp;update&amp;nbsp;emp&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;set&amp;nbsp;sal=1000&lt;br /&gt;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;where&amp;nbsp;empno=7369;&lt;/div&gt;&lt;br /&gt;después de presionar ENTER no regresa de immediato al prompt, he aquí el bloqueo.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Identificando la sesión que está bloqueando&lt;/h3&gt;En una nueva sesión de SQL*Plus revisas el contenido de &lt;span style="font-family:courier new;"&gt;v$lock&lt;/span&gt; que muestra los bloqueos que existen actualmente en la base así como la relación entre quien bloquea a quien aunque no de manera explícita&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;v$lock;&lt;br /&gt;&lt;br /&gt;ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SID&amp;nbsp;TY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID2&amp;nbsp;&amp;nbsp;&amp;nbsp;LMODE&amp;nbsp;&amp;nbsp;&amp;nbsp;REQUEST&amp;nbsp;&amp;nbsp;&amp;nbsp;CTIME&amp;nbsp;&amp;nbsp;&amp;nbsp;BLOCK&lt;br /&gt;--------&amp;nbsp;--------&amp;nbsp;-------&amp;nbsp;--&amp;nbsp;-------&amp;nbsp;-------&amp;nbsp;-------&amp;nbsp;---------&amp;nbsp;-------&amp;nbsp;-------&lt;br /&gt;........&amp;nbsp;........&amp;nbsp;.......&amp;nbsp;..&amp;nbsp;.......&amp;nbsp;.......&amp;nbsp;.......&amp;nbsp;.........&amp;nbsp;.......&amp;nbsp;.......&lt;br /&gt;2887B03C&amp;nbsp;2887B068&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;144&amp;nbsp;TX&amp;nbsp;&amp;nbsp;196639&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3891&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;0E3CBE90&amp;nbsp;0E3CBEC0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;144&amp;nbsp;TM&amp;nbsp;&amp;nbsp;&amp;nbsp;69948&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;0E3CBE90&amp;nbsp;0E3CBEC0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;137&amp;nbsp;TM&amp;nbsp;&amp;nbsp;&amp;nbsp;69948&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;570&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;27CF5D14&amp;nbsp;27CF5D54&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;137&amp;nbsp;TX&amp;nbsp;&amp;nbsp;196639&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3891&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;570&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;observa la última columna &lt;span style="font-family:courier new;"&gt;BLOCK&lt;/span&gt;, si una sesión mantiene un bloqueo que a su vez bloquea a otra verás que &lt;span style="font-family:courier new;"&gt;BLOCK=1&lt;/span&gt;. Llendo más allá, puedes ver cuál sesión es la que está siendo bloqueada comparando &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;ID2&lt;/span&gt;. La sesión bloqueada tendrá los mismos valores en &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;ID2&lt;/span&gt; que la que bloquea, y, ya que está haciendo la petición de bloqueo que no puede obtener, tendrá &lt;span style="font-family:courier new;"&gt;REQUEST&gt;0&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En el query anterior puedes ver que el SID 137 está bloqueando al SID 144. SID 137 corresponde a SESION1 y SID 144 es SESION2 que está bloqueada.&lt;br /&gt;&lt;br /&gt;Para no hacer la comparación sólo viendo los datos de ese query puedes ejecutar lo siguiente&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;select&amp;nbsp;l1.sid&amp;nbsp;||&amp;nbsp;'&amp;nbsp;ESTA&amp;nbsp;BLOQUEANDO&amp;nbsp;'&amp;nbsp;||&amp;nbsp;l2.sid&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;from&amp;nbsp;v$lock&amp;nbsp;l1,&amp;nbsp;v$lock&amp;nbsp;l2&lt;br /&gt;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;where&amp;nbsp;l1.block&amp;nbsp;=&amp;nbsp;1&lt;br /&gt;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;and&amp;nbsp;l2.request&amp;nbsp;&gt;&amp;nbsp;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;and&amp;nbsp;l1.id1&amp;nbsp;=&amp;nbsp;l2.id1&lt;br /&gt;&amp;nbsp;&amp;nbsp;6&amp;nbsp;and&amp;nbsp;l1.id2&amp;nbsp;=&amp;nbsp;l2.id2;&lt;br /&gt;&lt;br /&gt;L1.SID||'ESTABLOQUEANDO'||L2.SID&lt;br /&gt;-----------------------------------&lt;br /&gt;137&amp;nbsp;ESTA&amp;nbsp;BLOQUEANDO&amp;nbsp;144&lt;/div&gt;&lt;br /&gt;ó mejor aún, si se incluye la tabla &lt;span style="font-family:courier new;"&gt;v$session&lt;/span&gt; la información es aún más legible&lt;br /&gt;&lt;div class="code_block"&gt;SQL&gt;&amp;nbsp;select&amp;nbsp;s1.username&amp;nbsp;||&amp;nbsp;'@'&amp;nbsp;||&amp;nbsp;s1.machine&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;||&amp;nbsp;'&amp;nbsp;(&amp;nbsp;SID='&amp;nbsp;||&amp;nbsp;s1.sid&amp;nbsp;||&amp;nbsp;'&amp;nbsp;)&amp;nbsp;esta&amp;nbsp;bloqueando&amp;nbsp;'&lt;br /&gt;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;||&amp;nbsp;s2.username&amp;nbsp;||&amp;nbsp;'@'&amp;nbsp;||&amp;nbsp;s2.machine&amp;nbsp;||&amp;nbsp;'&amp;nbsp;(&amp;nbsp;SID='&amp;nbsp;||&amp;nbsp;s2.sid&amp;nbsp;||&amp;nbsp;'&amp;nbsp;)&amp;nbsp;'&amp;nbsp;as&amp;nbsp;estado_bloqueos&lt;br /&gt;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;from&amp;nbsp;v$lock&amp;nbsp;l1,&amp;nbsp;v$session&amp;nbsp;s1,&amp;nbsp;v$lock&amp;nbsp;l2,&amp;nbsp;v$session&amp;nbsp;s2&lt;br /&gt;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;where&amp;nbsp;s1.sid&amp;nbsp;=&amp;nbsp;l1.sid&lt;br /&gt;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;and&amp;nbsp;s2.sid&amp;nbsp;=&amp;nbsp;l2.sid&lt;br /&gt;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;and&amp;nbsp;l1.block&amp;nbsp;=&amp;nbsp;1&lt;br /&gt;&amp;nbsp;&amp;nbsp;8&amp;nbsp;&amp;nbsp;and&amp;nbsp;l2.request&amp;nbsp;&gt;&amp;nbsp;0&lt;br /&gt;&amp;nbsp;&amp;nbsp;9&amp;nbsp;&amp;nbsp;and&amp;nbsp;l1.id1&amp;nbsp;=&amp;nbsp;l2.id1&lt;br /&gt;&amp;nbsp;10&amp;nbsp;&amp;nbsp;and&amp;nbsp;l2.id2&amp;nbsp;=&amp;nbsp;l2.id2;&lt;br /&gt;&lt;br /&gt;ESTADO_BLOQUEOS&lt;br /&gt;-------------------------------------------------------------------------------------------&lt;br /&gt;SCOTT@TESTSERVER&amp;nbsp;(&amp;nbsp;SID=137&amp;nbsp;)&amp;nbsp;esta&amp;nbsp;bloqueando&amp;nbsp;SCOTT@TESTSERVER&amp;nbsp;(&amp;nbsp;SID=144&amp;nbsp;)&lt;/div&gt;&lt;br /&gt;Hay aún más información en la tabla &lt;span style="font-family:courier new;"&gt;v$lock&lt;/span&gt;, pero para leerla, es neceario entender un poquito más sobre los tipos de bloqueos y los crípticas columnas &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;ID2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Tipo de bloqueo y las columnas ID1 / ID2&lt;/h3&gt;En este caso el tipo de bloqueo es DML exclusivo ya que fuí yo quien lanzó la instrucción que bloquea. Sin embargo, su puede obtener esta información de &lt;span style="font-family:courier new;"&gt;v$lock&lt;/span&gt; sin tanto esfuerzo.&lt;br /&gt;&lt;br /&gt;Lo primero es ver la columna &lt;span style="font-family:courier new;"&gt;TYPE&lt;/span&gt;. Hay decenas de tipos de bloqueos, sin embargo, la gran mayoría son de sistema. Estos últimos por lo general son muy breves y no ayuda mucho ajustar el library cache, undo logs, etc. si te metes con &lt;span style="font-family:courier new;"&gt;v$lock&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Sólo hay tres tipos de bloqueos de usuario, TX, TM y UL. UL es un bloqueo definido por el usuario —aquel definido con el paquete DBMS_LOCK. TX es un bloqueo de transacción de registros; se obtiene cada vez que hay una transacción para alterar datos, sin importar la cantidad de objetos que intervendrán en esa transacción. Las columnas &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;ID2&lt;/span&gt; apuntan a los segmentos de rollback y a la tabla de entradas de transacciones de esa transacción.&lt;br /&gt;&lt;br /&gt;TM es un bloqueo DML. Se obtiene cada vez que un objeto es alterado. La columna &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; identifica el objeto en cuestión.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Modos de bloqueo&lt;/h3&gt;Se puede ver más información observando los modos de bloqueo TM y TX. Las columnas &lt;span style="font-family:courier new;"&gt;LMODE&lt;/span&gt; y &lt;span style="font-family:courier new;"&gt;REQUEST&lt;/span&gt; usan ambas la misma numeración que los modos de bloqueo, en orden de exclusividad incremental: desde 0 para sin bloqueo, hasta 6 para bloqueo exclusivo. Una sesión debe hacerse de un bloqueo exclusivo TX para que pueda alterar los datos; &lt;span style="font-family:courier new;"&gt;LMODE&lt;/span&gt; será 6. Si no puede obtener el bloqueo exclusivo debido a que algunos de los registros que quiere alterar están bloqueados por otra sesión, entonces hará la petición TX en modo exclusivo; &lt;span style="font-family:courier new;"&gt;LMODE&lt;/span&gt; será 0 ya que no está bloqueando, y &lt;span style="font-family:courier new;"&gt;REQUEST&lt;/span&gt; será 6. Esto se puede observar en el query ejecutado anteriormente&lt;br /&gt;&lt;div class="code_block"&gt;ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SID&amp;nbsp;TY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LMODE&amp;nbsp;&amp;nbsp;REQUEST&amp;nbsp;&amp;nbsp;&amp;nbsp;CTIME&amp;nbsp;&amp;nbsp;&amp;nbsp;BLOCK&lt;br /&gt;--------&amp;nbsp;--------&amp;nbsp;-------&amp;nbsp;--&amp;nbsp;-------&amp;nbsp;-------&amp;nbsp;--------&amp;nbsp;--------&amp;nbsp;-------&amp;nbsp;-------&lt;br /&gt;2887B03C&amp;nbsp;2887B068&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;144&amp;nbsp;TX&amp;nbsp;&amp;nbsp;196639&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3891&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;27CF5D14&amp;nbsp;27CF5D54&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;137&amp;nbsp;TX&amp;nbsp;&amp;nbsp;196639&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3891&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;570&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/div&gt;&lt;br /&gt;Observa en SESION2 que &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;ID2&lt;/span&gt;, la cual está solicitando un bloqueo TX (&lt;span style="font-family:courier new;"&gt;LMODE&lt;/span&gt;=0, &lt;span style="font-family:courier new;"&gt;REQUEST&lt;/span&gt;=6), apunta hacia las entradas de transacciones y rollback de SESION1 que es lo que permite determinar la sesión que bloquea a SESION2.&lt;br /&gt;&lt;br /&gt;Es posible que te encuentres también con bloqueos TX en modo 4 de modo compartido(Shared). Si un bloqueo no encuentra ninguna entrada disponible en la Lista de Transacciones Invocadas(ITL - Interest Transaction List) y tiene registros que va a alterar, entonces la sesión obtiene un bloqueo TX en modo 4 mientras espera por la entrada(ITL). Si notas que hay contención sobre un objeto por bloqueos TX-4, es probable que necesites incrementar su parámetro &lt;span style="font-family:courier new;"&gt;INITRANS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Los bloqueos TM generalmente son requeridos y adquiridos en modo 3, también llamado registro compartido exclusivo(Shared-Row Exclusive) y modo 6. Las operaciones &lt;a href="http://en.wikipedia.org/wiki/Data_Definition_Language"&gt;DDL&lt;/a&gt; requieren de un bloqueo TM exclusivo. (Nótese que la instrucción CREATE TABLE no requiere de un bloqueo TM —y no lo necesita ya que el objeto en cuestión ¡no existe todavía!) Las operaciones DML requieren de un bloqueo Shared-Row Exclusive. De los registros seleccionados arriba sobre &lt;span style="font-family:courier new;"&gt;v$lock&lt;/span&gt;, puedes ver por lo niveles de bloqueo TM que son de tipo DML&lt;br /&gt;&lt;div class="code_block"&gt;ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;KADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SID&amp;nbsp;TY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID2&amp;nbsp;&amp;nbsp;&amp;nbsp;LMODE&amp;nbsp;&amp;nbsp;REQUEST&amp;nbsp;&amp;nbsp;&amp;nbsp;CTIME&amp;nbsp;&amp;nbsp;&amp;nbsp;BLOCK&lt;br /&gt;--------&amp;nbsp;--------&amp;nbsp;-------&amp;nbsp;--&amp;nbsp;--------&amp;nbsp;--------&amp;nbsp;-------&amp;nbsp;--------&amp;nbsp;-------&amp;nbsp;-------&lt;br /&gt;0E3CBE90&amp;nbsp;0E3CBEC0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;144&amp;nbsp;TM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;69948&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;323&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;0E3CBE90&amp;nbsp;0E3CBEC0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;137&amp;nbsp;TM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;69948&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;570&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Encontrando el objeto bloqueado&lt;/h3&gt;Ahora que sabemos que cada registro TM apunta a un objeto bloqueado, se puede usar el campo &lt;span style="font-family:courier new;"&gt;ID1&lt;/span&gt; para identificarlo.&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;select&amp;nbsp;object_name&amp;nbsp;from&amp;nbsp;dba_objects&amp;nbsp;where&amp;nbsp;object_id=69948;&lt;br /&gt;&lt;br /&gt;OBJECT_NAME&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;EMP&lt;/div&gt;&lt;br /&gt;A veces es suficiente con sólo saber de cuál objeto se trata; sin embargo, su puede ahondar aún más, identificando no solo el objeto, sino también el bloque de datos e incluso el registro exacto por el que espera SESION2.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Encontrando el registro bloqueado&lt;/h3&gt;Esta información se obtiene de &lt;span style="font-family:courier new;"&gt;v$session&lt;/span&gt; mediante la entrada de la sesión bloqueada&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;select&amp;nbsp;row_wait_obj#,&amp;nbsp;row_wait_file#,&amp;nbsp;row_wait_block#,&amp;nbsp;row_wait_row#&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;from&amp;nbsp;v$session&lt;br /&gt;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;where&amp;nbsp;sid=144;&lt;br /&gt;&lt;br /&gt;ROW_WAIT_OBJ#&amp;nbsp;ROW_WAIT_FILE#&amp;nbsp;ROW_WAIT_BLOCK#&amp;nbsp;ROW_WAIT_ROW#&lt;br /&gt;-------------&amp;nbsp;--------------&amp;nbsp;---------------&amp;nbsp;-------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;69948&amp;nbsp;&amp;nbsp;&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&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;147&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/div&gt;&lt;br /&gt;esto regresa el ID del objeto, el número relativo de archivo, el bloque en el archivo de datos y el registro en el bloque que está esperando la sesión. Si estos datos te suenan conocidos, es porque estos son los cuatro componentes de un ROWID extendido. Se puede construir el ROWID extendido de dicho registro a partir de estos componentes usando el paquete DBMS_ROWID. La función ROWID_CREATE toma esos datos como argumentos para regresar el ROWID&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;select&amp;nbsp;do.object_name,&amp;nbsp;row_wait_obj#,&amp;nbsp;row_wait_file#,&amp;nbsp;row_wait_block#,&amp;nbsp;row_wait_row#,&lt;br /&gt;&amp;nbsp;&amp;nbsp;2&amp;nbsp;&amp;nbsp;dbms_rowid.rowid_create(1,&amp;nbsp;row_wait_obj#,&amp;nbsp;row_wait_file#,&amp;nbsp;row_wait_block#,&amp;nbsp;row_wait_row#)&lt;br /&gt;&amp;nbsp;&amp;nbsp;3&amp;nbsp;&amp;nbsp;from&amp;nbsp;v$session&amp;nbsp;s,&amp;nbsp;dba_objects&amp;nbsp;do&lt;br /&gt;&amp;nbsp;&amp;nbsp;4&amp;nbsp;&amp;nbsp;where&amp;nbsp;sid&amp;nbsp;=&amp;nbsp;144&lt;br /&gt;&amp;nbsp;&amp;nbsp;5&amp;nbsp;&amp;nbsp;and&amp;nbsp;s.row_wait_obj#&amp;nbsp;=&amp;nbsp;do.object_id;&lt;br /&gt;&lt;br /&gt;OBJECT_NAM&amp;nbsp;ROW_WAIT_OBJ#&amp;nbsp;ROW_WAIT_FILE#&amp;nbsp;ROW_WAIT_BLOCK#&amp;nbsp;ROW_WAIT_ROW#&amp;nbsp;DBMS_ROWID.ROWID_C&lt;br /&gt;----------&amp;nbsp;-------------&amp;nbsp;--------------&amp;nbsp;---------------&amp;nbsp;-------------&amp;nbsp;------------------&lt;br /&gt;EMP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;69948&amp;nbsp;&amp;nbsp;&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&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;147&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&amp;nbsp;AAARE8AAEAAAACTAAA&lt;/div&gt;&lt;br /&gt;con el cual podemos inspeccionar directamente el registro&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;scott.emp&amp;nbsp;where&amp;nbsp;rowid='AAARE8AAEAAAACTAAA';&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EMPNO&amp;nbsp;ENAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;JOB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MGR&amp;nbsp;HIREDATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SAL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;COMM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEPTNO&lt;br /&gt;----------&amp;nbsp;----------&amp;nbsp;---------&amp;nbsp;----------&amp;nbsp;---------&amp;nbsp;----------&amp;nbsp;----------&amp;nbsp;----------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7369&amp;nbsp;SMITH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CLERK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7902&amp;nbsp;17-DEC-80&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;800&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Con lo anterior puedes identificar una sesión que está bloqueando y cómo llegar hasta el registro que está esperando la sesión bloqueada.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2961775255745751885?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2961775255745751885/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/07/quien-bloquea-mi-intento-de-bloqueo.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2961775255745751885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2961775255745751885'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/07/quien-bloquea-mi-intento-de-bloqueo.html' title='¿Quien bloqueó mi sesión?'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2928551693412639025</id><published>2009-07-06T15:25:00.011-05:00</published><updated>2009-07-16T00:59:34.859-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><title type='text'>Qué es una 'fork bomb' y como prevenirla</title><content type='html'>&lt;div style="text-align: justify;"&gt;En términos computacionales, 'fork' es la referencia a cuando un proceso(denominado &lt;a href="http://en.wikipedia.org/wiki/Parent_process"&gt;proceso padre&lt;/a&gt;) crea una copia de sí mismo(&lt;a href="http://en.wikipedia.org/wiki/Child_process"&gt;proceso hijo&lt;/a&gt;). En ambientes &lt;a href="http://en.wikipedia.org/wiki/Multithreading"&gt;multihilos&lt;/a&gt; esto significa que el hilo en ejecución(padre) es duplicado(hijo).&lt;br /&gt;&lt;br /&gt;Una &lt;a href="http://en.wikipedia.org/wiki/Fork_(operating_system)"&gt;operación 'fork'&lt;/a&gt; aparta un espacio de memoria para el hijo. Este último, es una copia exacta de todos los segmentos de memoria del proceso padre, y, a pesar de que se trate de una implementación semántica &lt;a href="http://en.wikipedia.org/wiki/Copy-on-write"&gt;copy-on-write&lt;/a&gt;, la memoria física podría no ser asignada(p.e. ambos procesos podrían llegar a compartir los mismos segmentos de memoria física durante algún tiempo). Tanto el proceso padre como el proceso hijo poseen los mismos segmentos de código, pero se ejecutan uno independiente del otro.&lt;br /&gt;&lt;br /&gt;Teniendo una breve idea de lo que significa 'fork' a nivel de sistema operativo, &lt;a href="http://en.wikipedia.org/wiki/Fork_bomb"&gt;'fork bomb'&lt;/a&gt; es un ataque de tipo Denegación de Servicio o &lt;a href="http://en.wikipedia.org/wiki/Denial_of_service"&gt;DoS (Denial of Service)&lt;/a&gt; en inglés, que implementa la operación fork (o una funcionalidad equivalente).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SlJLAcvdx9I/AAAAAAAAAJQ/Yx9PAQ2Hf0g/s1600-h/fork_bomb.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 197px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SlJLAcvdx9I/AAAAAAAAAJQ/Yx9PAQ2Hf0g/s320/fork_bomb.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5355425377984301010" /&gt;&lt;/a&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Una 'fork bomb' no se trata de un &lt;a href="http://en.wikipedia.org/wiki/Computer_virus"&gt;virus&lt;/a&gt; ya que no infecta otros programas o documentos, tampoco se trata de un &lt;a href="http://en.wikipedia.org/wiki/Computer_worm"&gt;gusano&lt;/a&gt; ya que no usa los recusos de red de la máquina para esparcirse, entra más bien en la categoría de &lt;a href="http://en.wikipedia.org/wiki/Wabbit"&gt;'wabbit'&lt;/a&gt;. El término 'wabbit' se atribuye probablemente a la pronunciación que hace Elmer Gruñón(caricaturas de Bugs Bunny) -en la versión en inglés- queriendo decir 'rabbit', que en español significa conejo y que al igual que los conejos una 'fork bomb' tiene la habilidad de multiplicarse rápidamente y "tumbar"(incapacitar) un sistema que confía en la asunción(generalmente válida) de que los programas y procesos que puede ejecutar simultáneamente tienen un límite.&lt;br /&gt;&lt;br /&gt;Esta crea rápidamente una gran cantidad de procesos con el fin de saturar los espacios disponibles en la lista de procesos que guarda el sistema operativo. Si esta se satura, no podrá ejecutarse otro programa hasta que termine otro proceso y aún si esto sucediera, no es muy probable que este programa se ejecute ya que cada una de las instancias de la bomba tratarán por sí mismas de ocupar cualquier espacio disponible.&lt;br /&gt;&lt;br /&gt;El siguiente código muestra la que podría considerarse una de las 'fork bomb' más elegantes. Presentada por &lt;a href="http://en.wikipedia.org/wiki/Jaromil"&gt;Jaromil&lt;/a&gt; como una pieza de arte de código abierto en 2002. Ejecutas los siguientes 13 caracteres en un shell tipo Unix como bash o zsh.&lt;br /&gt;&lt;div class="code_block"&gt;:(){ :|:&amp; };:&lt;/div&gt;&lt;br /&gt;Lo cual significa&lt;br /&gt;&lt;div class="code_block"&gt;:()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# define ':' -- lo que sea que digamos ':', haz esto:&lt;/span&gt;&lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# inicio de lo que dijimos que tiene que hacer ':'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# carga otra copia de la función ':' en memoria...&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# ...lo cual será entrada para...&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# ...otra copia de la función ':', que tiene que cargarse en memoria&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# (por lo tanto, ':|:' sencillamente carga dos copias de ':' como sea que ':' se llame)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# libera las funciones -- si matan la primera ':', todas las demás que esta inició NO &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deberían auto-matarse&lt;/span&gt;&lt;br /&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# fin de lo que hace ':'&lt;/span&gt;&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# Habiendo definido ':', ahora debería...&lt;/span&gt;&lt;br /&gt;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-style:italic;"&gt;# ...llamar a ':', iniciando una reacción en cadena: cada ':' iniciará dos más.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Dado que ':' es un nombre arbitrario para la función, una versión más entendible sería:&lt;br /&gt;&lt;div class="code_block"&gt;forkbomb(){ forkbomb|forkbomb &amp; };forkbomb&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Otros ejemplos.&lt;/span&gt;&lt;br /&gt;Versión en Windows usando lenguaje batch&lt;br /&gt;&lt;div class="code_block"&gt;%0|%0&lt;/div&gt;&lt;br /&gt;ó un ejemplo que reaccione rápidamente&lt;br /&gt;&lt;div class="code_block"&gt;:s&lt;br /&gt;start %0&lt;br /&gt;%0|%0&lt;br /&gt;goto :s&lt;/div&gt;&lt;br /&gt;un poema en Perl&lt;br /&gt;&lt;div class="code_block"&gt;fork while fork&lt;/div&gt;&lt;br /&gt;en Haskell&lt;br /&gt;&lt;div class="code_block"&gt;import Control.Monad&lt;br /&gt;import System.Posix.Process&lt;br /&gt; &lt;br /&gt;forkBomb = forever $ forkProcess forkBomb&lt;/div&gt;&lt;br /&gt;en Python&lt;br /&gt;&lt;div class="code_block"&gt;import os&lt;br /&gt; &lt;br /&gt;while True:&lt;br /&gt;     os.fork()&lt;/div&gt;&lt;br /&gt;en Ruby&lt;br /&gt;&lt;div class="code_block"&gt;loop { fork }&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Prevención&lt;/h3&gt;Una manera de prevenirlas es limitando el número de procesos que puede manejar un usuario. Cuando un proceso intente crear uno nuevo y el usuario esté al límite de procesos permitidos, este fallará. Los administradores deben configurar este tope lo suficientemente bajo de tal manera que si todos los usuarios lanzan una bomba simultáneamente, queden suficientes recursos para evitar el desastre; lo cual es prácticamente improbable(que todos los usuarios al mismo tiempo lancen una bomba).&lt;br /&gt;&lt;br /&gt;Los sistemas tipo Unix, usualmente tienen un límite de procesos controlado por el comando de shell &lt;span style="font-style:italic;"&gt;ulimit&lt;/span&gt;. Los kernels Linux configuran y respetan la variable &lt;span style="font-weight:bold;"&gt;RLIMIT&lt;/span&gt;(límite de recursos) de un proceso. De igual manera tanto en Linux como en *BSD puedes editar el archivo de configuración de pam_limits: &lt;span style="font-family:courier;"&gt;/etc/security/limits.conf&lt;/span&gt; y agregar la siguiente línea. Sin embargo, verifica que está habilitado ya que no todas las distribuciones de Linux vienen con pam_limits configurado por default.&lt;br /&gt;&lt;div class="code_block"&gt;&amp;lt;os_user&amp;gt; hard nproc 200&lt;/div&gt;&lt;br /&gt;Si no tienes PAM habilitado intenta poniendo la siguiente línea en tu archivo de configuración &lt;span style="font-family:courier;"&gt;/etc/profile.conf&lt;/span&gt;&lt;br /&gt;&lt;div class="code_block"&gt;ulimit -u 200&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Limitar el número de procesos que un proceso puede crear no previene de una 'fork bomb' ya que se quedarán ahí a la espera de crear más y más procesos. Un sistema que distribuya los recursos por cuota compartiendo los recursos del proceso padre podría funcionar, aunque este tipo de sistemas no son muy comunes.&lt;br /&gt;&lt;br /&gt;Fuentes&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Fork_bomb"&gt;Fork bomb&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cyberciti.biz/tips/linux-limiting-user-process.html"&gt;How to: Prevent a fork bomb by limiting user process&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2928551693412639025?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2928551693412639025/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/07/que-es-una-fork-bomb-y-como-prevenirla.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2928551693412639025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2928551693412639025'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/07/que-es-una-fork-bomb-y-como-prevenirla.html' title='Qué es una &apos;fork bomb&apos; y como prevenirla'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t1WQBJYuFhI/SlJLAcvdx9I/AAAAAAAAAJQ/Yx9PAQ2Hf0g/s72-c/fork_bomb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-6259263779888356417</id><published>2009-07-02T17:54:00.008-05:00</published><updated>2009-07-07T10:27:42.362-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Solaris'/><title type='text'>De cuando el botón 'Finish' del Oracle Database Configuration Asistant (dbca) en 11g no funciona</title><content type='html'>&lt;img style="margin: 5px 0px 0px 10px; float: right; width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" border="0" /&gt;&lt;div style="text-align: justify;"&gt;Hace un par de días me pidieron cambiar una base de datos que estaba montada en una lap con Windows XP y 11g a un servidor con Solaris 10 y mismo motor (11g), trabajo para no más de medio día -dije yo-. Pues bien, dejé haciendo un export en la lap y puse a transferir la instalación y parches al servidor. Configuré el ambiente en Solaris, levanté el ambiente X en mi máquina con Cygwin y ejecuté la instalación gráfica(dbca), me tomé mi tiempo para configurar todo lo requerido y cuando finalmente llegué a la última pantalla y presioné el botón 'Finish' me doy cuenta de que no aparece ni hace nada, dudando de si me había hecho falta algo -cosa que no es posible sino no puedes avanzar- me regresé ingénuamente a revisar cada pantalla y todo estaba en orden(como era de esperarse).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/Sk00SixlVNI/AAAAAAAAAJA/PUj7oxmXM34/s1600-h/dbca_p14.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 229px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/Sk00SixlVNI/AAAAAAAAAJA/PUj7oxmXM34/s320/dbca_p14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5353993025190450386" /&gt;&lt;/a&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Cerré el instalador y lo volví a lanzar con la esperanza de que esta vez si funcionara pero no fue así. Lo lancé una tercera vez pero en esta ocasión puse atención a cualquier detalle, pista o mensaje de error, siendo lo siguiente lo primero que observé&lt;br /&gt;&lt;div class="code_block"&gt;$ dbca&lt;br /&gt;Warning: Cannot convert string "-monotype-arial-regular-r-normal--*-140-*-*-p-*-iso8859-1" to type FontStruct&lt;/div&gt;&lt;br /&gt;¿Un aviso no un mensaje de error propiamente podría ser el casusante de dicho comportamiento? Veamos que dice el archivo log &lt;span style="font-family: courier new;"&gt;[ORACLE_BASE]/cfgtoollogs/dbca/&amp;lt;dbname&amp;gt;/trace.log&lt;/span&gt;&lt;br /&gt;&lt;div class="code_block"&gt;[AWT-EventQueue-0] [11:20:29:828] [DBCAWizard.onFinish:1139] m_bFinishClicked: true&lt;br /&gt;[AWT-EventQueue-0] [11:20:30:2] [DBCAWizard.onFinish:1139] m_bFinishClicked: true&lt;br /&gt;[AWT-EventQueue-0] [11:20:35:126] [SQLEngine.done:1958] Done called&lt;/div&gt;&lt;br /&gt;El evento de presionar el botón si aparace ¿Entonces por qué no continua?&lt;br /&gt;&lt;br /&gt;Buscando en Metalink información al respecto encontré la nota &lt;a href="https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=727290.1"&gt;727290.1&lt;/a&gt; la cual básicamente te dice que el problema está en tu cliente X(Cygwin en mi caso) y te sugieren que intentes con otro cliente X o con VNC.&lt;br /&gt;&lt;br /&gt;¿Cambiar de ambiente X en tu máquina sólo porque un insignificante botón no continua con la creación de la base? No se justifica -creo yo- y por la parte de VNC pues tampoco es opción ya que no soy quien administra el servidor.&lt;br /&gt;&lt;br /&gt;Opción 2, crear la base con el &lt;span style="font-family: courier new;"&gt;dbca&lt;/span&gt; usando el modo "silencioso". Antes de usar la opción 2 es necesario crear un template -para no tener que especificar variable por variable en la línea de comandos- con el mismo &lt;span style="font-family: courier new;"&gt;dbca&lt;/span&gt;. Ejecuta el asistente, configura todo lo necesario y en la última pantalla selecciona la opción "Save as a Database Template" presiona el botón 'Finish' y listo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_t1WQBJYuFhI/Sk03BMPWxZI/AAAAAAAAAJI/azBuYJxyCGg/s1600-h/dbca_p14_temp.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 229px;" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/Sk03BMPWxZI/AAAAAAAAAJI/azBuYJxyCGg/s320/dbca_p14_temp.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5353996025618417042" /&gt;&lt;/a&gt;&lt;br /&gt;Desde línea de comando ejecutas&lt;br /&gt;&lt;div class="code_block"&gt;$ dbca -silent -createDatabase -templateName &lt;b&gt;testdb.dbc&lt;/b&gt; -gdbName testdb -sid testdb -sysPassword syspass -systemPassword systempass -emConfiguration LOCAL -dbsnmpPassword dbsnmppass -sysmanPassword sysmanpass&lt;/div&gt;&lt;br /&gt;el cual sólo te mostrará el porcentaje de avance y los eventos más significativos&lt;br /&gt;&lt;div class="code_block"&gt;Copying database files&lt;br /&gt;DBCA_PROGRESS : 1%&lt;br /&gt;DBCA_PROGRESS : 3%&lt;br /&gt;DBCA_PROGRESS : 11%&lt;br /&gt;DBCA_PROGRESS : 18%&lt;br /&gt;DBCA_PROGRESS : 26%&lt;br /&gt;DBCA_PROGRESS : 37%&lt;br /&gt;Creating and starting Oracle instance&lt;br /&gt;DBCA_PROGRESS : 40%&lt;br /&gt;DBCA_PROGRESS : 45%&lt;br /&gt;DBCA_PROGRESS : 50%&lt;br /&gt;DBCA_PROGRESS : 55%&lt;br /&gt;DBCA_PROGRESS : 56%&lt;br /&gt;DBCA_PROGRESS : 60%&lt;br /&gt;DBCA_PROGRESS : 62%&lt;br /&gt;Completing Database Creation&lt;br /&gt;DBCA_PROGRESS : 66%&lt;br /&gt;DBCA_PROGRESS : 70%&lt;br /&gt;DBCA_PROGRESS : 73%&lt;br /&gt;DBCA_PROGRESS : 77%&lt;br /&gt;DBCA_PROGRESS : 88%&lt;br /&gt;DBCA_PROGRESS : 100%&lt;br /&gt;Database creation complete. For details check the logfiles at:&lt;br /&gt;&amp;nbsp;/opt/oracle/product/cfgtoollogs/dbca/testdb.&lt;br /&gt;Database Information:&lt;br /&gt;Global Database Name:testdb&lt;br /&gt;System Identifier(SID):testdb&lt;br /&gt;&lt;br /&gt;The Database Control URL is https://&amp;lt;SERVER_NAME&amp;gt;:1158/em&lt;br /&gt;&lt;br /&gt;Management Repository has been placed in secure mode wherein Enterprise Manager data will be encrypted.  The encryption key has been placed in the file: /opt/oracle/product/rdbms/11.1.0.7.0/testserver_testdb/sysman/config/emkey.ora. Please ensure this file is backed up as the encrypted data will become unusable if this file is lost.&lt;/div&gt;&lt;br /&gt;Lo anterior se graba en el archivo&lt;br /&gt;&lt;div class="code_block"&gt;$ cat [ORACLE_BASE]/cfgtoollogs/dbca/&amp;lt;DBNAME&amp;gt;/testdb.log&lt;/div&gt;&lt;br /&gt;Listo, base creada y lista para lanzar el import -por la tarde noche- en el servidor con el archivo dmp generado en la lap. Por supuesto que ya no quedó en medio día como lo tenía previsto, pero la experiencia cuenta para próximas ocasiones.&lt;br /&gt;&lt;br /&gt;La nota de Metalink que puse arriba, menciona que este comportamiento puede presentarse también en 10g versiones 10.2.0.1 a 10.2.0.4 y en cualquier plataforma.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-6259263779888356417?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/6259263779888356417/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/07/de-cuando-el-boton-finish-del-oracle.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/6259263779888356417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/6259263779888356417'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/07/de-cuando-el-boton-finish-del-oracle.html' title='De cuando el botón &apos;Finish&apos; del Oracle Database Configuration Asistant (dbca) en 11g no funciona'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-4445999777920387169</id><published>2009-06-23T10:23:00.051-05:00</published><updated>2009-06-25T22:53:00.333-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Solaris'/><title type='text'>Arreglando el error: ORA-27102: out ot memory en Oracle y Solaris 10</title><content type='html'>&lt;img style="float:left; margin:5px 10px 0px 0px;width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s200/oracle.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5351467101110248818" /&gt;&lt;div style="text-align: justify;"&gt;Al cambiar los archivos de una base de datos Oracle en un servidor con Solaris 9 a uno con Solaris 10 y querer levantarla me encontré con el siguiente error&lt;br /&gt;&lt;div style="width:69%; float:right;" class="code_block"&gt;SQL&amp;gt; startup&lt;br /&gt;ORA-27102: out of memory&lt;br /&gt;SVR4 Error: 22: Invalid argument&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;según el mensaje de error el servidor no tiene memoria suficiente, veamos que dice la documentación al respecto&lt;br /&gt;&lt;div class="code_block"&gt;$ oerr ORA 27102&lt;br /&gt;27102, 00000, "out of memory"&lt;br /&gt;// *Cause: Out of memory&lt;br /&gt;// *Action: Consult the trace file for details&lt;/div&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;nada alentador el panorama. Revisemos lo último que se registró en el archivo alert.log&lt;br /&gt;&lt;div class="code_block"&gt;$ cat alert.log&lt;br /&gt;Fri Jun  5 18:19:45 2009&lt;br /&gt;Starting ORACLE instance (normal)&lt;br /&gt;Fri Jun  5 18:19:46 2009&lt;br /&gt;WARNING: EINVAL creating segment of size 0x000000008c400000&lt;br /&gt;fix shm parameters in /etc/system or equivalent&lt;/div&gt;&lt;br /&gt;Oracle está tratando de crear un segmento de memoria compartida de 2G (dependiendo del tamaño de SGA/PGA), pero el sistema operativo respondió con un mensaje de error de argumento no válido (EINVAL). Se muestra además una pequeña pista sobre configurar los parámetros shm en &lt;span style="font-family:courier new;"&gt;/etc/system&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Antes de Solaris 10, se configuraba el parámetro &lt;span style="font-family:courier new;"&gt;shmsys:shminfo_shmmax&lt;/span&gt; en &lt;span style="font-family:courier new;"&gt;/etc/system&lt;/span&gt; con el tamaño máximo de segmento de memoria que puede crearse. El valor por default en Solaris 9 y versiones anteriores es de 8M; mientras que en Solaris 10 o superior es 1/4 de la memoria física. Lo puedes verificar de la siguiente manera:&lt;br /&gt;&lt;div class="code_block"&gt;$ prtconf | grep Mem&lt;br /&gt;Memory size: 2048 Megabytes&lt;br /&gt;$ id -p&lt;br /&gt;uid=110(oracle) gid=201(dba) projid=&lt;b&gt;3&lt;/b&gt;(default)&lt;br /&gt;$ prctl -n project.max-shm-memory -i project &lt;b&gt;3&lt;/b&gt;&lt;br /&gt;project: 3: default&lt;br /&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRIVILEGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FLAG&amp;nbsp;&amp;nbsp;&amp;nbsp;ACTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RECIPIENT&lt;br /&gt;project.max-shm-memory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;privileged&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;479M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;system&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;16.0EB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;br /&gt;He ahí el problema, el sistema está usando el valor por default de 479M para este caso, cuando Oracle está tratando de crear un segmento de memoria (2G) mayor a 479M.&lt;br /&gt;&lt;br /&gt;La solución es configurar el sistema con un tamaño suficientemente grande para que el segmento de memoria compartida sea creado y Oracle pueda levantar la instancia.&lt;br /&gt;&lt;br /&gt;En Solaris 9 y versiones anteriores, esto puede hacerse agregando la siguiente línea en &lt;span style="font-family: courier new;"&gt;/etc/system&lt;/span&gt;, teniendo que reiniciar el sistema para que tome el nuevo valor.&lt;br /&gt;&lt;div class="code_block"&gt;set shminfo_shmmax = 0x000000008c400000&lt;/div&gt;&lt;br /&gt;En Solaris 10 el parámetro &lt;span style="font-family: courier new;"&gt;shminfo_shmmax&lt;/span&gt; es obsoleto y Sun no recomienda configurarlo en &lt;span style="font-family: courier new;"&gt;/etc/system&lt;/span&gt; aún a pesar de que funcione como se espera.&lt;br /&gt;&lt;br /&gt;En Solaris 10 y posterior, este valor puede cambiarse dinámicamente por proyecto con la ayuda de los servicios de control de recursos. Así es como se hace en Solaris 10 y posterior&lt;br /&gt;&lt;div class="code_block"&gt;$ prctl -n project.max-shm-memory -r -v &lt;b&gt;2G&lt;/b&gt; -i project 3&lt;br /&gt;$ prctl -n project.max-shm-memory -i project 3&lt;br /&gt;NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRIVILEGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FLAG&amp;nbsp;&amp;nbsp;&amp;nbsp;ACTION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RECIPIENT&lt;br /&gt;project.max-shm-memory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;privileged&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.0G&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;system&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;16.0EB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max&amp;nbsp;&amp;nbsp;&amp;nbsp;deny&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;br /&gt;Todos los cambios hechos con el comando &lt;span style="font-family: courier new;"&gt;prctl&lt;/span&gt; se aplican al sistema de manera temporal por lo que se perderán cuando se reinicie. Para hacerlo permanente, crea un proyecto con el comando &lt;span style="font-family: courier new;"&gt;projadd&lt;/span&gt;&lt;br /&gt;&lt;div class="code_block"&gt;$ projadd -p 200 -c 'Oracle config' -U oracle -G dba -K 'project.max-shm-memory=(privileged,2G,deny)' oracle&lt;/div&gt;&lt;br /&gt;Finalmente cerciórate que fue creado con el comando &lt;span style="font-family: courier new;"&gt;projects -l&lt;/span&gt; ó &lt;span style="font-family: courier new;"&gt;cat /etc/project&lt;/span&gt;&lt;br /&gt;&lt;div class="code_block"&gt;$ projects -l&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;oracle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;projid&amp;nbsp;:&amp;nbsp;200&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;comment:&amp;nbsp;"Oracle&amp;nbsp;config"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;users&amp;nbsp;&amp;nbsp;:&amp;nbsp;oracle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;groups&amp;nbsp;:&amp;nbsp;dba&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;attribs:&amp;nbsp;project.max-shm-memory=(priv,2147483648,deny)&lt;br /&gt;$ cat /etc/project&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;oracle:200:Oracle config:oracle:dba:project.max-shm-memory=(priv,2147483648,deny)&lt;/div&gt;&lt;br /&gt;Con estos cambios, Oracle debería arrancar la base de datos de manera normal.&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt;&amp;nbsp;startup&lt;br /&gt;ORACLE&amp;nbsp;instance&amp;nbsp;started.&lt;br /&gt;&lt;br /&gt;Total&amp;nbsp;System&amp;nbsp;Global&amp;nbsp;Area&amp;nbsp;2333054160&amp;nbsp;bytes&lt;br /&gt;Fixed&amp;nbsp;Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;734416&amp;nbsp;bytes&lt;br /&gt;Variable&amp;nbsp;Size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1191182336&amp;nbsp;bytes&lt;br /&gt;Database&amp;nbsp;Buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1073741824&amp;nbsp;bytes&lt;br /&gt;Redo&amp;nbsp;Buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;67395584&amp;nbsp;bytes&lt;br /&gt;Database&amp;nbsp;mounted.&lt;br /&gt;Database&amp;nbsp;opened.&lt;/div&gt;&lt;br /&gt;Otro caso que puede presentar el mismo síntoma es cuando aumentas la SGA en la instancia resultado posiblemente de un tuning el cual si es mayor al segmento de memoria configurada para el sistema, cuando intentes levantar la instancia tendrá este mismo comportamiento.&lt;br /&gt;&lt;br /&gt;Vía&lt;br /&gt;&lt;a href="http://technopark02.blogspot.com/2006/09/solaris-10oracle-fixing-ora-27102-out.html"&gt;Mandalika's scratchpad&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-4445999777920387169?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/4445999777920387169/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/06/arreglando-el-error-ora-27102-out-ot.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4445999777920387169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4445999777920387169'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/06/arreglando-el-error-ora-27102-out-ot.html' title='Arreglando el error: ORA-27102: out ot memory en Oracle y Solaris 10'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ6-aTdpXI/AAAAAAAAAI4/FV-4OuhPSSQ/s72-c/oracle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-7063855375698461583</id><published>2009-06-22T10:51:00.018-05:00</published><updated>2009-07-07T10:30:07.222-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Autenticación por base de datos en Apache 2.2.x usando mod_dbd, mod_authn_dbd y mod_auth_user en Windows 2003 Server</title><content type='html'>&lt;img style="MARGIN: 5px 0px 0px 10px; WIDTH: 200px; FLOAT: right; HEIGHT: 100px;" id="BLOGGER_PHOTO_ID_5351459470255739826" border="0" alt="" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s200/apache.jpg" /&gt;&lt;div style="TEXT-ALIGN: justify"&gt;En un post anterior, explico cómo configurar el &lt;a href="http://sartigas.blogspot.com/2009/01/seguridad-bsica-de-apache.html"&gt;acceso a un directorio usando la utilería htpasswd&lt;/a&gt; el cual funciona para pocos usuarios ya que debe hacerse manualmente por cada uno. La autenticación por base de datos ofrece una configuación más flexible, menos laboriosa e ideal para ambientes donde la cantidad de usuarios es elevada.&lt;br /&gt;&lt;br /&gt;Para este ejercicio usaré una base de datos Oracle 11g(11.1.0.7.0) el cual está soportado de acuerdo con la documentación de Apache que viene en el archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\README-win32.txt&lt;/span&gt;. Es necesario tener instalado el cliente de Oracle y configurar adecuadamente una cadena de conexión(tnsnames) como la de la siguiente imagen&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/Sj7-uvoNIgI/AAAAAAAAAIY/h855LucXD3M/s1600-h/net_manager.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 244px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5349993486375264770" border="0" alt="" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/Sj7-uvoNIgI/AAAAAAAAAIY/h855LucXD3M/s320/net_manager.jpg" /&gt;&lt;/a&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;abre una sesión de sqlplus&lt;br /&gt;&lt;div class="code_block"&gt;C:\&amp;gt;sqlplus sys as sysdba&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.1.0.7.0 - Production on Sun Jun 21 23:17:37 2009&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2008, Oracle. All rights reserved.&lt;br /&gt;&lt;br /&gt;Enter password:&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;/div&gt;&lt;br /&gt;crea un usuario&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt; create user apache identified by test account unlock;&lt;br /&gt;&lt;br /&gt;User created&lt;/div&gt;&lt;br /&gt;asígnale los correspondientes privilegios&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt; grant create session to apache;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant resource to apache;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;/div&gt;&lt;br /&gt;conéctate con el usuario apache, crea la tabla e inserta un registro que servirá para las pruebas de conexión&lt;br /&gt;&lt;div class="code_block"&gt;SQL&amp;gt; conn apache/test&lt;br /&gt;Connected.&lt;br /&gt;SQL&amp;gt; create table users (&lt;br /&gt;2 username varchar2(10 byte),&lt;br /&gt;3 passwd varchar2(10 byte)&lt;br /&gt;4 );&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into users(username, passwd) values ('sergio', 'test');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;/div&gt;&lt;br /&gt;Actualiza tu archivo de configuración de Apache &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\conf\httpd.conf&lt;/span&gt; para activar las siguientes líneas&lt;br /&gt;&lt;div class="code_block"&gt;LoadModule authn_dbd_module modules/mod_authn_dbd.so&lt;br /&gt;LoadModule dbd_module modules/mod_dbd.so&lt;/div&gt;&lt;br /&gt;y al final agrega lo siguiente. No olvides crear el directorio &lt;span style="font-family:courier new;"&gt;C:\Apache22\htdocs\private&lt;/span&gt;&lt;br /&gt;&lt;div class="code_block"&gt;# mod_dbd configuration&lt;br /&gt;DBDriver oracle&lt;br /&gt;DBDParams "host=testserver port=1521 user=apache pass=test dbname=testdb"&lt;br /&gt;&lt;br /&gt;DBDMin 4&lt;br /&gt;DBDKeep 8&lt;br /&gt;DBDMax 20&lt;br /&gt;DBDExptime 300&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory "C:/Apache22/htdocs/private"&amp;gt;&lt;br /&gt;# core authentication and mod_auth_basic configuration&lt;br /&gt;# for mod_authn_dbd&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthName "Private directory"&lt;br /&gt;AuthBasicProvider dbd&lt;br /&gt;&lt;br /&gt;# core authorization configuration&lt;br /&gt;Require valid-user&lt;br /&gt;&lt;br /&gt;# mod_authn_dbd SQL query to authenticate a user&lt;br /&gt;AuthDBDUserPWQuery "SELECT passwd FROM users WHERE username = %s"&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;/div&gt;&lt;br /&gt;Levanta Apache, pero hazlo desde línea de comandos ya que si lo haces desde la consola no apreciarías algún mensaje de error que pudiera ocurrir.&lt;br /&gt;&lt;div class="code_block"&gt;C:\Apache22\bin&amp;gt;httpd -k start&lt;/div&gt;&lt;br /&gt;si no se muestra ningún mensaje de error no está de más revisar el archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\logs\error.log&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y finalmente hacer la prueba de conexión desde un navegador&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/Sj8R4ws0uNI/AAAAAAAAAIg/ZqM_-wC98LA/s1600-h/test_user.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 240px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5350014549182691538" border="0" alt="" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/Sj8R4ws0uNI/AAAAAAAAAIg/ZqM_-wC98LA/s320/test_user.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/Sj8SVevYhaI/AAAAAAAAAIo/vk62uCgARZs/s1600-h/test_user2.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 240px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5350015042577794466" border="0" alt="" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/Sj8SVevYhaI/AAAAAAAAAIo/vk62uCgARZs/s320/test_user2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Resolviendo problemas&lt;/span&gt;&lt;br /&gt;P: Aparece el siguiente mensaje cuando trato de levantar Apache:&lt;br /&gt;&lt;div class="code_block"&gt;C:\Apache22\bin&amp;gt;httpd -k start&lt;br /&gt;Syntax error on line 485 of C:/Apache22/conf/httpd.conf:&lt;br /&gt;Invalid command 'DBDriver', perhaps misspelled or defined by a module not included in the server configuration&lt;/div&gt;&lt;br /&gt;R: No has activado en tu archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\conf\httpd.conf&lt;/span&gt; la línea&lt;br /&gt;&lt;div class="code_block"&gt;LoadModule dbd_module modules/mod_dbd.so&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;P: Aparece el siguiente mensaje cuando trato de levantar Apache:&lt;br /&gt;&lt;div class="code_block"&gt;C:\Apache22\bin&amp;gt;httpd -k start&lt;br /&gt;Syntax error on line 498 of C:/Apache22/conf/httpd.conf:&lt;br /&gt;Unknown Authn provider: dbd&lt;/div&gt;&lt;br /&gt;R: No has activado en tu archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\conf\httpd.conf&lt;/span&gt; la línea&lt;br /&gt;&lt;div class="code_block"&gt;LoadModule authn_dbd_module modules/mod_authn_dbd.so&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;P: Ya levantó Apache pero no se conecta con la base de datos, reviso el archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\logs\error.log&lt;/span&gt; y aparece el siguiente error&lt;br /&gt;&lt;div class="code_block"&gt;(20014)Internal error: DBD: Can't connect to oracle&lt;br /&gt;(20014)Internal error: DBD: failed to initialise&lt;/div&gt;&lt;br /&gt;R: El mensaje de error es genérico y sólo te informa lo que sucedió sin ninguna pista de la causa, es aquí donde donde debes revisar lo que hiciste desde el principio para determinar qué sucede y cómo solucionarlo.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Revisa el archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\README-win32.txt&lt;/span&gt; y verifica que la versión del motor de base de datos que estás usando está soportada por la versión de Apache que instalaste.&lt;/li&gt;&lt;li&gt;Revisa que los parámetros en &lt;span style="font-family:courier new;"&gt;DBDParams&lt;/span&gt; estén correctos. A este respecto, la &lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_dbd.html#dbdparams"&gt;documentación de Apache&lt;/a&gt; no es la correcta en cuanto a los de Oracle ya que especifica&lt;br /&gt;&lt;br /&gt;&lt;div class="lbluebox"&gt;Oracle&lt;br /&gt;   user, pass, dbname, server&lt;/div&gt;sin embargo, especificamente "server" no lo reconoce como válido y por lo tanto es necesario usar "host" y "port" en su lugar.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;P: El navegador me pide el usuario y la contraseña pero después de escribirlos me aparece el mensaje de error "Internal Server Error"&lt;br /&gt;&lt;br /&gt;R: Revisa tu archivo &lt;span style="font-family:courier new;"&gt;[APACHE_HOME]\logs\error.log&lt;/span&gt; en busca de detalles específicos. Te puedes encontrar, por ejemplo, con que el query que especificaste en el parámetro &lt;span style="font-family:courier new;"&gt;AuthDBDUserPWQuery&lt;/span&gt; no está correcto&lt;br /&gt;&lt;div class="code_block"&gt;(20014)Internal error: DBD: failed to prepare SQL statements: ORA-00904: "USER_NAME": invalid identifier&lt;br /&gt;(20014)Internal error: DBD: failed to initialise&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Referencia&lt;br /&gt;&lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html"&gt;http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-7063855375698461583?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/7063855375698461583/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/06/autenticacion-por-base-de-datos-en.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/7063855375698461583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/7063855375698461583'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/06/autenticacion-por-base-de-datos-en.html' title='Autenticación por base de datos en Apache 2.2.x usando mod_dbd, mod_authn_dbd y mod_auth_user en Windows 2003 Server'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s72-c/apache.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-3889678623893563964</id><published>2009-06-15T19:25:00.012-05:00</published><updated>2009-06-23T10:44:03.539-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><title type='text'>Instalando SSH en Windows 2003 Server</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Ssh"&gt;SSH&lt;/a&gt; o Secure Shell, es un protocolo de red que permite el intercambio de información usando un canal seguro entre el cliente y el servidor. SSH se usa comunmente para accesar de manera remota y ejecutar comandos, sin embargo, permite también crear túneles, rutear puertos TCP y conexiones X11, además de poder transferir archivos usando los protocolos &lt;a href="http://en.wikipedia.org/wiki/SSH_file_transfer_protocol"&gt;SFTP&lt;/a&gt; y &lt;a href="http://en.wikipedia.org/wiki/Secure_copy"&gt;SCP&lt;/a&gt;. Usado principalmente en sistemas Unix y Linux, SSH fue diseñado como reemplazo de Telnet y otros shells remotos no confiables los cuales transfieren información -como contraseñas- en texto plano pudiendo ser interceptados por una tercera persona.&lt;br /&gt;&lt;br /&gt;Aquí trataré de explicar como instalar este servicio en Windows 2003 Server usando Cygwin y OpenSSH.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Primero, te descargas el instalador de Cygwin:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbI_jC5RWI/AAAAAAAAAGg/omElcCb0OQo/s1600-h/desc_cygwin_exe.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 224px; height: 182px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbI_jC5RWI/AAAAAAAAAGg/omElcCb0OQo/s320/desc_cygwin_exe.jpg" alt="" id="BLOGGER_PHOTO_ID_5347682601613739362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;lo ejecutas y sigues el asistente para descargar OpenSSH junto con las utilerías necesarias, ajustando por supuesto los parámetros que consideres necesario&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbJl3cVIGI/AAAAAAAAAGo/JqP3OJkI8ew/s1600-h/welcome_cyg.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbJl3cVIGI/AAAAAAAAAGo/JqP3OJkI8ew/s320/welcome_cyg.jpg" alt="" id="BLOGGER_PHOTO_ID_5347683259924160610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_t1WQBJYuFhI/SjbKXEIZ9iI/AAAAAAAAAGw/tVr6udtOI34/s1600-h/down_source.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/SjbKXEIZ9iI/AAAAAAAAAGw/tVr6udtOI34/s320/down_source.jpg" alt="" id="BLOGGER_PHOTO_ID_5347684105143842338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbLFfVPI0I/AAAAAAAAAG4/y8l8VngMosw/s1600-h/install_dir.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbLFfVPI0I/AAAAAAAAAG4/y8l8VngMosw/s320/install_dir.jpg" alt="" id="BLOGGER_PHOTO_ID_5347684902719398722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SjbL0Ei2s6I/AAAAAAAAAHA/6t90fuRCyuE/s1600-h/local_pack_dir.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SjbL0Ei2s6I/AAAAAAAAAHA/6t90fuRCyuE/s320/local_pack_dir.jpg" alt="" id="BLOGGER_PHOTO_ID_5347685702982611874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbMNLGbWpI/AAAAAAAAAHI/PMPojHfikLA/s1600-h/intern_conn.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbMNLGbWpI/AAAAAAAAAHI/PMPojHfikLA/s320/intern_conn.jpg" alt="" id="BLOGGER_PHOTO_ID_5347686134239156882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbND9w5o_I/AAAAAAAAAHQ/Crlh4NE9dt8/s1600-h/down_site.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbND9w5o_I/AAAAAAAAAHQ/Crlh4NE9dt8/s320/down_site.jpg" alt="" id="BLOGGER_PHOTO_ID_5347687075552011250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbQeF2rHJI/AAAAAAAAAHY/2hnGcbqbW1s/s1600-h/sel_pack.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbQeF2rHJI/AAAAAAAAAHY/2hnGcbqbW1s/s320/sel_pack.jpg" alt="" id="BLOGGER_PHOTO_ID_5347690822935190674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_t1WQBJYuFhI/SjbShT0kWgI/AAAAAAAAAHg/gvlINjKvcN4/s1600-h/sel_pack2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/SjbShT0kWgI/AAAAAAAAAHg/gvlINjKvcN4/s320/sel_pack2.jpg" alt="" id="BLOGGER_PHOTO_ID_5347693077247318530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbTXTUaF3I/AAAAAAAAAHo/8oiDKFF-DHc/s1600-h/sel_pack3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbTXTUaF3I/AAAAAAAAAHo/8oiDKFF-DHc/s320/sel_pack3.jpg" alt="" id="BLOGGER_PHOTO_ID_5347694004825364338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SjbT30LfcpI/AAAAAAAAAHw/socYlbsYqbg/s1600-h/progress.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SjbT30LfcpI/AAAAAAAAAHw/socYlbsYqbg/s320/progress.jpg" alt="" id="BLOGGER_PHOTO_ID_5347694563402150546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbUdPMcUDI/AAAAAAAAAH4/fL4VNQN6gmg/s1600-h/progress2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SjbUdPMcUDI/AAAAAAAAAH4/fL4VNQN6gmg/s320/progress2.jpg" alt="" id="BLOGGER_PHOTO_ID_5347695206309056562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbU1rTxWsI/AAAAAAAAAIA/yg-qv3_FUE0/s1600-h/crea_icons.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbU1rTxWsI/AAAAAAAAAIA/yg-qv3_FUE0/s320/crea_icons.jpg" alt="" id="BLOGGER_PHOTO_ID_5347695626172848834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Edita el archivo c:\cygwin\Cygwin.bat y añade lo siguiente&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SjbXN7Oz0iI/AAAAAAAAAII/wnedy8rU0NU/s1600-h/edit_bat.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 146px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SjbXN7Oz0iI/AAAAAAAAAII/wnedy8rU0NU/s320/edit_bat.jpg" alt="" id="BLOGGER_PHOTO_ID_5347698241787122210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Abre una sesión de Cygwin -doble click al ícono creado en tu escritorio de Windows- ó desde una sesión de línea de comandos de Windows (&lt;span style="font-family:courier new;"&gt;cmd&lt;/span&gt;) ejecuta el archivo &lt;span style="font-family:courier new;"&gt;c:\cygwin\Cygwin.bat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/Sjbaf6JZ5LI/AAAAAAAAAIQ/GXyXoPbU5xk/s1600-h/open_session.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 158px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/Sjbaf6JZ5LI/AAAAAAAAAIQ/GXyXoPbU5xk/s320/open_session.jpg" alt="" id="BLOGGER_PHOTO_ID_5347701849268544690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ejecuta el siguiente comando para cambiar el prefijo de montaje de "/cygdrive" a "/". Cierras esta sesión y abres una nueva para resetear la variable de ambiente PATH.&lt;br /&gt;&lt;div class="code_block"&gt;$ mount -s --change-cygdrive-prefix /&lt;/div&gt;&lt;br /&gt;crea el archivo de usuarios&lt;br /&gt;&lt;div class="code_block"&gt;$ mkpasswd -l &gt; /etc/passwd&lt;/div&gt;&lt;br /&gt;el archivo de grupos&lt;br /&gt;&lt;div class="code_block"&gt;$ mkgroup -l &gt; /etc/group&lt;/div&gt;&lt;br /&gt;asigna privilegio de lectura sobre ambos&lt;br /&gt;&lt;div class="code_block"&gt;$ chmod +r /etc/passwd&lt;br /&gt;$ chmod +r /etc/group&lt;/div&gt;&lt;br /&gt;asigna los siguientes privilegios sobre el directorio /var&lt;br /&gt;&lt;div class="code_block"&gt;$ chmod 755 /var&lt;/div&gt;&lt;br /&gt;si no existe el directorio /home es recomendable que lo crees ya que ahí se guardarán los archivos de los usuarios, la ubicación por default es el directorio "Documents and Settings". Al crear el directorio /home usando la opción -p hará que cuando se cree un usuario su directorio de trabajo estará dentro del directorio c:\cygwin.&lt;br /&gt;&lt;div class="code_block"&gt;$ mkdir -p /home&lt;br /&gt;$ mkdir /home/Administrator&lt;br /&gt;$ cd&lt;/div&gt;&lt;br /&gt;Hasta aquí tienes configurado tu ambiente, lo siguiente es instalar el servicio de ssh ejecutando el comando &lt;span style="font-family: courier new;"&gt;ssh-host-config&lt;/span&gt; el cual genera los archivos llave de ssh del host dentro de /etc. Nota que se crean dos usuarios, uno llamado sshd para manejar la separación de privilegios y otro llamado sshd_server requerido por Windows 2003 para correr el servicio y proveer de autenticación por llave pública. Tu salida debe ser algo parecida a esta&lt;br /&gt;&lt;div class="code_block"&gt;$ &lt;b&gt;ssh-host-config&lt;/b&gt;&lt;br /&gt;*** Info: Generating /etc/ssh_host_key&lt;br /&gt;*** Info: Generating /etc/ssh_host_rsa_key&lt;br /&gt;*** Info: Generating /etc/ssh_host_dsa_key&lt;br /&gt;*** Info: Creating default /etc/ssh_config file&lt;br /&gt;*** Info: Creating default /etc/sshd_config file&lt;br /&gt;*** Info: Privilege separation is set to yes by default since OpenSSH 3.3.&lt;br /&gt;*** Info: However, this requires a non-privileged account called 'sshd'.&lt;br /&gt;*** Info: For more info on privilege separation read /usr/share/doc/openssh/README.privsep.&lt;br /&gt;*** Query: Should privilege separation be used? (yes/no) &lt;b&gt;yes&lt;/b&gt;&lt;br /&gt;*** Info: Note that creating a new user requires that the current account have&lt;br /&gt;*** Info: Administrator privileges.  Should this script attempt to create a&lt;br /&gt;*** Query: new local account 'sshd'? (yes/no) &lt;b&gt;yes&lt;/b&gt;&lt;br /&gt;*** Info: Updating /etc/sshd_config file&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*** Warning: The following functions require administrator privileges!&lt;br /&gt;&lt;br /&gt;*** Query: Do you want to install sshd as a service?&lt;br /&gt;*** Query: (Say "no" if it is already installed as a service) (yes/no) &lt;b&gt;yes&lt;/b&gt;&lt;br /&gt;*** Info: Note that the CYGWIN variable must contain at least "ntsec"&lt;br /&gt;*** Info: for sshd to be able to change user context without password.&lt;br /&gt;*** Query: Enter the value of CYGWIN for the daemon: [ntsec] &lt;b&gt;ntsec&lt;/b&gt;&lt;br /&gt;*** Info: On Windows Server 2003, Windows Vista, and above, the&lt;br /&gt;*** Info: SYSTEM account cannot setuid to other users -- a capability&lt;br /&gt;*** Info: sshd requires.  You need to have or to create a privileged&lt;br /&gt;*** Info: account.  This script will help you do so.&lt;br /&gt;&lt;br /&gt;*** Info: You appear to be running Windows 2003 Server or later.  On 2003&lt;br /&gt;*** Info: and later systems, it's not possible to use the LocalSystem&lt;br /&gt;*** Info: account for services that can change the user id without an&lt;br /&gt;*** Info: explicit password (such as passwordless logins [e.g. public key&lt;br /&gt;*** Info: authentication] via sshd).&lt;br /&gt;&lt;br /&gt;*** Info: If you want to enable that functionality, it's required to create&lt;br /&gt;*** Info: a new account with special privileges (unless a similar account&lt;br /&gt;*** Info: already exists). This account is then used to run these special&lt;br /&gt;*** Info: servers.&lt;br /&gt;&lt;br /&gt;*** Info: Note that creating a new user requires that the current account&lt;br /&gt;*** Info: have Administrator privileges itself.&lt;br /&gt;&lt;br /&gt;*** Info: No privileged account could be found.&lt;br /&gt;&lt;br /&gt;*** Info: This script plans to use 'cyg_server'.&lt;br /&gt;*** Info: 'cyg_server' will only be used by registered services.&lt;br /&gt;*** Query: Do you want to use a different name? (yes/no) &lt;b&gt;yes&lt;/b&gt;&lt;br /&gt;*** Query: Enter the new user name: &lt;b&gt;sshd_server&lt;/b&gt;&lt;br /&gt;*** Query: Reenter: &lt;b&gt;sshd_server&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;*** Query: Create new privileged user account 'sshd_server'? (yes/no) &lt;b&gt;yes&lt;/b&gt;&lt;br /&gt;*** Info: Please enter a password for new user sshd_server.  Please be sure&lt;br /&gt;*** Info: that this password matches the password rules given on your system.&lt;br /&gt;*** Info: Entering no password will exit the configuration.&lt;br /&gt;*** Query: Please enter the password:&lt;br /&gt;*** Query: Reenter:&lt;br /&gt;&lt;br /&gt;*** Info: User 'sshd_server' has been created with password 'welcome'.&lt;br /&gt;*** Info: If you change the password, please remember also to change the&lt;br /&gt;*** Info: password for the installed services which use (or will soon use)&lt;br /&gt;*** Info: the 'sshd_server' account.&lt;br /&gt;&lt;br /&gt;*** Info: Also keep in mind that the user 'sshd_server' needs read permissions&lt;br /&gt;*** Info: on all users' relevant files for the services running as 'sshd_server'&lt;br /&gt;.&lt;br /&gt;*** Info: In particular, for the sshd server all users' .ssh/authorized_keys&lt;br /&gt;*** Info: files must have appropriate permissions to allow public key&lt;br /&gt;*** Info: authentication. (Re-)running ssh-user-config for each user will set&lt;br /&gt;*** Info: these permissions corrently. [Similary restrictions apply, for&lt;br /&gt;*** Info: instance, for .rhosts files if the rshd server is running, etc].&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*** Info: The sshd service has been installed under the 'sshd_server'&lt;br /&gt;*** Info: account.  To start the service now, call `net start sshd' or&lt;br /&gt;*** Info: `cygrunsrv -S sshd'.  Otherwise, it will start automatically&lt;br /&gt;*** Info: after the next reboot.&lt;br /&gt;&lt;br /&gt;*** Info: Host configuration finished. Have fun!&lt;/div&gt;&lt;br /&gt;para levantarlo desde línea de comando ejecutas&lt;br /&gt;&lt;div class="code_block"&gt;$ net start sshd&lt;/div&gt;&lt;br /&gt;ó&lt;br /&gt;&lt;div class="code_block"&gt;$ cygrunsrv -S sshd&lt;/div&gt;&lt;br /&gt;o desde "Control Panel -&gt; Administrative Tools -&gt; Services" el servicio llamado "CYGWIN sshd".&lt;br /&gt;&lt;br /&gt;Nunca está de más una prueba antes de avisar que ya lo configuraste. La salida debería parecerse a la siguiente:&lt;br /&gt;&lt;div class="code_block"&gt;$ &lt;b&gt;ssh -v localhost&lt;/b&gt;&lt;br /&gt;OpenSSH_5.1p1, OpenSSL 0.9.8k 25 Mar 2009&lt;br /&gt;debug1: Reading configuration data /etc/ssh_config&lt;br /&gt;debug1: Connecting to localhost [127.0.0.1] port 22.&lt;br /&gt;debug1: Connection established.&lt;br /&gt;debug1: identity file /home/Administrator/.ssh/identity type -1&lt;br /&gt;debug1: identity file /home/Administrator/.ssh/id_rsa type -1&lt;br /&gt;debug1: identity file /home/Administrator/.ssh/id_dsa type -1&lt;br /&gt;debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1&lt;br /&gt;debug1: match: OpenSSH_5.1 pat OpenSSH*&lt;br /&gt;debug1: Enabling compatibility mode for protocol 2.0&lt;br /&gt;debug1: Local version string SSH-2.0-OpenSSH_5.1&lt;br /&gt;debug1: SSH2_MSG_KEXINIT sent&lt;br /&gt;debug1: SSH2_MSG_KEXINIT received&lt;br /&gt;debug1: kex: server-&gt;client aes128-cbc hmac-md5 none&lt;br /&gt;debug1: kex: client-&gt;server aes128-cbc hmac-md5 none&lt;br /&gt;debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024&lt;1024&lt;8192)&lt;br /&gt;Warning: Permanently added 'localhost' (RSA) to the list of known hosts.&lt;br /&gt;debug1: ssh_rsa_verify: signature correct&lt;br /&gt;debug1: SSH2_MSG_NEWKEYS sent&lt;br /&gt;debug1: expecting SSH2_MSG_NEWKEYS&lt;br /&gt;debug1: SSH2_MSG_NEWKEYS received&lt;br /&gt;debug1: SSH2_MSG_SERVICE_REQUEST sent&lt;br /&gt;debug1: SSH2_MSG_SERVICE_ACCEPT received&lt;br /&gt;debug1: Authentications that can continue: publickey,password,keyboard-interacti&lt;br /&gt;ve&lt;br /&gt;debug1: Next authentication method: publickey&lt;br /&gt;debug1: Trying private key: /home/Administrator/.ssh/identity&lt;br /&gt;debug1: Trying private key: /home/Administrator/.ssh/id_rsa&lt;br /&gt;debug1: Trying private key: /home/Administrator/.ssh/id_dsa&lt;br /&gt;debug1: Next authentication method: keyboard-interactive&lt;br /&gt;debug1: Authentications that can continue: publickey,password,keyboard-interacti&lt;br /&gt;ve&lt;br /&gt;debug1: Next authentication method: password&lt;br /&gt;Administrator@localhost's password:&lt;br /&gt;debug1: Authentication succeeded (password).&lt;br /&gt;debug1: channel 0: new [client-session]&lt;br /&gt;debug1: Requesting no-more-sessions@openssh.com&lt;br /&gt;debug1: Entering interactive session.&lt;br /&gt;&lt;br /&gt;Administrator@testserver ~&lt;br /&gt;$&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Fuente&lt;br /&gt;&lt;a href="http://ist.uwaterloo.ca/~kscully/CygwinSSHD_W2K3.html"&gt;http://ist.uwaterloo.ca/~kscully/CygwinSSHD_W2K3.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fuente con tips de solución a problemas en XP&lt;br /&gt;&lt;a href="http://pigtail.net/LRP/printsrv/cygwin-sshd.html"&gt;http://pigtail.net/LRP/printsrv/cygwin-sshd.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-3889678623893563964?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/3889678623893563964/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/06/instalando-ssh-en-windows-2003-server.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/3889678623893563964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/3889678623893563964'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/06/instalando-ssh-en-windows-2003-server.html' title='Instalando SSH en Windows 2003 Server'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_t1WQBJYuFhI/SjbI_jC5RWI/AAAAAAAAAGg/omElcCb0OQo/s72-c/desc_cygwin_exe.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-5099107656481721423</id><published>2009-06-12T10:06:00.012-05:00</published><updated>2009-06-25T22:54:57.953-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Sobre binarios de Apache 1.3.x</title><content type='html'>&lt;img style="MARGIN: 5px 10px 0px 0px; WIDTH: 200px; FLOAT: left; HEIGHT: 100px;" id="BLOGGER_PHOTO_ID_5351459470255739826" border="0" alt="" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s200/apache.jpg" /&gt;&lt;div style="text-align: justify;"&gt;Los binarios aquí presentados son para fines educativos, de ninguna manera deben ser usados en servidores productivos. Se ofrecen COMO SON. El administrador no se responsabiliza por ningún daño que pueda causar en tu máquina el uso de este software el cual ha sido probado antes de estar disponible para su descarga.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/243546204/Apache_1.3.41-mod_ssl_2.8.31-OpenSSL_0.9.8k-Win32.zip"&gt;Apache_1.3.41-mod_ssl_2.8.31-OpenSSL_0.9.8k-Win32.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: line-through;"&gt;Apache_1.3.41-mod_ssl_2.8.31-OpenSSL_0.9.8j-Win32.zip&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Última actualización: 12-Jun-2009&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-5099107656481721423?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/5099107656481721423/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/06/sobre-binarios-de-apache-13x.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5099107656481721423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5099107656481721423'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/06/sobre-binarios-de-apache-13x.html' title='Sobre binarios de Apache 1.3.x'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s72-c/apache.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-9126157887157690103</id><published>2009-01-18T12:56:00.009-06:00</published><updated>2009-06-25T22:55:10.545-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Seguridad básica de Apache htpasswd/htaccess en Win32</title><content type='html'>&lt;img style="MARGIN: 5px 0px 0px 10px; WIDTH: 200px; FLOAT: right; HEIGHT: 100px;" id="BLOGGER_PHOTO_ID_5351459470255739826" border="0" alt="" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s200/apache.jpg" /&gt;&lt;div style="text-align: justify;"&gt;El servidor web Apache cuenta con un esquema de seguridad sencillo pero eficiente para establecer autenticación sobre directorios en los que se desea restringir el acceso mediante un usuario y contraseña. Este procedimiento funciona para Apache 1.3.x, del cual puedes descargarte la última versión &lt;a href="http://archive.apache.org/dist/httpd/binaries/win32/"&gt;aquí&lt;/a&gt; o descargarte el paquete de archivos ejecutables que hice a partir de los fuentes de Apache, mod_ssl y OpenSSL de &lt;a href="http://sartigas.blogspot.com/2009/06/sobre-binarios-de-apache-13x.html"&gt;aquí&lt;/a&gt; el cual sólo descomprimes y corres. Para efectos de este tutorial utilizaré este último.&lt;br /&gt;&lt;br /&gt;Abre una sesión de línea de comandos y desplázate al directorio &lt;code&gt;[APACHE_HOME]\bin&lt;/code&gt; que es donde encontrarás el archivo &lt;code&gt;htpasswd.exe&lt;/code&gt;, ejecuta la instrucción:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;htpasswd -c apache.usr estergios&lt;/code&gt;&lt;br /&gt;Escribes la contraseña para el usuario estergios y la confirmas reescribiéndola nuevamente.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SXNy8tNBU1I/AAAAAAAAAEo/vLywbHOGPLo/s1600-h/htpasswd1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 198px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SXNy8tNBU1I/AAAAAAAAAEo/vLywbHOGPLo/s400/htpasswd1.png" alt="" id="BLOGGER_PHOTO_ID_5292700374342390610" border="0" /&gt;&lt;/a&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Puedes verificar el contenido del archivo con el comando &lt;code&gt;type apache.usr&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SXNzMB3Kh8I/AAAAAAAAAEw/q8fc4hKmRq0/s1600-h/htpasswd2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 198px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SXNzMB3Kh8I/AAAAAAAAAEw/q8fc4hKmRq0/s400/htpasswd2.png" alt="" id="BLOGGER_PHOTO_ID_5292700637585901506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Si necesitas agregar más de un usuario ejecuta la instrucción:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;htpasswd -b apache.usr invitado invitado&lt;/code&gt;&lt;br /&gt;después de la opción &lt;code&gt;-b&lt;/code&gt; va el nombre del archivo de usuarios previamente creado seguido del usuario y por último la contraseña, en el caso del ejemplo el usuario y contraseña son iguales.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/SXNzX3TbvqI/AAAAAAAAAE4/najnF-v4efk/s1600-h/htpasswd3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 198px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/SXNzX3TbvqI/AAAAAAAAAE4/najnF-v4efk/s400/htpasswd3.png" alt="" id="BLOGGER_PHOTO_ID_5292700840910110370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Poniéndole atención al archivo apache.usr podrás observar, hasta este momento, un par de líneas de caracteres de las cuales sólo se distinguen del lado izquierdo los nombres de usuarios. El resto pertenece a la contraseña la cual &lt;code&gt;htpasswd.exe&lt;/code&gt; en automático encripta usando el algoritmo &lt;a href="http://es.wikipedia.org/wiki/MD5"&gt;MD5&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Una vez creado el archivo de usuarios, el siguiente paso es configurar el archivo &lt;code&gt;[APACHE_HOME]\conf\httpd.conf&lt;/code&gt;. Verifica que la directiva &lt;code&gt;AccessFileName&lt;/code&gt; exista o no esté comentada(#).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#&lt;br /&gt;# AccessFileName: The name of the file to look for in each directory&lt;br /&gt;# for access control information.&lt;br /&gt;#&lt;br /&gt;AccessFileName .htaccess&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Lo que hace es establecer el nombre del archivo donde Apache buscará los accesos sobre el directorio. Ahora bien, cada directorio que deseas restringir debe tener un archivo &lt;code&gt;.htaccess&lt;/code&gt;. Un ejemplo sencillo sería restringir el acceso al directorio &lt;code&gt;c:\aplicacion&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Dentro del directorio &lt;code&gt;c:\aplicacion&lt;/code&gt; crearé un archivo &lt;code&gt;.htaccess&lt;/code&gt; con directivas específicas para el contexto llamado &lt;code&gt;mod_auth&lt;/code&gt;. Más información en &lt;a href="http://httpd.apache.org/docs/mod/mod_auth.html"&gt;http://httpd.apache.org/docs/mod/mod_auth.html&lt;/a&gt; y &lt;a href="http://httpd.apache.org/docs/mod/core.html#authname"&gt;http://httpd.apache.org/docs/mod/core.html#authname&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SXN1CkibFyI/AAAAAAAAAFA/AFmz2iwA_vM/s1600-h/htpasswd4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 198px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SXN1CkibFyI/AAAAAAAAAFA/AFmz2iwA_vM/s400/htpasswd4.png" alt="" id="BLOGGER_PHOTO_ID_5292702674118711074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Las directivas del archivo &lt;code&gt;.htaccess&lt;/code&gt; son:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;AuthName "Mi Aplicación"&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthUserFile C:\Apache\bin\apache.usr&lt;br /&gt;require user estergios invitado&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En la tercera directiva especificas la ruta del archivo de usuarios que creaste y en la última línea especificas a quienes les permitirás el acceso. Hasta este momento Apache tiene información suficiente de los usuarios, no así del directorio, ya que si desde tu navegador intentas ver el directorio, se mostrará sin mayor contratiempo.&lt;br /&gt;&lt;br /&gt;El siguiente paso es configurar en Apache el directorio cómo restringido, abre tu archivo &lt;code&gt;[APACHE_HOME]\conf\httpd.conf&lt;/code&gt; y busca:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# Control access to UserDir directories. The following is an example&lt;br /&gt;# for a site where these directories are restricted to read-only.&lt;br /&gt;#&lt;br /&gt;#&amp;#60;directory "/Apache/users"&amp;#62;&lt;br /&gt;# AllowOverride FileInfo AuthConfig Limit&lt;br /&gt;# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec&lt;br /&gt;# &amp;#60;Limit GET POST OPTIONS PROPFIND&amp;#62;&lt;br /&gt;#  Order allow,deny&lt;br /&gt;#  Allow from all&lt;br /&gt;# &amp;#60;/limit&amp;#62;&lt;br /&gt;# &amp;#60;limitexcept GET POST OPTIONS PROPFIND&amp;#62;&lt;br /&gt;#  Order deny,allow&lt;br /&gt;#  Deny from all&lt;br /&gt;# &amp;#60;/limitexcept&amp;#62;&lt;br /&gt;#&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Quita los comentarios(#) que van de la directiva &amp;#60;directory&amp;#62; hasta &amp;#60;/directory&amp;#62;, cambia la ruta &lt;code&gt;"/Apache/users"&lt;/code&gt; por &lt;code&gt;"c:/aplicacion"&lt;/code&gt; que es la ruta donde se encuentra el archivo &lt;code&gt;.htaccess&lt;/code&gt;, es decir, el directorio restringido el cual quedaría como:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# Control access to UserDir directories. The following is an example&lt;br /&gt;# for a site where these directories are restricted to read-only.&lt;br /&gt;#&lt;br /&gt;&amp;#60;directory "c:/aplicacion"&amp;#62;&lt;br /&gt; AllowOverride FileInfo AuthConfig Limit&lt;br /&gt; Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec&lt;br /&gt; &amp;#60;limit GET POST OPTIONS PROPFIND&amp;#62;&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from all&lt;br /&gt; &amp;#60;/limit&amp;#62;&lt;br /&gt; &amp;#60;limitexcept GET POST OPTIONS PROPFIND&amp;#62;&lt;br /&gt;  Order deny,allow&lt;br /&gt;  Deny from all&lt;br /&gt; &amp;#60;/limitexcept&amp;#62;&lt;br /&gt;&amp;#60;/directory&amp;#62;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Por último, el directorio &lt;code&gt;c:\aplicacion&lt;/code&gt; no está configurado para que Apache lo pueda accesar, por lo que será necesario que busques la directiva &lt;code&gt;&amp;#60;IfModule mod_alias.c&amp;#62;&lt;/code&gt; e immediatamente después de esta escribas la línea:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Alias /aplicacion "C:/aplicacion/"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Lo anterior crea un alias, por lo que ahora puedes acceder desde tu navegador la ruta protegida: http://testserver/aplicacion&lt;br /&gt;&lt;br /&gt;Inicia Apache o bájalo y vuélvelo a levantar si es que lo tenías arriba e intenta acceder a la ruta: http://testserver/aplicacion si tu configuración es correcta te aparecerá la ventana de acceso:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SXN4YmFjUqI/AAAAAAAAAFI/OPbrD4GYrk8/s1600-h/htpasswd5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 320px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SXN4YmFjUqI/AAAAAAAAAFI/OPbrD4GYrk8/s400/htpasswd5.png" alt="" id="BLOGGER_PHOTO_ID_5292706351026492066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Si presionas el botón Cancelar, veras una pantalla como esta:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SXN4wjPppVI/AAAAAAAAAFQ/tBnAuxZiB-s/s1600-h/htpasswd6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 320px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SXN4wjPppVI/AAAAAAAAAFQ/tBnAuxZiB-s/s400/htpasswd6.png" alt="" id="BLOGGER_PHOTO_ID_5292706762580403538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;o si escribes un usuario y contraseña correctos, ingresarás al directorio:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t1WQBJYuFhI/SXN5hcdmoCI/AAAAAAAAAFY/rXuu4MAtJyE/s1600-h/htpasswd7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 320px;" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SXN5hcdmoCI/AAAAAAAAAFY/rXuu4MAtJyE/s400/htpasswd7.png" alt="" id="BLOGGER_PHOTO_ID_5292707602573467682" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-9126157887157690103?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/9126157887157690103/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/01/seguridad-bsica-de-apache.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/9126157887157690103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/9126157887157690103'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/01/seguridad-bsica-de-apache.html' title='Seguridad básica de Apache htpasswd/htaccess en Win32'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s72-c/apache.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2534304691130970131</id><published>2009-01-14T13:37:00.024-06:00</published><updated>2009-06-25T22:55:22.601-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Cómo configurar Apache+SSL en Win32</title><content type='html'>&lt;img style="MARGIN: 5px 10px 0px 0px; WIDTH: 200px; FLOAT: left; HEIGHT: 100px;" id="BLOGGER_PHOTO_ID_5351459470255739826" border="0" alt="" src="http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s200/apache.jpg" /&gt;&lt;div style="text-align: justify;"&gt;Versión 1.6.6&lt;br /&gt;&lt;br /&gt;Un nuevo y esperemos que actualizado con más frecuencia ‘Cómo configurar’ el cual cubre Apache 2 está disponible en &lt;a href="http://raibledesigns.com/tomcat/ssl-howto.html"&gt;http://raibledesigns.com/tomcat/ssl-howto.html&lt;/a&gt;(en inglés). Checa además &lt;a href="http://www.thompsonbd.com/tutorials/apachessl.php"&gt;este tutorial que cubre Apache 2 en Windows 2003 Server&lt;/a&gt;(en inglés también) si es que usas ese.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://netsafe.free.fr/index.php?Chap=A1"&gt;Traducción al francés&lt;/a&gt; mantenida por &lt;a href="mailto:jfmoreau@ifrance.com"&gt;Jean-Francois Moreau&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.thorsnet.dk/?m=Ops?t_webserver&amp;amp;side=setup_mod_ssl"&gt;Traducción al danés&lt;/a&gt; mantenida por &lt;a href="mailto:morten@THORSNET.dk"&gt;Morten Fischer-Nielsen&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Panorama general&lt;/h3&gt;Esta página describe la instalación de Apache para Windows con la extensión mod_ssl. La versión más reciente debería estar siempre disponible en &lt;a href="http://tud.at/programm/apache-ssl-win32-howto.php3"&gt;http://tud.at/programm/apache-ssl-win32-howto.php3&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este proceso le funcionó a varias personas en Windows NT, 98, ME, 2000 y XP. Puedes inclusive instalar Apache con SSL además del servidor Microsoft Internet Information Server si así lo necesitas.&lt;br /&gt;&lt;br /&gt;Nota: algunas veces, hay cambios entre distribuciones precompiladas de Apache en las cuales este ‘Cómo configurar’ no aplica. En este caso, si la versión actual no te funciona, prueba con una versión anterior – una que sea anterior a la fecha de modificación de este ‘Cómo configurar’. O, si prefieres la aventura, trata de hacer que funcione.&lt;br /&gt;&lt;br /&gt;Nótese que Apache 1.3.x en Win32 se considera calidad beta ya que no alcanza la estabilidad y rendimiento de las plataformas Un*x. Las versiones 2.x quizas sean mejores sin embargo este ‘Cómo configurar’ no lo cubre.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;h3&gt;1.: Instalando Apache&lt;/h3&gt;Obtén la versión para Windows del servidor web Apache de alguna de las ubicaciones &lt;a href="http://archive.apache.org/dist/httpd/binaries/win32/"&gt;alternas&lt;/a&gt;. Se llama algo ásí como &lt;code&gt;apache_x_y_z_win32-x86-no_src.msi&lt;/code&gt;. Se trata de un archivo auto-instalable que contiene el sistema base de Apache y archivos de configuración de ejemplo.&lt;br /&gt;&lt;br /&gt;¡No mezcles versiones de Apache 1.3 y 2! No funcionan. Si encuentras 1.3.x en modssl.org, no puedes esperar que funcione con 2.0.x.&lt;br /&gt;&lt;br /&gt;Instala Apache como se describe en &lt;a href="http://www.apache.org/docs/windows.html"&gt;http://www.apache.org/docs/windows.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cambia al menos los siguientes parámetros en el archivo de configuración [&lt;code&gt;APACHE_HOME]/conf/httpd.conf&lt;/code&gt;:&lt;br /&gt;&lt;strong&gt;[No olvides reemplazar &lt;code&gt;www.my-server.dom&lt;/code&gt; con el nombre de dominio real]&lt;/strong&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Port 80&lt;/code&gt; a &lt;code&gt;&lt;b&gt;#&lt;/b&gt; Port 80&lt;/code&gt; (Pónlo cómo comentario(#); no se necesita &lt;code&gt;Port&lt;/code&gt;, &lt;code&gt;Listen&lt;/code&gt; lo sobreescribe más adelante.) &lt;/li&gt;&lt;li&gt;(Si no está además del IIS) &lt;code&gt;Listen 80&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Listen 443&lt;/code&gt; (Para que el servidor escuche por el puerto SSL estándar) &lt;/li&gt;&lt;li&gt;&lt;code&gt;ServerName&lt;/code&gt; &lt;b&gt;www.my-server.dom&lt;/b&gt;&lt;/li&gt;&lt;li&gt;(Si está además del IIS) &lt;code&gt;DocumentRoot&lt;/code&gt; y el correspondiente &lt;code&gt;&amp;lt;Directory&lt;/code&gt; algún-dir&lt;code&gt;&amp;gt;&lt;/code&gt; a tu &lt;code&gt;Inetpub\wwwroot&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Instala el servicio de Apache(sólo NT/2000/XP) y levántalo. Verifica que todo funciona antes de proceder con la instalación de SSL para limitar los posibles errores.&lt;br /&gt;&lt;br /&gt;Intenta &lt;u&gt;&lt;b&gt;http://www.my-server.dom:443/&lt;/b&gt;&lt;/u&gt;. No estará encriptado todavía pero si funciona quiere decir que la configuración del puerto 443 es correcta.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2.: Obteniendo OpenSSL y mod_ssl&lt;/h3&gt;Los archivos binarios(librerías/ejecutables) de donde usualmente se descargaban ya no están disponibles &lt;strike&gt;http://www.modssl.org/contrib/&lt;/strike&gt; o &lt;strike&gt;http://hunter.campbus.com/&lt;/strike&gt; y el sitio de OpenSSL sólo distribuye el código fuente pero ofrece la opción de un tercero para instalar los binarios en: &lt;a href="http://www.openssl.org/related/binaries.html"&gt;http://www.openssl.org/related/binaries.html&lt;/a&gt;. Sólo tienes que seguir las instrucciones para instalarlo (Sólo OpenSSL).&lt;br /&gt;&lt;br /&gt;&lt;span class="lbluebox"&gt;Puesto que no encontré ningún paquete con los binarios de Apache, OpenSSL y mod_ssl listo para ejecutarse, me di a la tarea de bajar los fuentes y generar un paquete probado y funcionando. Este lo puedes descargar visitando:&lt;br /&gt;&lt;a href="http://sartigas.blogspot.com/2009/06/sobre-binarios-de-apache-13x.html"&gt;Sobre binarios de Apache 1.3.x&lt;/a&gt; descomprimes en C:\, actualizas el archivo &lt;code&gt;[APACHE_HOME]\conf\httpd.conf&lt;/code&gt; con tu configuración y listo.&lt;/span&gt;Copia los archivos &lt;code&gt;ssleay32.dll&lt;/code&gt; y &lt;code&gt;libeay32.dll&lt;/code&gt; del directorio de distribución de OpenSSL [OPENSSL_HOME]\bin al directorio &lt;code&gt;WINNT\System32&lt;/code&gt; ó &lt;code&gt;WINDOWS\System32&lt;/code&gt; en XP. Esto es importante ya que en muchos casos olvidan hacerlo experimentando problemas posteriores.&lt;br /&gt;&lt;br /&gt;Actualmente no es necesario un archivo de configuración(.cnf) para que &lt;code&gt;openssl.exe&lt;/code&gt; pueda crear la petición de certificado(archivo .csr), si aún así crees que lo necesitas puedes descargarlo de &lt;a href="http://tud.at/programm/openssl.cnf"&gt;aquí&lt;/a&gt; o de &lt;a href="http://www.geocities.com/sartigas/openssl.cnf"&gt;aquí&lt;/a&gt;. Este es un archivo de texto normal, sin embargo, algunas versiones de Windows insisten en ocultarte la extensión. Puedes editarlo con el Notepad de Windows o un buen editor, aunque no debería ser necesario.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;3.: Creando un certificado de prueba&lt;/h3&gt;Puedes crear la petición de certificado (archivo .csr) de dos maneras, la primera es usando el archivo de configuración &lt;code&gt;openssl.cnf&lt;/code&gt; mencionado en el punto anterior y la otra es sin usar este archivo.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Para crear el archivo de petición de certificado usando el archivo de configuración:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Las instrucciones siguientes son de &lt;a href="http://www.apache-ssl.org/#FAQ"&gt;http://www.apache-ssl.org/#FAQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;openssl req -config openssl.cnf -new -out my-server.csr&lt;/code&gt;&lt;br /&gt;Esto crea el acrhivo de petición y una llave privada. Para crearlo openssl necesita que ingreses la información solicitada, un ejemplo de esta información solicitada es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;code&gt;-----&lt;br /&gt;Country Name (2 letter code) [AU]: GB&lt;br /&gt;State or Province Name (full name) [Some-State]: Yorks&lt;br /&gt;Locality Name (eg, city) []: York&lt;br /&gt;Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyCompany Ltd&lt;br /&gt;Organizational Unit Name (eg, section) []: IT&lt;br /&gt;Common Name (eg, YOUR name) []: www.my-server.dom&lt;br /&gt;Email Address []:&lt;br /&gt;&lt;br /&gt;Please enter the following 'extra' attributes to be sent with your certificate request&lt;br /&gt;&lt;br /&gt;A challenge password []:&lt;br /&gt;An optional company name []:&lt;br /&gt;-----&lt;/code&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;Cuando llegas a “&lt;code&gt;Common Name (eg, YOUR name) []: www.my-server.dom”&lt;/code&gt; da el nombre de dominio exacto de tu servidor web (p.e. &lt;strong&gt;www.my-server.dom&lt;/strong&gt;) o si estás en una máquina de pruebas usa el nombre de red que tenga(p.e. testserver). Habrá un valor por default para algunos campos, si sólo pones un ‘.’(punto) en estos, serán manejados como campos vacíos. El certificado pertenece a este nombre de servidor y los navegadores muestran un mensaje o niegan mostrar el contenido si el nombre no coincide.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;openssl rsa -in privkey.pem -out my-server.key&lt;/code&gt;&lt;br /&gt;Esto quita password de la llave privada. DEBES entender lo que significa esto; &lt;code&gt;my-server.key&lt;/code&gt; debería ser sólo visible por el servidor Apache y el administrador. Elimina el archivo &lt;code&gt;.rnd&lt;/code&gt; ya que contiene información entrópica para crear la llave y podría ser usado para ataques criptográficos contra la llave privada.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Para crear el archivo de petición de certificado sin archivo de configuración:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;openssl req -new -nodes -keyout my-server.key -out my-server.csr&lt;/code&gt;&lt;br /&gt;Esto crea dos archivos. El archivo my-server.key que contiene la llave privada. En particular, asegúrate de respaldar la llave privada, ya que no hay manera de recuperarla si la pierdes. Ingresar la información solicitada por openssl.&lt;br /&gt;&lt;br /&gt;Usa el nombre del servidor web como Nombre Común o Common Name (CN). Los campos email address, optional company name y challenge password pueden dejarse vacíos para un certificado de pruebas.&lt;br /&gt;&lt;br /&gt;Una vez creado el archivo de petición de ceritificado continuas con lo siguiente.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 365&lt;/code&gt;&lt;br /&gt;Esto crea un certificado auto-firmado que puedes usar hasta que obtengas uno “real” de una autoridad certificada. (El cual es opcional, si sabes quienes son tus usuarios, puedes decirles que instalen el certificado en sus navegadores). Nótese que el certificado expira después de un año, puedes cambiar &lt;code&gt;-days 365&lt;/code&gt; al valor que tú especifiques.&lt;br /&gt;&lt;br /&gt;Si tienes usuarios con MS Internet Explorer 4.x y quieres que sean capaces de instalar tu certificado (descargándolo y abriéndolo), necesitas crear una versión del certificado codificada en DER:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;openssl x509 -in my-server.cert -out my-server.der.crt -outform DER&lt;/code&gt;&lt;br /&gt;Crea el directorio [APACHE_HOME]\conf\ssl y mueve &lt;code&gt;my-server.key&lt;/code&gt; y &lt;code&gt;my-server.cert&lt;/code&gt; a esa ubicación.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;4.: Configurando Apache y mod_ssl&lt;/h3&gt;Copia el archivo mod_ssl.so al directorio [APACHE_HOME]\modules.&lt;br /&gt;&lt;br /&gt;Encuentra las directivas LoadModule en tu archivo &lt;code&gt;httpd.conf&lt;/code&gt; y agrega lo siguiente a las que ya existen, de acuerdo al archivo proporcionado para tu distribución:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;LoadModule ssl_module modules/ApacheModuleSSL.dll&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;o&lt;br /&gt;&lt;br /&gt;&lt;code&gt;LoadModule ssl_module modules/ApacheModuleSSL.so&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;o&lt;br /&gt;&lt;br /&gt;&lt;code&gt;LoadModule ssl_module modules/mod_ssl.so&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;en versiones recientes.&lt;br /&gt;&lt;br /&gt;En versiones recientes de la distribución, podría también ser necesario agregar&lt;br /&gt;&lt;code&gt;AddModule mod_ssl.c&lt;/code&gt;&lt;br /&gt;después de las líneas AddModule que ya existentes.&lt;br /&gt;&lt;br /&gt;Añade lo siguiente al final del archivo &lt;code&gt;httpd.conf&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;i&gt;# see &lt;a href="http://www.modssl.org/docs/2.8/ssl_reference.html"&gt;http://www.modssl.org/docs/2.8/ssl_reference.html&lt;/a&gt; for more info&lt;/i&gt;&lt;br /&gt;SSLMutex sem&lt;br /&gt;SSLRandomSeed startup builtin&lt;br /&gt;SSLSessionCache none&lt;br /&gt;&lt;br /&gt;SSLLog logs/SSL.log&lt;br /&gt;SSLLogLevel info&lt;br /&gt;&lt;i&gt;# You can later change "info" to "warn" if everything is OK&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost &lt;b&gt;www.my-server.dom&lt;/b&gt;:443&amp;gt;&lt;br /&gt;SSLEngine On&lt;br /&gt;SSLCertificateFile conf/ssl/my-server.cert&lt;br /&gt;SSLCertificateKeyFile conf/ssl/my-server.key&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;No olvides levantar Apache con &lt;code&gt;-D SSL&lt;/code&gt; si la directiva &lt;code&gt;IfDefine&lt;/code&gt; está activa en el archivo de configuración.&lt;br /&gt;&lt;br /&gt;Puede que necesites usar &lt;code&gt;regedit&lt;/code&gt; para cambiar la clave &lt;code&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\X.Y.Z&lt;/code&gt; con el número de versión correcto de Apache si el &lt;code&gt;apache.exe&lt;/code&gt; de tu distribución no coincide con la clave. (Esto parece no ser necesario con versiones recientes)&lt;br /&gt;&lt;br /&gt;También, si usas las directivas IfDefine y levantas Apache como servicio, necesitas editar la línea de comando de Apache en el registro (&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache2&lt;/code&gt;)(Esto no lo he intentado).&lt;br /&gt;&lt;br /&gt;Levanta el servidor, esta vez desde la línea de comandos (no como servicio) para ver los mensajes de error que impidan que Apache arranque. Si todo sale bien, (opcionalmente) presiona CTRL+C o desde otra sesión de línea de comando ejecuta: &lt;code&gt;apache –k stop&lt;/code&gt; para detener el servidor e iniciarlo como servicio si así lo definiste.&lt;br /&gt;&lt;br /&gt;Si no arranca, Apache debería mostrar mensajes descriptivos en la pantalla y/o en los archivos error.log y ssl.log del directorio [APACHE_HOME]\logs. Si algo no funciona, configura todos los &lt;code&gt;LogLevel&lt;/code&gt;s al máximo y &lt;em&gt;échale un ojo a los archivos log&lt;/em&gt;. Son de mucha ayuda.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Depurando problemas de conexión&lt;/h3&gt;Los problemas de conexión al servidor desde un navegador pueden tener varias causas, varias de ellas en el lado del cliente (proxy, DNS, alguna tontería del IE).&lt;br /&gt;&lt;br /&gt;Así que si encuentras problemas para conectarte con SSL, inténtalo desde otro navegador y/o revisa tu configuración. Si nada de eso funciona, puedes usar OpenSSL para depurar el problema.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;code&gt;bb@www$ &lt;b&gt;openssl s_client -connect no-such-machine:443&lt;/b&gt;&lt;br /&gt;gethostbyname failure &lt;i&gt;# Error al resolver este nombre DNS. Conéctate con la dirección IP.&lt;/i&gt;&lt;br /&gt;connect:errno=2&lt;br /&gt;&lt;br /&gt;bb@www$ &lt;b&gt;openssl s_client -connect www1.tud.at:443&lt;/b&gt;&lt;br /&gt;connect: Connection refused&lt;br /&gt;connect:errno=111&lt;br /&gt;&lt;i&gt;# No hay servidor SSL en este puerto. Revisa las directivas &lt;b&gt;Listen&lt;/b&gt; y &lt;b&gt;Port&lt;/b&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;bb@www$ &lt;b&gt;openssl s_client -connect &lt;/b&gt;apcenter.apcinteractive.net&lt;b&gt;:443&lt;/b&gt;&lt;br /&gt;&lt;i&gt;# Todo está OK. OpenSSL muestra la información obtenida del servidor.&lt;/i&gt;&lt;br /&gt;CONNECTED(00000003)&lt;br /&gt;depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net&lt;br /&gt;verify error:num=18:self signed certificate&lt;br /&gt;verify return:1&lt;br /&gt;depth=0 /C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net&lt;br /&gt;verify return:1&lt;br /&gt;---&lt;br /&gt;Certificate chain&lt;br /&gt;0 s:/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net&lt;br /&gt;  i:/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net&lt;br /&gt;---&lt;br /&gt;Server certificate&lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIC0TCCAjoCAQAwDQYJKoZIhvcNAQEEBQAwgbAxCzAJBgNVBAYTAmF0MQ0wCwYDV&lt;br /&gt;[...]&lt;br /&gt;9ucXUnk=&lt;br /&gt;-----END CERTIFICATE-----&lt;br /&gt;subject=/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net&lt;br /&gt;issuer=/C=at/ST=Wien/L=Wien/O=APC interactive/OU=Lifecycle Management/CN=apcenter.apcinteractive.net/Email=bb@apcinteractive.net&lt;br /&gt;---&lt;br /&gt;No client certificate CA names sent&lt;br /&gt;---&lt;br /&gt;SSL handshake has read 1281 bytes and written 320 bytes&lt;br /&gt;---&lt;br /&gt;New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA&lt;br /&gt;Server public key is 1024 bit&lt;br /&gt;SSL-Session:&lt;br /&gt;   Protocol  : TLSv1&lt;br /&gt;   Cipher    : EDH-RSA-DES-CBC3-SHA&lt;br /&gt;   Session-ID: 49ACE1CF484A67D2C476B923D52110A6FCA1A7CE53D76DF7F233DEBF2333D4FB&lt;br /&gt;   Session-ID-ctx:&lt;br /&gt;   Master-Key: 00E9FA964253752294ECD69C18ADBA527B7170C112E2B3BCB25EA8F4FD847EC46E1FF0194EF8E16985B5E38BF6F12131&lt;br /&gt;   Key-Arg   : None&lt;br /&gt;   Start Time: 980696025&lt;br /&gt;   Timeout   : 300 (sec)&lt;br /&gt;   Verify return code: 0 (ok)&lt;br /&gt;---&lt;br /&gt;&lt;b&gt;[Escribe:&lt;br /&gt;GET / HTTP/1.0&lt;br /&gt;y presiona ENTER dos veces]&lt;/b&gt;&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;Date: Sun, 28 Jan 2001 15:34:58 GMT&lt;br /&gt;Server: Apache/1.3.9 (Win32) mod_ssl/2.4.9 OpenSSL/0.9.4&lt;br /&gt;Cache-Control: no-cache, no-store, must-revalidate, private&lt;br /&gt;Expires: 0&lt;br /&gt;Pragma: no-cache&lt;br /&gt;X-Powered-By: PHP/4.0.4&lt;br /&gt;Last-Modified: Sun, 28 Jan 2001 15:35:00 GMT&lt;br /&gt;Connection: close&lt;br /&gt;Content-Type: text/html&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;i&gt;# El servidor muestra su página principal&lt;/i&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Problemas comunes&lt;/h3&gt;P: Veo lo siguiente cuando arranca Apache:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Syntax error on line [some number] of ...httpd.conf&lt;br /&gt;Cannot load apache/modules/mod_ssl.so into server&lt;br /&gt;(126) The module could not be found:&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;R: ¿Copiaste las DLLs de OpenSSL a WINNT\System32 (o WINDOWS\System32 en Win9x/ME/XP)?&lt;br /&gt;Puedes verificar esto copiando &lt;code&gt;openssl.exe&lt;/code&gt; a un directorio propio y ejecutarlo. Si marca error por no poder encontrar algunas DLLs, quiere decir que no las has copiado al directorio correcto.&lt;br /&gt;Un usuario alguna vez comentó que tenía este problema aún cuando había hecho todo bien. Encontró que el problema eran las DLLs de OpenSSL que se corrompieron. Así que si tienes este error a pesar de haber hecho todo correctamente, intenta usar las DLLs de otra versión de OpenSSL.&lt;br /&gt;&lt;br /&gt;P: Veo lo siguiente cuando arranca Apache:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Syntax error on line [some number] of apache/conf/httpd.conf:&lt;br /&gt;Cannot load apache/modules/apachemodulessl.dll into server:&lt;br /&gt;(127) The specified procedure could not be found:&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;o:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Syntax error on line [some number] of apache/conf/httpd.conf:&lt;br /&gt;Invalid command 'SSLMutex', perhaps mis-spelled or defined by a module not&lt;br /&gt;included in the server configuration&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;R: No añadiste la línea AddModule (o no donde debe ir, lo cual es debajo de las otras líneas AddModule).&lt;br /&gt;&lt;br /&gt;P: SSL no funciona en el navegador y veo lo siguiente en algún archivo log:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[Fri Nov 16 15:46:30 2001] [error] OpenSSL: error:1407609C:SSL&lt;br /&gt;routines:SSL23_GET_CLIENT_HELLO:http request [Hint: speaking HTTP to&lt;br /&gt;HTTPS port!?]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;R: ¿Qué más claro puede ser un mensaje de error? Tu configuración de VirtualHost o Listen no es la correcta.&lt;br /&gt;&lt;br /&gt;&lt;span class="lbluebox"&gt;&lt;b&gt;Preguntas sobre la compilación de Apache, OpenSSL y mod_ssl&lt;/b&gt;&lt;br /&gt;Sólo contestaré preguntas donde haya un trabajo de por medio, la documentación que estos proporcionan es bastante clara y sencilla de seguir aunque no apta para principiantes debo decir.&lt;br /&gt;&lt;br /&gt;Como tip si es que tienes la curiosidad de hacerlo, utiliza los fuentes de todo, es decir, genera los binarios desde cero.&lt;/span&gt;&lt;h3&gt;Enlaces&lt;/h3&gt;Servidor Web Apache: &lt;a href="http://www.apache.org/"&gt;http://www.apache.org/&lt;/a&gt;&lt;br /&gt;mod_ssl: &lt;a href="http://www.modssl.org/"&gt;http://www.modssl.org/&lt;/a&gt;&lt;br /&gt;Configuración de mod_ssl: &lt;a href="http://www.modssl.org/docs/2.8/ssl_reference.html"&gt;http://www.modssl.org/docs/2.8/ssl_reference.html&lt;/a&gt;&lt;br /&gt;OpenSSL: &lt;a href="http://www.openssl.org/"&gt;http://www.openssl.org/&lt;/a&gt;&lt;br /&gt;PHP preprocesador de hypertexto: &lt;a href="http://www.php.net/"&gt;http://www.php.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Autor de este documento: &lt;a href="mailto:balazs@tud.at"&gt;Balázs Bárány&lt;/a&gt; (&lt;a href="http://tud.at/"&gt;http://tud.at&lt;/a&gt;)&lt;br /&gt;(envíame tus preguntas, pero sólo después de haber echado un vistazo a los errores en los logs con &lt;code&gt;LogLevel debug&lt;/code&gt;. Puedes escribirme en Inglés, Alemán y Húngaro. Si constantemente ignoro sus correos, lean todas las pistas de este ‘Cómo configurar’ acerca de cómo escribirme).&lt;br /&gt;&lt;br /&gt;Colaborador: &lt;a href="mailto:Horst.Braeuner@t-online.de"&gt;Horst Bräuner&lt;/a&gt; (Configuración de OpenSSL en NT)&lt;br /&gt;Colaborador: &lt;a href="mailto:admin@liquid-attack.com"&gt;Christoph Zich&lt;/a&gt; (Windows 98)&lt;br /&gt;Colaborador: &lt;a href="mailto:Torsten.Stanienda@datadesign.de"&gt;Torsten Stanienda&lt;/a&gt; (Prueba con 1.3.12, directiva IfDefine)&lt;br /&gt;Colaborador: &lt;a href="mailto:PHolm@gmx.de"&gt;Peter Holm&lt;/a&gt; (Directivas Listen y Port)&lt;br /&gt;&lt;br /&gt;Último cambio 14-ENE-2009&lt;br /&gt;&lt;br /&gt;Traducido por &lt;a href="http://sartigas.blogspot.com/"&gt;Sergio Artigas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este documento puede ser redistribuído bajo la &lt;a href="http://www.gnu.org/copyleft/fdl.html"&gt;Licencia de Libre Documentation GNU&lt;/a&gt;. © Balázs Bárány 1999-2009&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2534304691130970131?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2534304691130970131/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2009/01/cmo-configurar-apachessl-en-win32.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2534304691130970131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2534304691130970131'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2009/01/cmo-configurar-apachessl-en-win32.html' title='Cómo configurar Apache+SSL en Win32'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t1WQBJYuFhI/SkQ0CPJ-U7I/AAAAAAAAAIw/L8aTC2TtBwo/s72-c/apache.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2640246443762229247</id><published>2008-12-09T23:37:00.012-06:00</published><updated>2008-12-12T11:01:18.462-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sociedad'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas Operativos'/><category scheme='http://www.blogger.com/atom/ns#' term='Ideología'/><title type='text'>Cómo los usuarios de Windows están cambiando Linux y qué debemos hacer al respecto</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t1WQBJYuFhI/ST9ZQct5UQI/AAAAAAAAAEg/hLaARA65_Xs/s1600-h/tux.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 167px; height: 200px;" src="http://4.bp.blogspot.com/_t1WQBJYuFhI/ST9ZQct5UQI/AAAAAAAAAEg/hLaARA65_Xs/s200/tux.gif" alt="" id="BLOGGER_PHOTO_ID_5278035427422982402" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;No hay duda que la gente está dejando Windows, muchos cambiando a Mac y otros más a Linux. Esto es en parte debido al descontento con Vista. La razón no es importante. Qué le está sucediendo a la comunidad de Linux es lo importante.&lt;br /&gt;&lt;br /&gt;Soy activo en varios foros de ayuda. Veo montones de peticiones al respecto. Muchas de ellas vienen de usuarios atados a Windows. Las cantidades y la manera en cómo se acercan a Linux están teniendo un impacto. Nadie tiene una cifra exacta, pero sabemos que la adopción de Linux está creciendo. Ya que la mayoría de los nuevos usuarios tienen antecedentes en Windows, traen consigo sus hábitos y experiencia. Esto no siempre se traduce bien al moverse de una plataforma de Windows a otra, por ejemplo, de XP a Vista. Moverse de XP a Linux es un cambio fuerte para muchos de ellos.&lt;br /&gt;&lt;br /&gt;Afortunadamente, la comunidad de Linux es tolerante y servicial. Muchos de nosotros estuvimos alguna vez en sus zapatos. Sin embargo, no todos lo fuimos. Esto es causa de algunos problemas, por ejemplo, como cuando un gurú de Unix le pide a un novato de Windows abrir una terminal y corregir el gconf desde la línea de comandos usando nano. Es un intercambio interesante entre los dos eso es seguro. Ambos terminan con frecuencia frustrados por alguna extraña razón. Estas cosas suelen pasar cuando chocan dos mundos distintos.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Sin embargo vemos que los usuarios de Windows están teniendo un impacto en la comunidad de Linux que pudimos no haber anticipado. Ellos no están acostumbrados a elegir. Para ellos el arsenal de opciones que Linux presenta es confuso.&lt;br /&gt;&lt;br /&gt;Comencemos con el número de distros. ¿Cómo comenzar a elegir? Cada quien tiene su opinión, pero a quien creerle. Así que se van por uno u otro por lo que les han dicho o por su popularidad. Pueden querer probar Fedora porque saben que viene de Red Hat y han oído que Red Hat es grande en Linux (los servidores, solamente que ellos no saben la diferencia). No se dan cuenta que Fedora no es una distro para novatos y no importa cuanto argumentes, no los convencerás. Peores son aún los que tienen una vieja copia del mismo Red Hat y quieren utilizarla en una vieja computadora de escritorio y esperar que funcione como han oído que funciona Linux, moderno y de fácil uso. Ahí tienen Ubuntu. Lo utilizan porque es el que la mayoría de la gente está utilizando. No es de extrañar que nuestros foros estén llenos de confusión y en muchos casos de frustración.&lt;br /&gt;&lt;br /&gt;Así que esto es lo que veo como el problema. Esta frustración y confusión hace a los usuarios de Windows decir que Linux debe parecerse más a Windows. Ellos no quieren elegir y quieren ver estandarización. Peor aún, un pequeño porcentaje quiere cambiar Linux de modo que sea más bien como Windows. Y necesitamos estar preparados para tratar tales declaraciones y proteger lo que hace único a Linux.&lt;br /&gt;&lt;br /&gt;Sucede con frecuencia de manera inocente. Alguien tiene un problema con la instalación de un paquete que le hace decir algo como que eso es más fácil de instalar en Windows. No lo es y necesitamos decirles porqué no lo es y hacerlo de buena manera para no desviarlos. O pueden preguntar cuál es un buen antivirus para instalar o cómo defragmentar un disco, lo cual es común en un ambiente de Windows, pero no se traduce bien a Linux.&lt;br /&gt;&lt;br /&gt;Haz de haber oído la expresión de que no debería haber tantas opciones. Eso abruma a los novatos y sería mejor si hubiera solo una distro. Acabo de leer una columna al respecto ayer. De hecho, son algo comunes. Tratan algo como esto. Linux tiene un problema y si quiere tener éxito, necesita competir con Windows. Por lo tanto, Linux debe cambiar. Luego el escritor se ofusca al decir cómo Linux no se compara favorablemente con Windows. Es "caótica" la manera en que Linux maneja los archivos de configuración, por lo tanto necesita un registro centralizado. Hay demasiados administradores de paquetes que hace imposible que los desarrolladores comerciales los soporten todos, argumentan ellos. El kernel siempre está cambiando debido a que se maneja por separado.&lt;br /&gt;&lt;br /&gt;Lo vemos desde dos perspectivas, los novatos al fondo y la gente informada interesada y sin fines de lucro hasta arriba. Estoy seguro que ya antes habías oído estas quejas y de la idea de que Linux es demasiado diverso que nunca tendrá éxito.&lt;br /&gt;&lt;br /&gt;El problema es que nadie ha hecho nunca el salto que ellos están haciendo. Linux no necesita competir con nadie. Está haciendo lo suyo y en el proceso está creciendo en aceptación. Por lo tanto los únicos cambios que necesita realizar son evolutivos, como parte de su crecimiento natural.&lt;br /&gt;&lt;br /&gt;Linux es ya un éxito. No necesita convertirse en algo que no es. Si Linux fuera a intentar competir con Windows de la manera en que alguna gente se lo imagina, perdería su identidad. Se convertiría en la corriente principal y no sería lo que es, una alternativa a la corriente principal.&lt;br /&gt;&lt;br /&gt;¿Así que, cómo enfrentamos tales expresiones? Necesitamos antes que nada estar fuera de sus intereses protectores. Necesitamos en segundo lugar reconocer lo que es, una tentativa de secuestrar Linux. Necesitamos estar a la altura y orgullosos de lo que tenemos y no soñar sobre lo que podría ser con solo entrar al reino de Windows. Linux es lo que es y Windows es lo que es. Los usuarios tienen opciones. Eso es todo lo que se necesita.&lt;br /&gt;&lt;br /&gt;En términos prácticos, tenemos que manejar los diversos intereses de otra manera. Los novatos necesitan ser educados y mostrárseles cómo utilizar Linux. Necesitan saber porqué hacemos las cosas de la manera que las hacemos y recordar que la fuerza de Linux viene de su diversidad.&lt;br /&gt;&lt;br /&gt;Con los más duros de tratar es con los escritores y bloggers que saben sobre Linux y sus idiosincrasias. Ven estas cosas como fallas y dan razones. En este caso necesitamos entender y educarnos antes de que le respondamos a ellos. Tenemos que presentar argumentos convincentes para no ir en su dirección. Para hacer esto necesitamos saber donde están llegando, en que sentido nos llevara eso y tal vez saber qué motivo oculto pudieran tener. Todos tienen una agenda.&lt;br /&gt;&lt;br /&gt;Si esperamos defender Linux entonces tenemos que estar dispuestos a defender nuestro terreno. Necesitamos aceptar Linux antes que nada por lo que es. Si estamos de acuerdo con sus críticas entonces tenemos que aprender por qué es de la forma en que está. Linux tiene una historia. Hay razones válidas por las que las cosas son de la manera que son.&lt;br /&gt;&lt;br /&gt;Siempre que la gente intenta tomar algo en otra dirección con esfuerzo consciente, generalmente falla. El cambio revolucionario a menudo desata fuerzas que no podemos controlar. En cambio, el cambio evolutivo construye y utiliza su fundación natural. Es lento, pero es seguro. Linux está cambiando, pero está cambiando a su propia manera. Eso es bueno y sano.&lt;br /&gt;&lt;br /&gt;Linux es código abierto, así que la gente es libre de hacer lo que quiera con él. Cualquier persona, incluyendo Microsoft, puede hacer su propia distribución que haga exacto lo que él quiere. El problema es que esto no produce el resultado que desearían. Solamente aumenta el número de distros. Así pues, lo que quieren en realidad es revolución. Necesitan que Linux deje de ser lo que es a fin de que su visión se convierta en realidad. Necesitan parar otros proyectos para que el suyo tenga éxito. Esta es la razón por la cual tales discusiones son intrínsecamente peligrosas y porqué debemos alzar la voz.&lt;br /&gt;&lt;br /&gt;La mayoría de los usuarios de Linux están informados y tienen información extensa. Muchos también son callados. Puesto que Linux no tiene ningún portavoz, todos lo que tiene somos nosotros, los usuarios y los desarrolladores que creen en una idea compartida. Necesitamos dar voz a lo que Linux representa y necesitamos no ser callados o dudar al respecto cuando se trate de expresar nuestra opinión.&lt;br /&gt;&lt;br /&gt;A veces lo mejor con lo que algunos usuarios pueden salir es tal que hubiera sido mejor que permanecieran callados. Comentarios tales como “estás mal” o “eres un idiota” no son constructivos. Demuestran emociones, nada más. Se necesita decirle a los que critican porqué las cosas son de la manera que son. Necesitamos contar nuestra historia y compartir la filosofía detrás de Linux. Necesitamos decir que no compartimos sus aspiraciones de cambiar lo que ya es bueno.&lt;br /&gt;&lt;br /&gt;Personalmente no me importa con qué salga Microsoft. No utilizo Windows ni lo quiero usar. El éxito o fracaso de Microsoft me es irrelevante. Linux no necesita que Windows falle para que tenga éxito. No hay tal competencia en mi mente. Tan pronto como la gente comienza a hablar como si la hubiera, sospecho inmediatamente de sus motivos e intenciones. La gente que escribe que Windows 7 matará a Linux claramente no entiende Linux o a los usuarios de Linux.&lt;br /&gt;&lt;br /&gt;No vamos a voltear siempre hacia cualquier cosa que produce Microsoft. Utilizamos Linux porque cubre nuestras necesidades y expresa nuestro deseo de libertad, control y propiedad sobre nuestra propia computadora algo que Microsoft nunca va a entregar. Microsoft y Apple están diametralmente opuestos a eso. Ven la computadora como algo que deben controlar y que por extensión te pueden controlar a ti y a tus hábitos. La gente que piensa así no tendrá a Linux y nunca lo hará, que es exactamente el problema en mi mente.&lt;br /&gt;&lt;br /&gt;Microsoft odia lo que Linux representa. No tiene nada que hacer con los pros y contras expresados por gente que quiere cambiar Linux para que sea como Windows. Todo tiene que ver fundamentalmente en cómo vemos las cosas de distinta forma y en el hecho de que por primera vez están compitiendo con una ideología que no puede comprar como a una compañía. Así que su solución es intentar cambiar la ideología, desencadenando en escritores que discuten pros y contras. Todo es parte de una campaña &lt;a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt"&gt;FUD&lt;/a&gt;(Fear, uncertainty and doubt en inglés, miedo, incertidumbre y duda en español) en la que algunos escritores en complicidad participan activamente desde adentro o algunos pueden ser solo incautos involuntarios, que fueron tragados hace tiempo por el &lt;a href="http://www.urbandictionary.com/define.php?term=Borg"&gt;Borg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Al final, no importa mucho si están implicados activa o pasivamente. El hecho es que hay una campaña. He leído informes en semanas recientes sobre que Microsoft sobornaba a bloggers con computadoras portátiles gratis y que le paga a las compañías para recomendar Windows. No sería descabellado pensar que le están pagando a gente y a compañías para impulsar su agenda también de otras maneras. No sólo es necesario para Microsoft atacar la ideología, sino que quieren cerrar el boquete entre los dos Sistemas Operativos de modo que haya poco de donde elegir. Ablandándonos para luego destruirnos fácilmente.&lt;br /&gt;&lt;br /&gt;Tenemos mucho que hacer con el resultado. Necesitamos mantener Linux en su camino, de modo que podamos ser una alternativa. Cuando dejemos de serlo, entonces no tendremos nada que ofrecer, ese es el precio y eso es algo con lo que Microsoft puede vivir.&lt;br /&gt;&lt;br /&gt;Mi opinión es divulgar Linux y promover la unidad en la comunidad. Está bien tener rivalidad amistosa entre distros, pero tenemos que evitar las grandes e insidiosas fuerzas atacando desde el exterior, y proteger aquello que tenemos en común. Si Linux va a cambiar que sea de adentro hacia afuera.&lt;br /&gt;&lt;br /&gt;Traducido de &lt;a href="http://linuxcanuck.wordpress.com/2008/12/03/how-windows-users-are-changing-linux-and-what-we-should-do-about-it/"&gt;linuxcanuck.wordpress.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2640246443762229247?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2640246443762229247/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2008/12/cmo-los-usuarios-de-windows-estn.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2640246443762229247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2640246443762229247'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2008/12/cmo-los-usuarios-de-windows-estn.html' title='Cómo los usuarios de Windows están cambiando Linux y qué debemos hacer al respecto'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_t1WQBJYuFhI/ST9ZQct5UQI/AAAAAAAAAEg/hLaARA65_Xs/s72-c/tux.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-4076679033520593892</id><published>2008-09-14T22:33:00.013-05:00</published><updated>2009-01-14T17:14:30.009-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='procrastinación'/><category scheme='http://www.blogger.com/atom/ns#' term='sociedad'/><category scheme='http://www.blogger.com/atom/ns#' term='administración'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><category scheme='http://www.blogger.com/atom/ns#' term='cultura'/><title type='text'>Procrastinar o no procrastinar...</title><content type='html'>&lt;a style="" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SMzeev7C-kI/AAAAAAAAACM/-JlJ9ZjBpnM/s1600-h/Procrastination.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 270px; height: 268px;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SMzeev7C-kI/AAAAAAAAACM/-JlJ9ZjBpnM/s320/Procrastination.jpg" alt="" id="BLOGGER_PHOTO_ID_5245812285821352514" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Wikipedia define como:&lt;br /&gt;&lt;span class="lbluebox"&gt;La &lt;b&gt;procrastinación&lt;/b&gt; (del latín: &lt;i&gt;pro&lt;/i&gt;, adelante, y &lt;i&gt;crastinus&lt;/i&gt;, referente al futuro) es la acción de postergar actividades o situaciones que uno debe atender, por otras situaciones más irrelevantes y agradables.&lt;/span&gt;este es uno de los problemas más grandes que la mayoría de personas tienen. Muchos creen que no "administran bien su tiempo" y como resultado trabajan poco. Esto puede ser cierto. Pero, ¡para ciertas personas! los demás no terminan su trabajo porque son "¡procrastinadores!".&lt;br /&gt;&lt;br /&gt;Por ejemplo, un estudiante se sienta a leer unas cuantas páginas de su libro que son interesantes. Luego llega a una que es complicada y aburrida, en vez de tratar de entender el contenido se convence a sí mismo de que lo hará más tarde. Sin embargo, ese "más tarde" nunca llega, eso es procrastinar.&lt;br /&gt;&lt;br /&gt;Algunas personas son "procrastinadores eventuales", procrastinan pero no en todo. Otros son "procrastinadores crónicos" que encuentran muy difícil terminar algo, hay inclusive algunos estudiantes que les resulta muy difícil comenzar a estudiar, por ejemplo. Cada vez que se sientan a estudiar, ¡se convencen a sí mismos de que hay algo más importante que eso! terminan posponiéndolo hasta que es demasiado tarde y terminan haciéndolo desesperadamente y aprisa.&lt;br /&gt;&lt;br /&gt;HEY HEY espera espera, si eres "procrastinador crónico" probablemente estás leyendo este artículo y diciendo... "¡Hey que buen artículo!, ¡me puede ayudar!, creo que lo pondré en mis favoritos y regresaré más tarde a leerlo" ¡NO! ¡Ni se te ocurra! termina de leerlo en este momento. Es el primer paso para dejar ese hábito.&lt;br /&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;¿Porqué procrastinamos?&lt;/span&gt;&lt;br /&gt;Varias son las razones por las que las personas procrastinan, trataré de explicar algunas de ellas. La idea es que una vez que entiendas las razones detrás de la procrastinación, seas capaz de identificarla la próxima vez antes de que lo hagas, si así lo hicieras deberías ser capaz de superarlo fácilmente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;4 sencillas razones&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;u&gt;Cuando algo se dificulta:&lt;/u&gt; cuando piensas que una tarea en particular es difícil de hacer, tratas de convencerte a ti mismo de no hacerlo. En lugar de eso tratas de hacer algo más fácil. Esta es una de las razones más comunes por las que las personas procrastinan. ¡Estate atento! la próxima vez que vayas a hacer algo difícil analiza la manera en que tu mente trata de convencerte de que deberías hacer otra cosa.&lt;br /&gt;&lt;br /&gt;No caigas en este juego. ¡Haz la tarea difícil en ese momento! y cuando la termines, enorgullécete de haberla terminado. Detente unos segundos y piensa en lo bien que hiciste esa tarea sin procrastinación.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Cuando algo consume tiempo:&lt;/u&gt; cuando sientes que una tarea consume tiempo o tomará un buen, tratarás de procrastinarla. ¡Evitarás siquiera comenzarla! te convencerás de que debes hacer algo más.&lt;br /&gt;&lt;br /&gt;Reconoce el momento. Para superarlo, un truco es decirle a tu mente que trabajarás en la tarea solamente 10 minutos, no más. La idea es seccionarla en partes pequeñas y hacer una a la vez. Sin embargo, el efecto es muy diferente. Una vez que comienzas a trabajar en ella, probablemente continuarás incluso más allá de los 10 minutos. ¡Inténtalo!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Cuando sientes que te falta el conocimiento o la habilidad requerida:&lt;/u&gt; Cuando sientes que no tienes los conocimientos o habilidades para hacer tu trabajo, lo procrastinas. Podría deberse a que no quieres cometer errores. Por lo tanto te convences de que debes estudiar antes de hacerla.&lt;br /&gt;&lt;br /&gt;La mejor manera de hacer este tipo de tareas es diciéndote, "esta tarea es fácil, yo puedo hacerlo, que tan difícil puede ser", algo en ese sentido.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Cuando tienes miedo:&lt;/u&gt; Generalmente, es cuando temes fracasar en tu trabajo y no quieres que los demás sepan que fallaste o que te culpen por ello. Así que lo evitas, lo procrastinas. De una u otra manera lo sigues aplazando. Reconócelo cuando lo haces.&lt;br /&gt;&lt;br /&gt;Para entrarle, necesitas otra vez convencerte de que "la tarea es fácil, lo puedes hacer", etc.&lt;/li&gt;&lt;/ol&gt;En los párrafos anteriores menciono que "tendrás que convencerte a ti mismo" para superar tu procrastinación. Te estarás preguntando, "¿tendré que mentirme a mí mismo para superarlo?". La respuesta es: ¡SI!&lt;br /&gt;&lt;br /&gt;Después de todo cada vez que procrastinas, lo que realmente haces es engañarte a ti mismo ¿cierto?, por ejemplo: Si enfrentas un problema difícil te "convences a ti mismo" de que "debes" hacer otra cosa. Por eso, terminas aplazándolo. Es por esto que para superar la procrastinación, tienes que mentirte a ti mismo una vez más, así que la respuesta es: ¡SI! miéntete a ti mismo.&lt;br /&gt;&lt;br /&gt;Ahora bien, lo PEOR acerca de la procrastinación es que es auto-gratificante por lo que es duro salir del hábito. Por ejemplo: Si aplazas algo hasta el último minuto lo haces aprisa y de alguna manera te las arreglas para terminarlo bien, es cuando te sientes bien contigo mismo. Comienzas a convencerte a ti mismo de que solo puedes trabajar bajo presión cuando hay poco tiempo.&lt;br /&gt;&lt;br /&gt;La próxima vez, cuando tengas algo que hacer, te dirás a ti mismo, "dejen que llegue el último minuto, cuando haya presión, me sentaré y lo haré, de todas formas trabajo mucho mejor bajo presión ¿o no?". De esta manera tu hábito de procrastinación crece y comienzas a procrastinar más y más. ¡Tarde o temprano comenzarás a procrastinar todo!&lt;br /&gt;&lt;br /&gt;Hasta ahora he explicado algunas razones simples del porqué las personas procrastinan. Hay otras más complejas que explicaré más adelante. Sin embargo, ¡las razones no importan! lo que MAS importa es que sepas cuando lo estás haciendo. Debes ser capaz de entender que estás en procrastinación.&lt;br /&gt;&lt;br /&gt;Recuerda que si eres un procrastinador, es probable que lo hagas en casi todo, probablemente en cosas grandes y pequeñas. Observa cómo tu mente juega contigo y te convence de aplazar cosas. Una vez que estés consciente de esto, serás capaz de resolver tus problemas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_t1WQBJYuFhI/SM3bwbF9tuI/AAAAAAAAACk/kReIoWgiFxg/s1600-h/past-present-and-future-me.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_t1WQBJYuFhI/SM3bwbF9tuI/AAAAAAAAACk/kReIoWgiFxg/s400/past-present-and-future-me.jpg" alt="" id="BLOGGER_PHOTO_ID_5246090765909472994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Razones complejas&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;u&gt;Hostilidad o enojo:&lt;/u&gt; Cuando sientes alguno de estos dos hacia la persona para la que estás haciendo el trabajo, lo procrastinarás. ¿Por qué? ¡Para rebelarte contra ella! para pelear nada más.&lt;br /&gt;&lt;br /&gt;Por ejemplo: asume que eres un estudiante y estás en la clase de un profesor irritante. Ahora bien, supón que te da una asignación larga para que la termines. Es muy probable que procrastines para hacerla. Procrastinarás diciéndote a ti mismo algo como "se equivoca si cree que haré lo que me encargó".&lt;br /&gt;&lt;br /&gt;Básicamente procrastinas para rebelarte contra el profesor. Sin embargo, el problema es que cuando se acerca el momento de entregarla, la tendrás que hacer aprisa. Harás un pésimo trabajo.&lt;br /&gt;&lt;br /&gt;¿Como te aseguras de no cometer este error? entiende lo que sientes. Entiende que si aplazas el trabajo ahora, te afectará más tarde. No deseas que un profesor irritante o algún estúpido jefe destruya tu futuro, ¿cierto? entonces no permitas que tu enojo fluya por estas situaciones.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Poca tolerancia a la frustración:&lt;/u&gt; Si no tienes la capacidad de manejar demasiada frustración, tendrás una tendencia a procrastinar cosas. El problema es que siempre que te sientas a hacer algo, si sientes que va a ser frustrante, te saturas con la cantidad de frustración implicada. Tratas de encontrar una manera de escapar de toda esa frustración. Así que terminas no haciendo el trabajo, lo pospones.&lt;br /&gt;&lt;br /&gt;Para superar esto, podrías buscar a alguien que te ayude con el trabajo. Si ese alguien es experto en la materia, te mostrará el camino correcto. Esto ayudará a que en el futuro hagas el trabajo sin toda esa frustración.&lt;br /&gt;&lt;br /&gt;Sin embargo, no siempre se es capaz de encontrar a alguien más. Necesitas tener un alto grado de tolerancia hacia la frustración. Puedes desarrollar esto tratando de lograr lo que estás haciendo sin importar lo difícil que sea. Aún cuando sea frustrante, ¡apégate! no renuncies. Es más fácil decirlo que hacerlo, ¡lo sé!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Auto-regulado:&lt;/u&gt; Algunas personas tienden ellas mismos a regularse continuamente. Por ejemplo, constantemente dicen cosas como "No, fue solo suerte" o "No, ¡no puedo trabajar tan rápido!, soy muy lento para trabajar".&lt;br /&gt;&lt;br /&gt;Si tú eres de estos, es probable que también seas un ¡procrastinador! No crees en ti mismo, no crees en tu éxito. Así que para evitarlo o evitar ser el "foco de atención" subconscientemente tratas de no ser exitoso. Lo logras procrastinando.&lt;br /&gt;&lt;br /&gt;¿Como resuelves este problema? primero, no te limites constantemente y menos por los elogios de las personas sobre tu trabajo. Si alguien te dice "¡buen trabajo!" tu di "¡gracias!", no digas "¡tuve suerte!".&lt;br /&gt;&lt;br /&gt;Ve porqué te sientes incómodo por el éxito. ¿Alguien importante en tu vida frecuentemente te hacia sentir de esa manera? ¿Te enseñaron a reducir al mínimo tu éxito? ¿Por qué el éxito asusta tanto? ¿Hará que destaques de los demás? ¿Sientes que los demás no te aceptarán por ser exitoso? de la misma manera, cada vez que hagas algo bien ¡exprésalo! tómate unos segundos para disfrutar el buen trabajo que has hecho.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Perfeccionismo:&lt;/u&gt; Algunas personas son perfeccionistas o son forzadas a serlo. Debido a esto, se vuelven procrastinadores. ¿Por qué? cuando tienes un muy pero muy alto estándar para todo lo que haces, todo tu trabajo requiere entonces de MUCHO esfuerzo. Por eso, tratarás de escapar de todo este trabajo simplemente ¡procrastinando! Es más fácil no hacerlo que esforzarse por hacerlo perfectamente. Los perfeccionistas dicen cosas como: "¡de cualquier manera lo haré bien! ó ¡para nada que lo haré!".&lt;br /&gt;&lt;br /&gt;¿Como resolver este problema? es lamentable decirlo pero, tendrás que bajar tus estándares. Tendrás que comenzar a aceptar que no siempre las cosas deben ser perfectas. Haz un esfuerzo para expresar que hiciste un buen trabajo. El perfeccionismo es un problema que viene de la falta de confianza o de auto estima.  Así que debes aprender a sentir confianza de ti mismo y de tus habilidades.&lt;/li&gt;&lt;/ol&gt;Estas son varias causas por las que las personas procrastinan. Probablemente entendiste muy bien una o dos de estas ya que son problemas específicos que te afectan. Ahora bien, es importante que cuando procrastines en tu vida diaria, trates de identificar exactamente cual es la razón y superarlo.&lt;br /&gt;&lt;br /&gt;Generalmente la procrastinación se debe a algún problema psicológico que debes resolver. Lo anterior te proporciona trucos de ayuda, pero lo que realmente te ayudará es que vayas con un buen terapista, y le pidas que identifique tus problemas y los resuelvan. Desafortunadamente no todos tienen el tiempo o dinero para esto, si tienes los recursos úsalos. Ve a un terapista y pídele que te ayude con tu problema de procrastinación. ¡Eso te ayudará mucho!&lt;br /&gt;&lt;br /&gt;Antes de continuar con otras maneras de superarlo, veamos rápidamente cómo te puedes asegurar de que tus niños no sufren el problema de procrastinación que tú enfrentas y qué puedes hacer para que no se conviertan en uno más.&lt;br /&gt;&lt;br /&gt;Los procrastinadores se hacen. Nadie nace siéndolo. Una de las razones por las que los niños se convierten en esto es porque tienen padres estrictos. Si tienes padres estrictos que te dicen exactamente lo que tienes que hacer, cuando y cómo debes hacerlo, no desarrollas la habilidad para hacer tú mismo cosas. No desarrollas la capacidad de decidir que debes hacer y programar tu tiempo para hacerlo. Necesitas que siempre te digan qué es lo que vas a hacer. Esta es la causa principal de la procrastinación. Cuando crecen, toma formas diversas como las ya mencionadas anteriormente.&lt;br /&gt;&lt;br /&gt;Otra causa importante de la procrastinación es la "rebeldía". Cuando tienes padres estrictos, que te dicen cómo hacer cada cosa, te rebelas contra ellos y no haces nada. Y tus amigos que toleran las excusas que les das, ¡aumentan esta conducta!&lt;br /&gt;&lt;br /&gt;¿Así pues, cómo te cercioras de que tu niño no crezca siendo un ineficaz procrastinador? ¡Es obvio! permite que el/ella aprenda a hacer las cosas por sí misma. Dale la libertad para elegir hacer cosas en su momento y posponer otras. Siempre que hagan cosas a tiempo, recompénsalos. Permítele saber que el/ella ha hecho algo bien.&lt;br /&gt;&lt;br /&gt;Si no haces esto y piensas y programas en lugar del niño, jamás tratará de pensar en tales cosas y terminará siendo un ineficaz procrastinador.&lt;br /&gt;&lt;br /&gt;Criar niños es un asunto muy delicado. ¡Hazlo apropiadamente! sino, el niño no crecerá para ser eficiente, auto-capaz o auto-controlado. Si nunca tiene un incidente, estará en desventaja. Cuando el/ella entiendan todo esto, te culparán.&lt;br /&gt;&lt;br /&gt;Veamos ahora algunas técnicas para superar la procrastinación. Primero, una técnica llamada "Procrastinación Estructurada".&lt;br /&gt;&lt;br /&gt;Este método para conseguir hacer el trabajo, fue sugerido por el profesor de Stanford John Perry, la idea es usar procrastinación para vencer la procrastinación. ¿Cómo?&lt;br /&gt;&lt;br /&gt;Muy simple. Los procrastinadores se mantienen posponiendo trabajo importante / difícil / frustrante y se convencen a sí mismos de que otro trabajo es más importante. Exactamente ellos no desperdician el tiempo. ¡Nunca están sin hacer absolutamente NADA! Siempre están haciendo algo pero no lo más importante. Se convencen a sí mismos de que deben posponer su trabajo actual para hacer algo más importante.&lt;br /&gt;&lt;br /&gt;Así pues, si quieres vencer la procrastinación, puedes terminar mucho trabajo teniendo siempre las manos ocupadas. Si hoy tienes 5 cosas en tu lista de que-haceres, haz que sean 10. Pon las 5 cosas de mañana en la lista de hoy. Cuando te sientes a hacerlas tratarás de comenzar por las más importantes, y las aplazarás. Decidirás tomar algunas otras en tu lista y hacerlas en lugar de aquellas. Cuando haces esto, puede que pospongas todavía el trabajo más importante, y haces algo más que está en la lista.&lt;br /&gt;&lt;br /&gt;Así que mantienes aplazando el trabajo más importante haciendo el resto que es menos importante de tu lista. De esa manera, terminas haciendo tu otro trabajo. Serás capaz de terminar mucho trabajo de esta manera, posponiendo el trabajo más importante haciendo el menos importante.&lt;br /&gt;&lt;br /&gt;Sé que la idea puede sonar un poco infantil. Sin embargo, funciona. Si mantienes tu lista de que-hacer llena todo el tiempo, ¡serás capaz de usar la procrastinación para terminar todo tu trabajo! De hecho ya que eres un procrastinador, serás capaz de hacer más trabajo que cualquier otro. No me creas, ¡inténtalo!&lt;br /&gt;&lt;br /&gt;Probablemente te estás preguntando ¿y qué con el trabajo importante que se ha estado procrastinando? esta es la clave de la técnica. Elige algo de trabajo que es poco difícil / frustrante / que lleva tiempo / aburrido, etc. y convéncete a ti mismo de que es una ¡TAREA GRANDE! Cuando selecciones este trabajo, cerciórate de que el trabajo no es realmente importante. Incluso si lo haces mucho más adelante, no tendrá muchas repercusiones. Pero en tu mente, necesitas convencerte de que es un trabajo importante. Pon esta actividad al principio de la lista. Ahora, incluso si  por algún tiempo no haces este "trabajo más importante", las cosas estarán bien. Pero puedes todavía utilizar esto para conseguir hacer tu otro trabajo.&lt;br /&gt;&lt;br /&gt;Sabemos que mientras lees el párrafo anterior puedes estar pensando que todo esto es muy infantil e inmaduro y que no funcionará. Pero, ¡funciona! Los procrastinadores tienen una destreza para convencerse a sí mismos. Ese es el porqué son así. Ahora, tienes que convencerte a ti mismo y usar este talento a tu favor.&lt;br /&gt;&lt;br /&gt;Inténtalo, si funciona. Cada quien tiene su propio estilo de procrastinación estructurada. La idea básica es la misma: Procrastinar algo de trabajo haciendo otro trabajo. Consiguiendo en efecto mucho trabajo hecho.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Tips y métodos para superar la procrastinación&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Racionaliza&lt;/span&gt;&lt;br /&gt;¡Piensa las cosas! este es uno de los mejores métodos para superar la mayoría de los problemas psicológicos que puedas tener.&lt;br /&gt;&lt;br /&gt;Ahora que sabes como funciona la procrastinación y qué lo causa, fácilmente puedes hacer este ejercicio. Sigue estos sencillos pasos:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;¡Date cuenta que estás procrastinando!&lt;/li&gt;&lt;li&gt;Trata de entender la razón exacta de porqué lo haces&lt;/li&gt;&lt;li&gt;Racionaliza esas razones y pasa por encima de ellas&lt;/li&gt;&lt;li&gt;¡Empieza la tarea!&lt;/li&gt;&lt;/ol&gt;Es bastante simple, realmente no necesitas 4 pasos, los he mencionado de modo que entiendas lo que estás haciendo. Lo que necesitas hacer es, primero entender que estás procrastinando, encontrar el PORQUE lo haces, convencerte a ti mismo de que estás actuando de manera absurda y detenerte y por último, comenzar el trabajo.&lt;br /&gt;&lt;br /&gt;Esto es algo que puedes usar para escribir tus pensamientos. Solo te tomará 5 minutos hacerlo, pero te salvará de todo el tiempo que gastes procrastinando. Lo que estoy sugiriendo es que "realmente" llenes este formulario, sé que es algo estúpido, pero dale una oportunidad...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Me estoy demorando en hacer _____________&lt;br /&gt;debido a ______________&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Razones para la demora:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;5. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Razones para no demorar:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;5. ____________________________&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;¡se terminó la procrastinación y debo comenzar el trabajo!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;He aquí otras herramientas que te ayudarán con la procrastinación...&lt;br /&gt;&lt;br /&gt;Haz que las tareas luzcan en tu mente fáciles y pequeñas. ("He escrito muchas tareas excelentes, esta es solo una más")&lt;br /&gt;&lt;br /&gt;Haz solo una parte de la tarea a la vez ("Esta noche solo revisaré los libros. Después, les echaré un vistazo a todos")&lt;br /&gt;&lt;br /&gt;Plan de cinco-minutos: Trabaja en algo por solo cinco minutos. Al final, cambia a algo más si tú quieres. Lo más probable es que te involucres lo suficiente como para seguir adelante.&lt;br /&gt;&lt;br /&gt;Anuncia tus planes de lograr algo, y deja que la presión de tus compañeros te impulse hacia adelante. ("Les dije a todos que iba a terminar esta noche")&lt;br /&gt;&lt;br /&gt;Utiliza a un buen amigo como modelo positivo. Si tienes problemas para concentrarte, estudia en presencia de alguien que no lo está.&lt;br /&gt;&lt;br /&gt;Modifica tu ambiente - si no puedes estudiar en casa, busca un lugar donde puedas hacerlo o cambia tu situación en casa.&lt;br /&gt;&lt;br /&gt;Algunas personas encuentran que simplemente escribiendo los momentos razonables de comienzo y detención les ayuda a ponerse en marcha.&lt;br /&gt;&lt;br /&gt;Finalmente, debes entender que en su forma más fundamental procrastinas para evitar frustrarte. Los procrastinadores posponen para evitar la frustración. Así pues tendrás que entender y aceptar esto. Tendrás que educarte a ti mismo a tener un mayor nivel de frustración teniendo capacidad. Todo esto es más fácil decirlo que hacerlo, ¡lo sé! solo trabaja en ello. Soluciona tus problemas. Si lo haces habrás hecho un avance significativo y serás una persona mucho pero mucho más feliz ¡garantizado!&lt;br /&gt;&lt;br /&gt;Y tú, procrastinas, postergas, pospones, te enojas, te frustras, etc. etc. ¡ja! porqué no en lugar de buscar más calificativos comienzas ¡ya! a hacer lo que has procrastinado, postergado, pospuesto,..., etc., etc...&lt;br /&gt;&lt;br /&gt;Leído en &lt;a href="http://www.indiahowto.com/how-to-stop-procrastinating.html"&gt;indiahowto.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-4076679033520593892?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/4076679033520593892/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2008/09/procrastinar-o-no-procrastinar.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4076679033520593892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/4076679033520593892'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2008/09/procrastinar-o-no-procrastinar.html' title='Procrastinar o no procrastinar...'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t1WQBJYuFhI/SMzeev7C-kI/AAAAAAAAACM/-JlJ9ZjBpnM/s72-c/Procrastination.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-5568990751069220078</id><published>2008-09-12T00:54:00.006-05:00</published><updated>2008-09-12T10:44:15.341-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sociedad'/><category scheme='http://www.blogger.com/atom/ns#' term='multitarea'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><category scheme='http://www.blogger.com/atom/ns#' term='cultura'/><title type='text'>El mito de la multitarea</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t1WQBJYuFhI/SMoCo7kvWsI/AAAAAAAAACE/NzT2ffmyHcA/s1600-h/multitasking.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_t1WQBJYuFhI/SMoCo7kvWsI/AAAAAAAAACE/NzT2ffmyHcA/s320/multitasking.jpg" alt="El mito de la multitarea" id="BLOGGER_PHOTO_ID_5245007618236177090" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;En una de las tantas cartas que le escribió a su hijo por los años 1740s, Lord Chesterfield le dio el siguiente consejo: "Hay tiempo suficiente en el transcurso del día para cualquier cosa, si haces una a la vez, pero no te alcanzará el resto del año si hicieras dos cosas al mismo tiempo." Para Chesterfield, la atención singular no fue solo una manera práctica de estructurar el tiempo; fue un distintivo de inteligencia. "Esta atención tranquila y despreocupada hacia un objeto, es una clara cualidad de un genio importante; como la prisa, movimientos bruscos, y la agitación, son los síntomas infalibles de una mente débil y frívola".&lt;br /&gt;&lt;br /&gt;En los tiempos modernos, la prisa, los movimientos bruscos, y la agitación llegan a ser estilos de vida regulares para muchas personas—tanto es así que hemos adoptado una palabra para describir nuestros esfuerzos para responder a las muchas exigencias apremiantes de nuestro tiempo: &lt;em&gt;la multitarea&lt;/em&gt;. Usado por décadas para describir las habilidades de procesamiento paralelo de las computadoras, la multitarea es ahora el intento humano de hacer rápidamente tantas cosas, como sea posible, de preferencia reuniendo el poder del mayor número de tecnologías como sea posible.&lt;br /&gt;&lt;br /&gt;A finales de los 90s y principios del 2000, uno sentía una especie de euforia sobre las posibilidades de la multitarea. Los comerciales de los nuevos equipos electrónicos—particularmente la primera generación de dispositivos digitales de mano—celebraron la idea de utilizar la tecnología para lograr varias cosas a la vez. La palabra multitarea comenzó a aparecer en las "habilidades" de los curriculums, como trabajadores de oficina diseñados a sí mismos como de alta tecnología, es decir, integrantes del equipo de alto rendimiento. "Siempre hemos hecho multitarea—la incapacidad para caminar y masticar chicle es una burla—pero nunca tan intensamente o auto-consciente como ahora", James Gleick en su libro &lt;span style="font-weight: bold; font-style: italic;"&gt;Faster&lt;/span&gt; de 1999 escribió: "Somos conocedores de la multitarea—expertos en multitudes, presiones, embarques, y empalmes de distintas actividades en todos nuestros-muy-limitados momentos". Un artículo del &lt;span style="font-style: italic;"&gt;New York Times Magazine&lt;/span&gt; de 2001 preguntó, "¿Quien recuerda la vida antes de la multitarea? En estos días todos lo hacemos". El artículo ofrecía consejos de "Como Multitarear" con sugerencias sobre cómo darle el ejercicio adecuado al "punto medular" del cerebro.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;br /&gt;Recientemente, han comenzado a surgir retos para el espíritu de la multitarea. Numerosos estudios han mostrado el peligro en ocasiones fatal del uso de los teléfonos celulares y otros dispositivos electrónicos por ejemplo mientras manejas, y en varios estados ya se ha prohibido esa forma particular de multitarea. En el mundo de los negocios, donde las preocupaciones por la administración del tiempo son recurrentes, se han puesto anuncios sobre las distracciones en el lugar de trabajo por una creciente cultura sobre la multitarea. En 2005, la BBC reportó sobre un estudio de investigación, financiado por Hewlett-Packard y llevado a cabo por el Instituto de Psiquiatría de la Universidad de Londres, el cual encontró que, "Los trabajadores distraídos por llamadas telefónicas y correos electrónicos disminuían su CI(Coeficiente Intelectual) más del doble que los fumadores de marihuana". El psicólogo al frente de este estudio se refirió a esta nueva "infomania" como un serio problema para la productividad laboral. Un artículo del &lt;em&gt;Harvard Business Review's&lt;/em&gt; "Descubriendo Ideas" del 2007 fue la noción de Linda Stone "atención parcial continua", el cual puede ser entendido como una subespecie de la multitarea: al usar el poder de cómputo móvil con Internet, estamos "en una búsqueda constante de oportunidades para tener lo último en contactos, eventos y actividades en un esfuerzo para no perdernos de nada".&lt;br /&gt;&lt;br /&gt;El Dr. Edward Hallowell, psiquiatra de Massachusetts especializado en el tratamiento de desórdenes de déficit de atención/hiperactividad y que ha escrito un libro con el título &lt;span style="font-weight: bold; font-style: italic;"&gt;CrazyBusy&lt;/span&gt;, ha ofrecido terapias para combatir la multitarea extrema por años; en su libro describe la multitarea como "una actividad mítica en la que las personas creen que pueden hacer dos o más tareas simultáneamente". En un artículo del 2005, describió una nueva condición, "Mal de Déficit de Atención (MDA)", el cual cree que no está controlado en el mundo de los negocios. El MDA es "una respuesta pura al ambiente de híper-movimiento en el cual vivimos", escribe Hallowell, y sus síntomas característicos imitan a los de la Enfermedad de Déficit de Atención (EDA). "Nunca en la historia del cerebro humano se le había pedido que rastreara tanta información", argumenta Hallowell, y este reto "puede controlarse solamente diseñando nuestro ambiente y nuestra salud física y emocional". Restringir la multitarea es esencial. El autor de Best-sellers de consejos de negocios Timothy Ferriss hace honor también sobre las virtudes de "una-tarea-a-la-vez" en su libro, &lt;span style="font-weight: bold; font-style: italic;"&gt;The 4-Hour Workweek&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;La multitarea puede tener también repercusiones en la economía. Un estudio hecho por investigadores de la Universidad de California en Irvine monitoreó las interrupciones entre los trabajadores de una oficina; y encontraron que estos tomaban un promedio de 25 minutos en reponerse de las interrupciones tales como las llamadas telefónicas o contestar correos electrónicos y regresar a su trabajo original. Jonathan B. Spira, analista de investigación de negocios de la firma Basex, en una discusión con el &lt;span style="font-style: italic;"&gt;New York Times&lt;/span&gt; en el 2007, estimó que la multitarea extrema—sobrecarga de información—le costó a la economía Estadounidense una pérdida de productividad al año estimada en $650 billones de dólares.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Cambiar nuestra mentalidad&lt;/span&gt;&lt;br /&gt;Para entender mejor el fenómeno de la multitarea, neurólogos y psicólogos han estudiado el funcionamiento del cerebro. En 1999, Jordan Graffman, jefe de neurociencia cognoscitiva del Instituto de Paros y Desórdenes Neurológicos, usó escaneos de imágenes de resonancia magnética funcional(fMRI en inglés) para determinar que cuando las personas enfrentan el "cambio de tarea" —lo que es lo mismo, comportamiento de multitarea— el flujo de sangre se incrementa en la región de la corteza frontal llamado área Brodmann 10.(El flujo de sangre en regiones particulares del cerebro se toma como una indicación intermediaria de actividad en esas regiones). "Esta es presumiblemente la última parte del cerebro en evolucionar, la más excitante y misteriosa", dijo Graffman al &lt;span style="font-style: italic;"&gt;New York Times&lt;/span&gt; en 2001—agregando, en tono exagerado, "Es lo que nos hace más humanos".&lt;br /&gt;&lt;br /&gt;Es también lo que hace a la multitarea una pobre estrategia de aprendizaje a largo plazo. Otros estudios, como los realizados por el psicólogo René Marois de la Universidad de Vanderbilt, han usado el fMRI para demostrar la respuesta del cerebro para manejar muchas tareas. Marois encontró evidencia de una "selección en respuesta a un cuello de botella" que ocurre cuando el cerebro es forzado a responder a varios estímulos al mismo tiempo. Como resultado, el cambio de tarea genera una pérdida de tiempo en lo que el cerebro determina lo que va a hacer. El psicólogo David Meyer de la Universidad de Michigan cree que en lugar de un cuello de botella cerebral, está un proceso de "control ejecutivo adaptado", el cual "agenda apropiadamente los procesos para obedecer instrucciones sobre sus prioridades relativas y de orden serial", como lo describió para el &lt;span style="font-style: italic;"&gt;New Scientist&lt;/span&gt;. A diferencia de otros investigadores estudiosos de la multitarea, Meyer es optimista en qué, con entrenamiento, el cerebro puede aprender a cambiar de tareas más efectivamente, y existe algo de evidencia sobre que ciertas tareas simples se prestan para tal práctica. Sin embargo, su investigación encontró también que la multitarea contribuye a la liberación de hormonas de estrés y adrenalina, que puede causar problemas de salud a largo plazo si no se controlan, y contribuye a la pérdida de memoria de corto plazo.&lt;br /&gt;&lt;br /&gt;En estudios recientes, Russell Poldrack, psicólogo de la Universidad de California en Los Angeles, encontró que "la multitarea afecta de manera adversa el aprendizaje. Incluso si aprendes mientras haces multitarea, ese aprendizaje es menos flexible y más especializado, de manera que no puedes recordar la información fácilmente". Su investigación demuestra que la gente usa distintas áreas del cerebro para aprender y almacenar nueva información cuando están distraídos: escaneos cerebrales de personas que están distraídas o en multitarea muestran actividad en cada hemisferio del cerebro frente al tálamo, región del cerebro que tiene que ver con el aprendizaje de nuevas habilidades; los escaneos cerebrales de personas que no están distraídas muestran actividad en el hipocampo, región que tiene que ver con almacenar y recordar información. Hablando sobre su investigación en la National Public Radio, Poldrack advirtió, "Debemos estar conscientes que hay un precio en la manera en que nuestra sociedad está cambiando, que los humanos no están construidos para trabajar de esta manera. Estamos construidos para centrarnos. Y cuando nos vemos forzados a multitarear, nosotros mismos nos encaminamos a quizás ser menos eficientes en el largo plazo incluso cuando en ocasiones sintamos que estamos siendo más eficientes".&lt;br /&gt;&lt;br /&gt;Si, como Poldrack concluye, "la multitarea cambia la manera en que las personas aprenden", que significado tendrá para los niños y adolescentes de hoy, que crecen con excesos de nuevas tecnologías educacionales y de entretenimiento, ¿multitarea entusiasta a temprana edad? Poldrack llama a esto la "pregunta del millón". La multitarea mediática—esto es, el uso simultáneo de varios medios, como la televisión, el Internet, video juegos, mensajes de texto, teléfonos y correo electrónico—está en claro crecimiento, como lo mostró un reporte en 2006 de la Fundación Familia Kaiser: en 1999, las personas solo emplearon el 16 por ciento de su tiempo para usar cualquiera de esos medios; para 2005, 26 por ciento del tiempo fue empleado en multitarea. "Multitareo cada segundo que paso en Internet", confesó un participante del estudio. "En este preciso momento estoy viendo la TV, revisando mi correo electrónico cada dos minutos, leyendo un grupo de noticias sobre la muerte de JFK, quemando música en un CD, y escribiendo este mensaje".&lt;br /&gt;&lt;br /&gt;El reporte Kaiser mostró varios factores que incrementaban la probabilidad de multitarear con varios medios, incluyendo "usar la computadora y ver televisión desde la misma". También, los tipos de personalidad con "sensación de buscar" son más propensos a multitarear, como lo son aquellos en "casas con muchas televisiones". La imagen que surge de estos pubertos expertos en multitarear es de una generación con gran facilidad técnica e inteligencia pero de extrema impaciencia, insatisfechos con la lentitud y con el silencio incómodo: "Me aburro sino se hace todo a la vez, ya que para todo tienes que esperar—cuando se carga una página web, los comerciales en la TV, etc." dijo un participante. El reporte concluye con una peculiar nota, tal vez con la intención de ser optimista: "En este mundo cargado de medios, parece que los cerebros que más se adapten a la multitarea trascenderán y estos cambios serán seleccionados naturalmente" señala el informe. "Después de todo, la información es poder, y si alguien es capaz de procesar más información al mismo tiempo, tal vez se pueda ser más poderoso". Esto es Darwinismo tecno-social, naturaleza roja en pixel y garra.&lt;br /&gt;&lt;br /&gt;Otros expertos no están tan seguros. Como el neurólogo Jordan Graffman dijo para la revista &lt;span style="font-style: italic;"&gt;Time&lt;/span&gt;: "Los niños que se envían mensajes de texto mientras hacen la tarea, que juegan en línea y ven la TV, puedo predecir que no harán ningún bien en el largo plazo". "Creo que esta generación es de niños experimentales", la psicóloga educacional Jane Healy dijo a la &lt;span style="font-style: italic;"&gt;Crónica de San Francisco&lt;/span&gt;; que le preocupa que lleguen a adultos y que participen con "creencias prontas pero muy débiles". O cómo sugiere el novelista Walter Kirn en un hábil estudio en &lt;span style="font-style: italic;"&gt;El Atlántico&lt;/span&gt;, podríamos ser guiados a una "Recesión de Déficit de Atención".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Poniendo atención&lt;/span&gt;&lt;br /&gt;Cuando hablamos de multitarea, realmente hablamos de la atención: el arte de poner atención, la habilidad de cambiar nuestra atención, y, más ampliamente, de ejercer juicios sobre en lo que vale la pena poner atención. Las personas que alcanzan grandes logros a menudo atribuyen su éxito a una habilidad fina y pulida para prestar atención. Cuando se le preguntó a Isaac Newton sobre su talento natural, respondió que si hizo tantos descubrimientos, se debió a "que era paciente cuando ponía atención".&lt;br /&gt;&lt;br /&gt;William James, escribió extensamente sobre las variedades de atención humana. En &lt;span style="font-weight: bold;"&gt;Los Principios de la Psicología&lt;/span&gt; (1890), marcó las diferencias entre "atención sensorial", "atención intelectual", "atención pasiva" entre otras, y nombró como "oscuridad caótica sin forma" las mentes de las personas que eran incapaces de poner atención. James comparó nuestro flujo de pensamientos con un río, y sus observaciones marcaron los "cuellos de botella" cognitivos descritos más tarde por los neurólogos, él escribió: "En general, predomina el flujo simple y sencillo, las cosas se desplazan por la gravedad, y la atención sin esfuerzo es la regla". "Pero hay intervalos en que una obstrucción, un retroceso, un detenimiento abrupto ocurre, detiene el momento, fluye en círculo, y temporalmente hace que las cosas se muevan en otro sentido".&lt;br /&gt;&lt;br /&gt;Para James, la atención constante era la condición por defecto de una mente madura, un estado ordinario deshecho sólo por la perturbación. Para nosotros cien años después, esa imagen plácida puede parecer extraña—como si representara un mundo pasado. En lugar de eso, la multitarea adulta de hoy encuentra más familiaridad con la descripción de James sobre la mente temprana: una "extrema movilidad de atención" que "hace que el joven sienta que pertenece menos a sí mismo que a cualquier objeto que atrapa su atención". Para algunos, James señaló que esta estimulación nunca es superada; tales personas solo hacen su trabajo "en los intersticios de su mente errante". Como Chesterfield, James creyó que la transición de la distracción temprana a la atención madura era en gran parte resultado del dominio personal y la disciplina—y así era como mostraba carácter. "La facultad de volver voluntariamente a una atención errante, una y otra vez", escribió, "es la raíz del juicio, carácter y albedrío".&lt;br /&gt;&lt;br /&gt;Hoy en día, nuestra voluntad colectiva de prestar atención parece bastante débil. Requerimos el consejo de libros que nos enseñen como evitar distraernos. En el futuro no muy lejano pudiéramos inclusive usar nuevos dispositivos para que nos ayuden a superar el déficit de atención no deseado creado por los gadgets de hoy. Como sugirió recientemente un artículo del &lt;span style="font-style: italic;"&gt;New York Times&lt;/span&gt;, "La investigación avanzada puede ayudar a crear tecnología intuitiva, como sensores o software inteligente que los trabajadores puedan cargar con sus configuraciones y prioridades para servir como 'ayuda extra' de alta tecnología para aligerar la difícil situación de la multitarea moderna". Quizás aceptemos como algo natural una computadora controladora—como los dispositivos puestos en los motores para que las personas no rebasen cierto límite de velocidad. Nuestros controladores tecnológicos podrían servirnos como recordatorios para establecer límites mentales cuando tratemos de hacer mucho, demasiado rápido ó todo a la vez.&lt;br /&gt;&lt;br /&gt;Por otra parte, quizás simplemente nos adaptaremos y aceptemos lo que James llamó "falta de atención adquirida". Demasiados correos electrónicos, el celular sonando, la televisión alta, los podcasts—todo esto puede convertirse en ruido de fondo, como el "'din' de una fundidora o de una fábrica" que James observó que los trabajadores apenas evitaban la primera vez, pero que eventualmente se convirtió en parte de su rutina diaria. Para la generación joven de multitareadores, el gran 'din' electrónico es una parte esperada de la vida diaria. Y dado lo que ya nos mostró la evidencia anecdótica y la neurociencia, este estado de constante auto-distracción intencional podría ser de profundo detrimento para individuos y el bienestar cultural. Cuando la gente hace su trabajo solo en los "intersticios de su mente errante", con migajas de atención racionadas entre otras muchas tareas, su cultura puede ganar en información, pero seguramente será débil en sabiduría&lt;br /&gt;&lt;br /&gt;Leído en: &lt;a href="http://www.thenewatlantis.com/publications/the-myth-of-multitasking"&gt;thenewatlantis.com&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-5568990751069220078?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/5568990751069220078/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2008/09/el-mito-de-la-multitarea.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5568990751069220078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/5568990751069220078'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2008/09/el-mito-de-la-multitarea.html' title='El mito de la multitarea'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t1WQBJYuFhI/SMoCo7kvWsI/AAAAAAAAACE/NzT2ffmyHcA/s72-c/multitasking.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8107960283713266625.post-2243207348050140292</id><published>2008-08-13T21:49:00.030-05:00</published><updated>2008-08-15T17:54:57.553-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><category scheme='http://www.blogger.com/atom/ns#' term='administración'/><category scheme='http://www.blogger.com/atom/ns#' term='multitarea'/><category scheme='http://www.blogger.com/atom/ns#' term='productividad'/><title type='text'>Perjudiciales las interrupciones en las labores humanas</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;p&gt;Cuando estás a cargo de un equipo de programadores, una de las primeras cosas que debes aprender a hacer bien es distribuir el trabajo. O lo que es lo mismo &lt;em&gt;darle a las personas qué hacer&lt;/em&gt;. Un ejemplo es cuando depositas archivos en sus laps. El cómo decidas cuales archivos depositar en qué laps es una de las áreas donde puedes tener increibles beneficios en cuanto a productividad si lo haces bien. Hazlo mal, y puedes crear una de esas situaciones enmarañadas donde nadie termina algo y todo mundo se queja de que "por aquí nunca se completa nada".&lt;br /&gt;&lt;br /&gt;Pongamos sobre la mesa el siguiente problema de programación para tener más claro el tema.&lt;br /&gt;&lt;br /&gt;Supón que tienes dos operaciones independientes que ejecutar, A y B. Cada operación requiere 10 segundos de tiempo del CPU. Tienes un CPU el cual, para propósitos de este ejemplo, no tiene nada más en cola.&lt;br /&gt;&lt;br /&gt;En nuestro CPU, la multitarea es opcional. Así que puedes hacer estas operaciones una después de la otra...&lt;br /&gt;&lt;/p&gt;&lt;div align="center"&gt;Procesamiento Secuencial&lt;/div&gt;&lt;span style="font-family:arial;"&gt;&lt;table align="center" cellpadding="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="10" style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);"&gt;Operación A&lt;/td&gt;&lt;td colspan="10" style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);"&gt;Operación B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;01&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;02&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;03&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;04&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;05&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;06&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;07&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;08&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;09&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;10&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;11&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;12&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;13&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;14&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;15&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;16&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;17&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;18&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;19&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;...ó, empleando multitarea. Si aplicas multitarea, en este CPU en particular, las tareas corren un segundo a la vez, y un cambio entre ellas no toma ningún tiempo.&lt;/p&gt;&lt;div align="center"&gt;multitarea&lt;/div&gt;&lt;span style="font-family:arial;"&gt;&lt;table align="center" cellpadding="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;01&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;02&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;03&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;04&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;05&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;06&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;07&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;08&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;09&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;10&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;11&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;12&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;13&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;14&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;15&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;16&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;17&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;18&lt;/td&gt;&lt;td style="background-color: rgb(170, 221, 153); color: rgb(0, 0, 0);" align="center"&gt;19&lt;/td&gt;&lt;td style="background-color: rgb(153, 170, 221); color: rgb(0, 0, 0);" align="center"&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;¿Cual elegirias? La reacción de la mayoría de las personas es que la multitarea es lo mejor. En ambos casos, tienes que esperar 20 segundos para obtener ambas respuestas. Sin embargo, piensa sobre cuanto tiempo toma obtener el resultado de &lt;em&gt;cada&lt;/em&gt; operación.&lt;/p&gt;&lt;a id="more"&gt;&lt;/a&gt;&lt;span class="fullpost"&gt;&lt;p&gt;En los dos casos, los resultados de la Operación B(mostrado en azul) toman 20 segundos en llegar. Ahora mira la Operación A. Con multitarea, los resultados toman 19 segundos en llegar... cuando con el procesamiento secuencial están listos en solamente 10 segundos.&lt;br /&gt;&lt;br /&gt;En otras palabras, en este ejemplo manipulado, el &lt;em&gt;tiempo promedio por operación&lt;/em&gt; es menor (15 segundos en lugar de 19.5) cuando usas procesamiento secuencial que cuando usas multitarea. (En realidad, no es un ejemplo manipulado como tal -- fue un problema real que tuvo que ser resuelto en el trabajo)&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;table align="center" cellpadding="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: 2px solid;"&gt;Método&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Operación A tomó&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Operación B tomó&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Promedio&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;Secuencial&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;10 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;20 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;15&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;Multitarea&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;19 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;20 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;19.5&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;Al principio mencioné que "un cambio entre tareas no toma tiempo." En realidad, en CPUs reales, este cambio toma algo de tiempo... basicamente el tiempo suficiente para guardar el estado de los registros actuales del CPU y cargar los registros de la otra tarea. Realmente, este cambio es imperceptible. Pero para hacerlo más interesante, imaginemos que el cambio toma medio segundo. Ahora las cosas no se ven tan bien:&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;table align="center" cellpadding="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: 2px solid;"&gt;Método&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Operación A tomó&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Operación B tomó&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Promedio&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;Secuencial&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;10 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;20 + 1 cambios = 20.5 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;15.25&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;Multitarea&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;19 + 18 cambios = 28 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;20 + 19 cambios = 29.5 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;28.75&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;Ahora... se que suena tonto pero ¿que pasaria si cada cambio toma todo un minuto?&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;table align="center" cellpadding="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-bottom: 2px solid;"&gt;Método&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Operación A tomó&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Operación B tomó&lt;/td&gt;&lt;td style="border-bottom: 2px solid;"&gt;Promedio&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;Secuencial&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;10 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;20 + 1 cambios = 80 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;45 segundos&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;Multitarea&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;19 + 18 cambios = 1099 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;20 + 19 cambios = 1160 segundos&lt;/td&gt;&lt;td style="background: rgb(255, 255, 204) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;¡Casi 19 Minutos!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;A mayor tiempo en el cambio, la multitarea empeora.&lt;br /&gt;&lt;br /&gt;Eso no es tan alarmante, o ¿sí?. Habrá quienes digan que esto es estar "contra" la multitarea, es decir, "¿regresar a los días del DOS cuando tenías que salirte de WordPerfect para correr 1-2-3?".&lt;br /&gt;&lt;br /&gt;Ese no es el punto. Estarás de acuerdo conmigo en que en este tipo de ejemplo:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;em&gt;en promedio&lt;/em&gt; se obtienen resultados más rápidos con el procesamiento secuencial, y&lt;/li&gt;&lt;li&gt;entre más tiempo tome hacer un cambio(de tarea), mayor será la penalización tratándose de multitarea.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Ok, regresando al tema de administrar personas, no CPUs. El problema cuando administras &lt;em&gt;programadores&lt;/em&gt;, específicamente, es que el cambio de tareas toma, de veras, de veras, de veras, mucho tiempo. Eso se debe a que programar es la clase de tarea donde tienes que mantener muchas cosas en tu cabeza en ese momento. Entre más cosas recuerdes a la vez, más productivo eres programando. Un programador que trabaja a toda su capacidad está almacenando millones de cosas en su cabeza a la vez: desde nombres de variables, estructuras de datos, APIs importantes, los nombres de las funciones que ya hizo y usa regularmente, inclusive el nombre del directorio donde almacena el código fuente. Si se manda a ese programador de vacaciones tres semanas a Cancún, olvidará &lt;em&gt;todo&lt;/em&gt;. Parece que el cerebro humano lo saca de su memoria RAM de corto plazo y lo mueve a una cinta de respaldo que toma una eternidad en cargar.&lt;br /&gt;&lt;br /&gt;¿Por cuanto tiempo? bueno, eso depende de cada ambiente de trabajo pero en general cuando te ausentas semanas te toma regularmente varios días ponerte al corriente nuevamente con la dinámica de antes.&lt;br /&gt;&lt;br /&gt;A nivel personal -- has notado alguna vez como cuando le asignas a una persona un trabajo hace un muy buen trabajo, pero si le asignas &lt;em&gt;dos&lt;/em&gt; trabajos a esa misma persona ¿no termina ni una ni otra?. Hará uno de ellos abandonando el otro, ó hará ambos trabajos pero muy lentos. Ese es el porqué en los trabajos de programación se toma tanto tiempo en cambiar de uno a otro. Cuando tengo dos proyectos de programación al mismo tiempo, alternarlos me toma algo así como 6 horas. Para un día de 8 horas, eso significa que la multitarea reduce mi productividad a 2 horas al día. Bastante triste.&lt;br /&gt;&lt;br /&gt;A como se vé, si le das a una persona dos cosas que hacer, deberías agradecerle si trabaja solo en una, porque va a conseguir hacer más cosas y terminarlas antes del tiempo promedio. De hecho, la idea real de todo esto es que &lt;em&gt;nunca deberías permitirle a las personas trabajar en más de una cosa a la vez&lt;/em&gt;. Asegurándote de que saben de qué se trata. Los buenos administradores ven sus responsabilidades como el &lt;em&gt;quitar obstáculos&lt;/em&gt; para que las personas se puedan enfocar en una &lt;em&gt;sola cosa&lt;/em&gt; y lo terminen realmente. Cuando surgen emergencias, vé si las puedes manejar tú antes de delegarlas a un programador que está profundamente concentrado en un proyecto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Leído en &lt;a href="http://www.joelonsoftware.com/articles/fog0000000022.html"&gt;joelonsoftware.com&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8107960283713266625-2243207348050140292?l=sartigas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sartigas.blogspot.com/feeds/2243207348050140292/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://sartigas.blogspot.com/2008/08/interrupciones-en-las-tareas-humanas_13.html#comment-form' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2243207348050140292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8107960283713266625/posts/default/2243207348050140292'/><link rel='alternate' type='text/html' href='http://sartigas.blogspot.com/2008/08/interrupciones-en-las-tareas-humanas_13.html' title='Perjudiciales las interrupciones en las labores humanas'/><author><name>Estergios Artigas</name><uri>http://www.blogger.com/profile/16088291610241822376</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='http://3.bp.blogspot.com/_t1WQBJYuFhI/TD00YZMuEjI/AAAAAAAAALg/Ebd1F0O2kWE/S220/2010-07-13-224908.jpg'/></author><thr:total>3</thr:total></entry></feed>
