viernes, 30 de mayo de 2014

Mi camino para convertirme en un Oracle ACE Associate

A pesar de que han pasado un par de meses desde que recibí mi premio Oracle ACE Associate,  no había escrito sobre él camino para obtenerlo, así que te voy a platicar como fue.

Una de las mejores cosas que Pythian tiene, es que cuando llegas a esta empresa, es que en las primeras semanas de unirse a ella, te toca sentarte con los  líderes de Pythian. Yo escribí acerca de mi primera semana en esta entrada (Inlges), y a pesar de que ya no estoy trabajando para ellos, todavía sigo siendo buenos amigos con ellos.

A lo que quería llegar, es que en una de esas conversaciones, me senté con su CTO, ACE Director Alex Gorbachev, y una de las cosas que él me pregunto, fue; ¿Cuál es una de mis metas profesionales en Pythian? Y mi respuesta era convertirse en un ACE de Oracle, su respuesta fue que él no iba a poner una nominación o recomendarme para este premio. No voy a decir que no dolio un poco, ya que yo ya estaba muy activo en las redes sociales, tenia blogeando desde hace 4 años y estaba haciendo presentaciones publicas, y de hecho fue una de las razones por las que me contrato Pythian.

Pero esto sólo alimentó la pasión, así que puse el dedo en la llaga para lograr este objetivo. En el inter, me aceptaron en el Oracle Open World, IOUG Collaborate, escribió un artículo para OTN LAD, seguí presentado en México para el grupo ORAMEX, hice un Webinar para el grupo LAOUC, aparecí en el boletín de RMOUG. Así que después de hablar con mi mentor y gran amiga, Kellyn Pot'vin (@dbakevlar). Ella decidió que era el momento de poner la nominación para convertirme en ACE.

No te voy a mentir , pensé que lo tenía en la bolsa, y para mi sorpresa, mi nominación fue rechazada, y esto no solo dolió, eso fue un golpe directo a la cabeza, ya que al mismo tiempo, varias cosas personales estaban sucediendo a mi alrededor. Me puse a pensar si estaba bien todo lo que ya estaba haciendo y aún así me rechazaron, entonces, ¿qué otra cosa se ​​supone que debo hacer?

Así que por un par de meses me revolcaba en mi dolor no hacer recibido el premio ACE. Pero finalmente me levante de nuevo, segui escribiendo en mis  blogs, continue presentando, hasta que finalmente un día, Francisco Muñoz (@ fcomunoz), Ronald Vargas (@ rovaque), Paola Pullas (@ paolapullas) y Kellyn (Con quién estoy eternamente agradecido) en tándem, enviaron la nominación, por el recien anunciado Oracle ACE Associate, y esta vez, tuve la suerte de recibir la distinción.

Este fue un camino mucho más difícil que lo que esperaba, y mi pensamiento personal (y esto no es una queja, sólo un pensamiento) es que como soy procedente de América Latina, tienes una menor exposición al programa que tus contrapartes en lugares como en Estado Unidos, haciendo un poco más difícil de conseguir este premio. La verdad, me siento honrado de haber sido incluido en esta lista de personas, ya que es un grupo de personas que trabajan duro para la comunidad para poder compartir sus conocimientos por todas partes, y todo esto por el gran precio de amistades increíbles, más conocimiento adquirido y 0 dólares.

No voy a decir que este será tu camino, pero yo digo que es un camino vale la pena viajar y aventurarse. El estado actual de mi ACE ha quedado por el momento suspendido, ya que en estos momentos estoy trabajando para Oracle, pero esto no me va a impedir a compartir mi poco conocimiento y aventuras que sigo teniendo contigo.

Te deseo lo mejor en este camino!


jueves, 29 de mayo de 2014

Oracle 12cR1 : Evaluación "What-If" de un comando crsctl con Oracle Clusterware

Oracle en su nueva version 12cR1 introdujo una nueva y pequeña característica  al Oracle Clusterware, pero el que sea pequeña, no significa que no sea de gran utilidad.
En versiones anteriores, si queríamos saber que iba a pasar al ejecutar un comando con la herramienta crsctl, teníamos que hacerlo en un ambiente de pruebas, ya que si no sabíamos de que se trataba el comando, se convertía en algo muy peligroso hacerlo sobre producción.
En Oracle Clusterware 12cR1 se introduce la evaluación de comando tipo "What-If" en la herramienta mencionada anteriormente, crsctl eval ...

lunes, 26 de mayo de 2014

Oracle 12cR1 : Como configurar una BD Standby en cascada con la propiedad RedoRoutes

En una de las entradas pasadas, vimos como crear una instancia Far Sync, que lo que realmente es,
es una instancia que en cascada manda los Redologs a las instancias que configuramos.

Algo que se podia hacer en 11g, es tener Standby's en cascada, pero no a través del broker. En Oracle 12c te permite hacer las configuraciones de las rutas de hacia donde quieres que se direccionen tus Redologs a través de la propiedad RedoRoutes del broker de 12c .

Para entender un poco de que es lo que queremos hacer , voy a hacer un dibujo de que es lo que queremos hacer.


Para este ejercicio, vamos a tener 3 bases de datos , una primaria, y dos Physical Standbys , asi como dos instancias FarSync, una local y otra remota.

  • Primaria: orcl
  • Remote Standby:orclstby
  • Remote Local Standby:orclrep

Aquí no te voy a decir como crear una Physical Standby, eso lo puedes ver en la entrada Como crear un Standby Fisico con RMAN Active Duplicate en 11.2.0.3 , aunque es para 11.2.0.3, aplica para 12cR1.

Lo primero que vamos a hacer, es deshabilitar la aplicación de los redologs en nuestras Base de Datos Standbys.

[oracle@adg12c ~]$ . oraenv
ORACLE_SID = [orcl] ? orcl
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@adg12c ~]$ dgmgrl
DGMGRL for Linux: Version 12.1.0.1.0 - 64bit Production

Copyright (c) 2000, 2012, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/oracle
Connected as SYSDG.
DGMGRL> edit database 'orclstby' set state='apply-off';
Succeeded.
DGMGRL> edit database 'orclrep' set state='apply-off';
Succeeded.

La propiedad de RedoRoutes, esta definida por reglas, y estas reglas se definen por el origen y el destino de los RedoLogs

(origen de los redologs : destino de los redo )

Si el redo source se define como LOCAL, se entiende que es la Base de Datos de donde se esta definiendo la propiedad.

Ahora vamos a definir las rutas de los Redologs, con la propiedad RedoRoutes del broker de Dataguard de 12c.

DGMGRL> edit database 'orclstby' set state='apply-off';
Succeeded.
DGMGRL> edit database 'orclrep' set state='apply-off';
Succeeded.
DGMGRL> edit database 'orcl' set property 'redoroutes'='( LOCAL : farsync SYNC)';
Succeeded.
DGMGRL> edit database 'orclstby' set property 'redoroutes'='(orcl : orclrep ASYNC)(orclrep : orcl ASYNC)(LOCAL : farsync2 SYNC)';
Succeeded.
DGMGRL> edit database 'orclrep' set property 'redoroutes'= '(orclrep : orclstby SYNC)';
Succeeded.
DGMGRL> edit far_sync 'farsync' set property 'redoroutes' = '(orcl : orclstby ASYNC )';
Succeeded.
DGMGRL> edit far_sync 'farsync2' set property 'redoroutes' ='(orclstby : orcl ASYNC, orclrep )';
Succeeded.
DGMGRL> edit database 'orclstby' set state='apply-on';
Succeeded.
DGMGRL> edit database 'orclrep' set state='apply-on';
Succeeded.

Como podemos ver en la configuración de nuestro dataguard, la BD orclrep, ahora esta recibiendo en cascada los RedoLogs de la standby orclstby , que ese era nuestro objetivo aqui, para asi poder liberar los recursos de la instancia FarSync, y se hiciera a través de la BD orclstby.


DGMGRL> show configuration;

Configuration - DGCONFIG

  Protection Mode: MaxPerformance
  Databases:
  orcl     - Primary database
    farsync  - Far Sync 
      orclstby - Physical standby database 
        orclrep  - Physical standby database (receiving current redo)
    farsync2 - Far Sync (inactive)

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS

Conclusion
Ahora Oracle 12cR1 te permite a través de su DG broker hacer configuraciones mas complejas para tu topología de DR con dataguard. De la misma manera, puedes jugar con tus configuraciones para ver que es lo que se acomoda a tus necesidades y poder validar la configuración antes de hacer un switchover.

lunes, 12 de mayo de 2014

Oracle RAC 12cR1 : Como ver las dependencias que tiene un recurso con crsctl

Cuando uno empieza a usar Oracle RAC, es necesario entender todos los recursos involucrados para que suba nuestra base de datos, esto no es problema cuando todo esta corriendo bien, pero que pasa cuando existe una falla y estás a contra reloj.

En Oracle 12cR1, existe un nuevo parametro en la herramienta crsctl para poder ver las dependencias que tiene un recurso y así facilitarnos la vida al tratar de resolver un problema.

[root@oel6-112-rac1 ~]# crsctl status resource ora.orcl.db -dependency 
================================================================================
Resource Start Dependencies
================================================================================
----------------------------------ora.orcl.db-----------------------------------
ora.orcl.db(ora.database.type)->
| type:ora.listener.type[weak:type]
| | type:ora.cluster_vip_net1.type[hard:type,pullup:type]
| | | ora.net1.network(ora.network.type)[hard,pullup]
| | | ora.gns(ora.gns.type)[weak:global]
| | | | ora.gns.vip(ora.gns_vip.type)[hard,pullup]
| | | | | ora.net1.network(ora.network.type)[hard,pullup]
| type:ora.scan_listener.type[weak:type:global]
| | ora.scan1.vip(ora.scan_vip.type)[hard,pullup]
| | | ora.net1.network(ora.network.type)[hard,pullup:global]
| | | ora.gns(ora.gns.type)[weak:global]
| | | | ora.gns.vip(ora.gns_vip.type)[hard,pullup]
| | | | | ora.net1.network(ora.network.type)[hard,pullup]
| | | type:ora.scan_vip.type[dispersion:type:active]
| | type:ora.scan_listener.type[dispersion:type:active]
| ora.ons(ora.ons.type)[weak:uniform]
| | ora.net1.network(ora.network.type)[hard,pullup]
| ora.gns(ora.gns.type)[weak:global]
| | ora.gns.vip(ora.gns_vip.type)[hard,pullup]
| | | ora.net1.network(ora.network.type)[hard,pullup]
| ora.DATA.dg(ora.diskgroup.type)[hard:global:uniform,pullup:global]
| | ora.asm(ora.asm.type)[hard,pullup:always]
| | | ora.LISTENER.lsnr(ora.listener.type)[weak]
| | | | type:ora.cluster_vip_net1.type[hard:type,pullup:type]
| | | | | ora.net1.network(ora.network.type)[hard,pullup]
| | | | | ora.gns(ora.gns.type)[weak:global]
| | | | | | ora.gns.vip(ora.gns_vip.type)[hard,pullup]
| | | | | | | ora.net1.network(ora.network.type)[hard,pullup]
| | | ora.ASMNET1LSNR_ASM.lsnr(ora.asm_listener.type)[hard,pullup]
| | | | ora.gns(ora.gns.type)[weak:global]
| | | | | ora.gns.vip(ora.gns_vip.type)[hard,pullup]
| | | | | | ora.net1.network(ora.network.type)[hard,pullup]
--------------------------------------------------------------------------------

De igual manera , podemos ver que dependencia tiene otro recurso si lo llegáramos a iniciar o detener y ver el impacto que este tendría.

[root@oel6-112-rac1 ~]# crsctl status resource ora.DATA.dg -dependency -stop
================================================================================
Resource Stop Dependencies
================================================================================
----------------------------------ora.DATA.dg-----------------------------------
ora.DATA.dg(ora.diskgroup.type)->
| ora.mgmtdb(ora.mgmtdb.type)[hard:global:shutdown]
| ora.orcl.db(ora.database.type)[hard:global:shutdown]

[root@oel6-112-rac1 ~]# crsctl status resource ora.DATA.dg -dependency -pullup
================================================================================
Resource Pullup Dependencies
================================================================================
----------------------------------ora.DATA.dg-----------------------------------
ora.DATA.dg(ora.diskgroup.type)->
| ora.mgmtdb(ora.mgmtdb.type)[pullup:global]
| ora.orcl.db(ora.database.type)[pullup:global]
--------------------------------------------------------------------------------

Conclusión

Si te fijas, es una pequeña mejora al estatus de nuestros recursos que se venia manejando desde previas versiones, pero esta mejora te ayudara a planear y atacar los problemas de una manera mas rapida.