miércoles, 21 de marzo de 2012

Actualizar Clusterware de 11.2.0.2 a 11.2.0.3 en RHEL 5

Hace poco tuve que hacer una actualización de 11.2.0.2 a 11.2.0.3. Aquí te presento la primera parte que es la que contempla lo que es el Clusterware.

De aquí en adelante voy hacer las siguientes suposiciones:

GI_HOME.- Es la locación donde se encuentra el software de Oracle Clusterware
RDBMS_HOME.- Es la locación donde se encuentra el software del RDBMS de Oracle
OCR.- Oracle Cluster Registry

De igual manera también estoy suponiendo que tienes roles separados , el usuario oracle es el dueño del RDBMS y el usuario grid es el dueño del Clusterware.

Por ultimo, si el titulo tiene un asterisco marcado en rojo (*) , esto lo tienes que hacer en cada nodo.

Como el usuario root crea una variable de ambiente, que contenga tu GI_HOME, así como el ORACLE_SID de la instancia de ASM, ya que vamos a estar saliendo y entrando a este ambiente, lo veo mas sencillo que cada vez tener que definirlas.

Respaldar tu OCR

Lo primero que hay que hacer es tener en plan de respaldo en caso de que algo salga mal, así que como el usuario root corre la utilería de ocrconfig para respaldar manualmente tu OCR, y aunque en 11g el OCR se respalda automáticamente, soy un poco paranoico :)

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -
[root@servidor1 ~]#  . /home/grid/bin/ASM

root@servidor1.oracleenespanol.blogspot.com /root
root $ ocrconfig -manualbackup

servidor1     2012/03/16 01:17:22     /mount/oracle/grid/11.2.0.2/cdata/orclespdev1/backup_20120316_011722.ocr

La opción -showbackup te lista los respaldos de OCR que tienes.

Respaldar el GI_HOME

Como el usuario root vamos hacer un archivo tar de nuestro GI_HOME en una locación donde podemos asegurar que nuestros respaldos van a estar asegurados

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# . /home/grid/bin/grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd $ORACLE_HOME

grid@servidor1.oracleenespanol.blogspot.com /mount/oracle/grid/11.2.0.2
root $ tar -cvf /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/GI_OH_11.2.0.2_SERV1.tar .

Descomprimir el Software del Clusterware 11.2.0.3 (*)

Como el usuario grid vamos a descomprimir el archivo 3 del Software 11.2.0.3 descargado de MOS, que lo puedes encontrar como el parche 10404530.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/

grid@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3
root $ unzip p10404530_112030_Linux-x86-64_3of7.zip

Si tienes ACFS verificar que este habilitados los mounts (*)

Esto es únicamente si estas manejando ACFS, verifica que estén habilitados los mounts para la actualización, si no lo están habilitalos con el comando asmcmd volenable -a

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ asmcmd volinfo -a
Diskgroup Name: ASM_COPY1

         Volume Name: ACFS_COPY1
         Volume Device: /dev/asm/acfs_copy1-299
         State: ENABLED
         Size (MB): 1913856
         Resize Unit (MB): 256
         Redundancy: UNPROT
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: ACFS
         Mountpath: /mount/acfsdevesp1/copy01

Preparando para instalar el Parche  6880880 y 12539000 (*)

Uno de los prerequisitos para la actualización del clusterware a 11.2.0.3 es que por lo menos tenga el PSU1 y el parche 12539000 este instalado en el GI_HOME. Como estamos en Marzo del 2012, supongo que ya tienes instalado el PSU1, así que nada mas me voy a concentrar en el 12539000.

Necesitas descargar de MOS los siguientes parches:

12539000.-11203:ASM UPGRADE FAILED ON FIRST NODE WITH ORA-03113
6880880.- El ultimo opatch

Como el usuario oracle, deten los servicios que esten relacionados con el GI_HOME y el RDBMS_HOME que vas a parchar, si tienes una base de datos que no esta usando el GI_HOME o el RDBMS_HOME, no lo tienes que detener. Esto lo vas  hacer cada vez que vas a correr la utileria opatch, asi permites que los servicios esten arriba en el segundo nodo, mientras parchas el primero, y viceversa

oracle@servidor1.oracleenespanol.blogspot.com /home/bin
root $ srvctl stop home -o $ORACLE_HOME -n servidor1.oracleenespanol.blogspot.com

Descomprime el parche 6880880 en el $GI_HOME y en el $RDBMS_HOME de cada nodo, asegurate antes de descomprimirlos, de mover o borrar el directorio  $GI_HOME/OPatch y $RDBMS_HOME/OPatch. Un ejemplo de como hacerlo esta aquí:

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3
oracle $ scp p6880880_112000_Linux-x86-64.zip $ORACLE_HOME

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3
oracle $ cd $ORACLE_HOME

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.2v3
oracle $ mv OPatch OPatch.Antes.Parche.Mar2012

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.2v3
oracle $ unzip p6880880_112000_Linux-x86-64.zip

Como el usuario grid tengo que crear el archivo de respuesta para ocm, esto es necesario, ya que a la mitad de estar aplicando el parche, te va a solicitar la ruta de este archivo. Este archivo se genera en la ruta donde corriste la utileria emocmrsp, en este caso fue en $GI_HOME/OPatch/ocm/bin

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su grid
grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd $GI_HOME/OPatch/ocm/bin

grid@servidor1.oracleenespanol.blogspot.com /mount/oracle/grid/11.2.0.2OPatch/ocm/bin
root $ ./emocmrsp

Email address/User Name: micorreo_con_que_acceso_metalink@oracleenespanol.blogspot.com
Provide your My Oracle Support password to receive security updates via your My Oracle Support account.
Password (optional):
If you do not wish to configure OCM through an Oracle Support Hub, enter NONE
Oracle Support Hub URL: NONE
If you want to remain uninformed of critical security issues in your
configuration, enter NONE
Proxy specification: NONE
The OCM configuration response file (ocm.rsp) was successfully created.

Como el usuario root asegurate que la ruta del OPatch se encuentre en la variable PATH

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# . /home/grid/bin/grid
root@servidor1.oracleenespanol.blogspot.com /root
root $ export GI_HOME=/mount/oracle/grid/11.2.0.2

root@servidor1.oracleenespanol.blogspot.com /root
root $ export PATH=$PATH:$GI_HOME/OPatch

El parche 12539000 tiene que estar descomprimido en un directorio vacío , no debe de contener ningún otro parche o software, ya que la manera en que se va a aplicar es de manera automática y fallaría y/o te puede causar muchos mas problemas.

En este caso lo descomprimí en un directorio llamado stage_dir

root@servidor1.oracleenespanol.blogspot.com /home/grid/bin
root $ cd /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ unzip p12539000_112023_Linux-x86-64.zip
Archive:  p12539000_112023_Linux-x86-64.zip
   creating: 12539000/
   creating: 12539000/files/
   creating: 12539000/files/lib/
   creating: 12539000/files/lib/libserver11.a/
  inflating: 12539000/files/lib/libserver11.a/ksxp.o
   creating: 12539000/etc/
   creating: 12539000/etc/config/
  inflating: 12539000/etc/config/inventory.xml
  inflating: 12539000/etc/config/actions.xml
  inflating: 12539000/etc/config/deploy.xml
   creating: 12539000/etc/xml/
  inflating: 12539000/etc/xml/GenericActions.xml
  inflating: 12539000/etc/xml/ShiphomeDirectoryStructure.xml
  inflating: 12539000/README.txt

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ chown -R root:oinstall 12539000

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ chmod -R g+r 12539000

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ which opatch
/mount/oracle/grid/11.2.0.2/OPatch/opatch

Aplicando el parche 12539000 a tu GI_HOME

Este parche se le llama polling patch, asi que lo vas a aplicar en el primer nodo, esperar a que el Clusterware se reinicie y luego vas a aplicarlo en el segundo nodo, acuerdate que sigues con el usuario root y que en el directorio stage_dir unicamente se encuentra descomprimido el parche 12539000.

Cuando el parche te solicite la ruta de tu ocm.rsp, fue el que creamos arriba: $GI_HOME/OPatch/ocm/bin/ocm.rsp

Cuando el parche te haga la siguiente pregunta, teclea 'yes' sin las comillas.

Enter 'yes' if you have unzipped this patch to an empty directory to proceed (yes/no):yes

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/grid/11.2.0.2

Una vez que el primer nodo termine, haz lo mismo en el segundo nodo.

root@servidor2.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/grid/11.2.0.2

Aplicando el parche 12539000 a tu RDBMS_HOME

De igual manera que aplicamos el parche para el GI_HOME, vamos a aplicar el parche para el RDBMS_HOME, nos va solicitar el mismo archivo de ocm.rsp y nos va  ha hacer la misma pregunta, y de igual manera seguimos como el usuario root.

root@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/product/11.2.0.2v3

Una vez que termine el primer nodo , haz lo mismo en el segundo nodo, acuerdate que una vez que termine el primer nodo puedes subir los servicios en este y tienes que bajar los servicios relacionados con el RDBMS_HOME en el segundo nodo.

root@servidor2.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir
root $ opatch auto /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/stage_dir -oh /mount/oracle/product/11.2.0.2v3


Aplicar el parche 11.2.0.3 a tu Clusterware

Una vez que aplicamos el parche 12539000, estamos listos para actualizar el clusterware. Lo primero que tenemos que hacer es crear el directorio donde va residir nuestro 11.2.0.3 GI_HOME, esto lo vas a hacer en cada nodo

root@servidor1.oracleenespanol.blogspot.com /root
root $ mkdir -p /mount/oracle/grid/11.2.0.3

root@servidor1.oracleenespanol.blogspot.com /root
root $ chown grid:oinstall /mount/oracle/grid/11.2.0.3

Vamos a correr como el usuario grid la utileria runcluvfy.sh, cualquier error o conflicto que resulte de correr esta utileria, la tienes que resolver antes de actualizar a 11.2.0.3.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ cd /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/grid

grid@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/grid
root $ ./runcluvfy.sh stage -pre crsinst -upgrade -n all -rolling -src_crshome /mount/oracle/grid/11.2.0.2 -dest_crshome /mount/oracle/grid/11.2.0.3 -dest_version 11.2.0.3.0 -fixup -fixupdir /home/grid/bin/fixup verbose

Hasta ahora todo lo había hecho desde una sesión de putty de ssh, pero para la siguiente parte, me voy a conectar a una sesión de vnc con el usuario grid.

Si no sabes como arrancar este servicio, aquí una entrada anterior de como arrancar tus servicios de vnc

Lo que voy a hacer es quitar de mi ambiente las siguientes variables

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_SID

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset DB_NAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_HOME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_UNQNAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_BASE

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORA_NLS10

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

Una vez que quitamos la variables mencionadas, ya nada mas nos queda correr el runInstaller

grid@servidor1.oracleenespanol.blogspot.com /mount/dump01/oracle/TEMP_FOR_UPGR_11.2.0.3/grid
root $ ./runInstaller

En mi caso, que no necesariamente tiene que ser tu caso, seleccione las siguientes opciones en cada pantalla que me fue apareciendo, asegurate que la respuesta que des, corresponda a lo que andes buscando o necesitando.


Pantalla
Respuesta
Download Software Updates
‘Skip software updates’
Select Installation Option
‘Upgrade Oracle Grid Infrastructure or Oracle Automatic Storage Management’
Select Product Languages
‘English’; ‘Next’
Grid Infrastructure Node Selection
‘servidor1’, ‘servidor2’; ‘Next’
Privileged Operating System Groups
‘asmdba’,’asmoper’,’asmadmin’;‘Next’
Specify Installation Location
ORACLE_BASE:/mount/oracle/gridbase
GI_HOME:/mount/oracle/grid/11.2.0.3
Summary
‘Next’


 
Una vez que este corriendo el proceso de actualización, te va a solicitar que corras el script rootupgrade.sh.

Así que tienes que abrir una sesión aparte con el usuario root, esta parte es la que va actualizar a ASM y tu OCR a 11.2.0.3 así que va a bajar los servicios todos los servicios de ASM e igualmente los va reiniciar.

Cuando termine el script en el primer nodo, tienes que correrlo en el siguiente nodo, no lo vayas a correr a la misma vez en todos tus nodos, es de uno en uno.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# /mount/oracle/grid/11.2.0.3/rootupgrade.sh

El OCR no se actualiza hasta que llegues a correr el rootupgrade.sh en el ultimo nodo, así que básicamente no estas en 11.2.0.3 hasta que haya corrido en el ultimo nodo.

Ya para verificar, corre los siguientes comandos

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ sqlplus "/as sysasm"

+ASM1 > select version from v$instance;
VERSION
-----------------
11.2.0.3.0

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.2.0.3.0]

Desintalar el GI_HOME de 11.2.0.2 (*)

Ya por ultimo lo que nos falta el desintalar el GI_HOME de 11.2.0.2 , asiq ue como el usuario root , vamos a cambiar los permisos de GI_HOME 11.2.0.2

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su - 

[root@servidor1 ~]# . /home/grid/bin/grid

root@servidor1.oracleenespanol.blogspot.com /root
root $ chmod -R 755 /mount/oracle/grid/11.2.0.2

root@servidor1.oracleenespanol.blogspot.com /root
root $ chown -R grid /mount/oracle/grid/11.2.0.2

root@servidor1.oracleenespanol.blogspot.com /root
root $ chown grid /mount/oracle/grid/11.2.0.2

Como el usuario grid vamos a correr deinstall, asegurate que ninguna variable como ORACLE_HOME o GI_HOME, apunte a tu versión de 11.2.0.3

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle/bin
oracle $ su -grid

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_SID

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset DB_NAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_HOME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_UNQNAME

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ unset ORACLE_BASE

grid@servidor1.oracleenespanol.blogspot.com /home/grid
root $ export ORACLE_HOME=/mount/oracle/grid/11.2.0.2

grid@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/grid
root $ cd /mount/oracle/grid/11.2.0.2
 
grid@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/grid/11.2.0.2
root $ ./deinstall


Conclusión
Hasta aquí acabamos con la primera parte, que es el Clusterware, en la siguiente entrada, vamos a ver el RDBMS_HOME a 11.2.0.3

martes, 13 de marzo de 2012

Recopilación de comandos avanzados en Linux por Arup Nanda


Hace rato me tope con una serie de comandos que Arup Nanda escribió para OTN , esta serie es una buena guía para tener a la mano los comandos que utilizas día a día  o que puedes llegar a usar.

Para mi sorpresa, el día de hoy me entere que esta serie había sido doblada al español, la verdad , hacen una traducción un poco pobre, pero de cualquier manera para alguien que no domina el idioma ingles puede ser muy útil.

De cualquier manera te dejo aquí las ligas, ya sea en ingles o en español, espero que te sirvan y las uses:

Advanced Linux Commands Mastery Series (Español)

Advanced Linux Commands Mastery Series (Ingles)

jueves, 8 de marzo de 2012

Como medir el desempeño de un DBA


Antes de que continúes leyendo, quiero informarte que no encontraras la respuesta aquí, si no que esto es una reflexión de lo complicado que es medir el desempeño estándar de un DBA,

Y es aquí donde entra lo complejo, por que vamos a ver si lo medimos por la cantidad de requerimientos que recibe y termina, me ha tocado ver situaciones en donde en un equipo de 10 DBAs, el que mas numero de requerimientos terminaba era un DBA Jr que sus tareas mas complejas era hacer un export/import.

Si lo medimos los requerimientos por la manera de "Cero defectos en la primera entrega", nos enfrentamos a que tenemos normalmente un ambiente y flujo de trabajo que pasa por desarrollo luego pruebas y finalmente por producción.

En que parte del proceso de los requerimientos mides los cero defectos , en producción o los empiezas a medir desde que recibes tu requerimiento en desarrollo, cuando lo que van a salir son todos los errores que pasas a pruebas para tratar de eliminarlos?

Y que pasa cuando nada falla en desarrollo y pruebas, pero llegas a producción y eres el gran afortunado de descubrir un nuevo bug en la versión que estas trabajando?

Me dirás, la manera que lo puedo medir es en el numero de queries exitosos que hacemos a la base de datos y estos responden en el tiempo adecuado? Para empezar de que manera se define exitoso, que no falla o que sencillamente regresa los datos que debería? Y en tiempo, como puedes definir el tiempo adecuado si un query depende no tanto de ti, si no de los desarrolladores y de la cantidad de datos que regresa, de la misma forma, si un query me regresa datos en 30 minutos o 1 segundos, todo depende del proceso que estés corriendo, los dos pueden estar bien o pueden estar mal.

Existen varias cosas que si creo que puedes medir, pero no de una forma de rendimiento estándar, si no de la salud del ambiente y tus bases de datos

  • El tiempo que la base de datos esta disponible en acuerdo con los SLAs establecidos.
  • El numero de alarmas del mismo tipo que recibiste el mes pasado contra las de este mes, y que se hizo para reducirlo.
  • La cantidad de Base de Datos que tienen los estándares establecidos en los SLAs por la empresa y por tu equipo.
  • El numero de pruebas de desastre que son exitosas en el año.
  • La cantidad de respaldos exitosos/no exitosos que tuviste en el mes.

Como puedes ver es complejo por que desde mi punto de vista un DBA se debe de medir de forma cualitativa no cuantitativa. Y para medirlo de forma cualitativa la formula es por cada DBA y por cada ambiente que tienes.

Al ultimo la realidad del desempeño de un DBA, es que se acaba midiendo por que tan bien ejerce sus funciones en la adversidad de una situación; Es ese 10% de las situaciones catastróficas que no fueron causadas por el mismo y que tiene un DBA en su profesión que acaba determinando si es un buen DBA o no.

Que es Oracle ASM ( Automatic Storage Management)

Si ya empezaste a usar RAC, o estas planeando utilizarlo en un futuro, este es un termino que debes de conocer. Este es un tema un poco pesado y largo, pero espero que me tengas paciencia.

Puesto de una manera muy sencilla, ASM es un manejador de volumenes y solución de almacenamiento de Oracle para manejar archivos de la Base de Datos Oracle.

ASM utiliza grupos de discos para almacenar los archivos;Estos grupos de discos son una colección de discos que ASM los maneja como una unidad. Los discos pueden ser:
  • Un disco duro completo o una partición del disco duro 
  • Un disco o una partición de un arreglo de discos
  • Volumenes lógicos
  • NFS

Cada disco esta dividido en unidades de alojamiento (AU), esta unidad es fundamentalmente como se alojan los datos en el disco, un Extent de archivo son una o varias AUs y un archivo en ASM consiste de uno o varios Extents. El AU se determina con el parametro AU_SIZE y los valores pueden ser 1, 2, 4, 8, 16, 32, o 64 MB.

Los contenidos en los grupos de discos son distribuidos equitativamente para proveer un rendimiento ecuánime a través de los discos. Tu puedes agregar o eliminar discos de un grupo de discos mientras la base de datos accede a sus archivos, ASM automaticamente redistribuye el contenido de los archivos y elimina la necesidad de bajar los servicios de tus instancias para poder hacer esto.

ASM utiliza una instancia para manejar los grupos de discos , esta es una instancia común y corriente como lo platicamos en: Instancia es igual a procesos y memoria , pero lo que si es que esta realiza mucho menores tareas que una instancia que utilizarias en producción y por ende su memoria es mucho menor ( en 11.2.0.3 se recomienda que sea memory_target=1536m).

ASM en 11gR2 se instala con el ORACLE_HOME del  Grid Infrastructure y antes de que se instale la primera Base de Datos, que esta a su vez tiene un ORACLE_HOME distinto.

ASM se encarga de montar los grupos de discos para que puedan estar disponibles para tus instancias y a su vez esta instancia de ASM maneja los metadatos para proveerselos a la tu instancia de desarrollo/producción. Algunos de los metadatos son:
  • Los discos que son parte de un grupo de discos
  • El espacio disponible en un grupo de discos
  • Los nombres de los archivos en un grupo de disco


Los archivos que se almacenan en ASM si no se esta utilizando ACFS, son : 
  • Control files
  • Data files, data files temporales, y copias de data file
  • SPFILEs
  • Online redo logs, archive logs, y Flashback logs
  • Respaldos de RMAN
  • Change tracking bitmaps
  • Data Pump dumpsets

ASM tambien te permite manejar el espejeo(Mirroring) de los discos en tres maneras
  • Normal.-Espejeo de dos vias
  • High.-Espejeo de tres vias
  • External.-No usa espejeo de ASM, si no tu configuración RAID que usaste para la redundancia.

Para terminar con el tema, ASM te permite dos tipos de repartir los datos entre los discos (Disk Striping), que se le llama
  • Fine-Grained Striping.- Este reduce el estado latente para cierto tipos de archivos repartiendo la carga mas ampliamente entre los discos. Todas las unidades del stripe son de 128kb sin importar el tamaño de la AU.
  • Coarse-Grained Striping.- Este provee un balance de cargas para los grupos de discos. Todas las unidades del stripe son igual al tamaño del AU.

Uff, un tema algo pesado y largo, pero muy útil, espero que te sirva esta información.

martes, 6 de marzo de 2012

Eres tan bueno como tus ultimos 5 minutos

La semana pasada mientras yo estaba tan tranquilo modificando unos scripts para un respaldo, un amigo me contacta via messenger que un DBA jr acaba de correr un script en producción cuando lo tenia que ejecutar en desarrollo!

Lo primero que se me vino a la mente fue preguntar: Que fue lo que corrió?

Esto para ver si tenia una solución sencilla, y su respuesta fue algo que me hizo sentir alivio, "Si , fue nada mas crear unos esquemas." En ese momento respire tantito alivio, mas sin embargo escribió la siguiente palabra "pero...". Esa palabra hizo la diferencia.

Lo que sucedió fue al tratar de arreglar la situación, tiro esquemas que no debería de haber tirado.

Y en ese momento fui recordado de este gran dicho en el mundo de DBAs, "Eres tan bueno como tus últimos 5 minutos" , creo que es una de las mejores frases que describe lo fragil que es nuestra profesión, ya que como lo he predicado , nuestro trabajo mas alla de ser constructivo es un trabajo destructivo. Si tu logras ver que tu trabajo como DBA es de esta forma, vas a tener mas cuidado en todo lo que haces.

Ya he escrito una entrada de como identificar en donde estamos trabajando , y aqui te paso un script que usa Uwe Hesse

set serveroutput on
begin
dbms_output.put_line('USER: '||sys_context('userenv','session_user'));
dbms_output.put_line('SESSION ID: '||sys_context('userenv','sid'));
dbms_output.put_line('CURRENT_SCHEMA: '||sys_context('userenv','current_schema'));
dbms_output.put_line('INSTANCE NAME: '||sys_context('userenv','instance_name'));
dbms_output.put_line('DATABASE ROLE: '||sys_context('userenv','database_role'));
dbms_output.put_line('OS USER: '||sys_context('userenv','os_user'));
dbms_output.put_line('CLIENT IP ADDRESS: '||sys_context('userenv','ip_address'));
dbms_output.put_line('SERVER HOSTNAME: '||sys_context('userenv','server_host'));
dbms_output.put_line('CLIENT HOSTNAME: '||sys_context('userenv','host'));
end;
/

Y el resultado del script se ve asi:

USER: SYS
SESSION ID: 23
CURRENT_SCHEMA: SYS
INSTANCE NAME: TESTDB
DATABASE ROLE: PRIMARY
OS USER: oracle
CLIENT IP ADDRESS:
SERVER HOSTNAME: servidor1
CLIENT HOSTNAME: servidor1.oracleenespanol.blogspot.com

Así que la próxima ves que vayas a hacer algún trabajo, enfocate en tu tarea, trata de no estar haciendo varias cosas a la vez, identifica y lee las especificaciones de la tarea a hacer e identifica donde la tienes que hacer, esto te ayudara a minimizar los errores en el futuro, suerte !

jueves, 1 de marzo de 2012

Como arrancar un servicio de VNC para tus instalaciones con GUI en RHEL 5

No se si sabias pero en RHEL 5 trae una version de vncserver, asi que si quieres trabajar de esta manera,aqui un pequeño tip de como arrancar vncserver en tu servidor. Del lado del cliente puedes bajar la version gratuita para tu PC: vncviewer

Lo primero que hay que hacer es arrancarlo por primera vez, al hacer esto te va a solicitar una contraseña para que puedas entrar con vncviewer

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg
antunezg $ vncserver
 
You will require a password to access your desktops.
 
Password:
Verify:
xauth:  creating new authority file /home/antunezg/.Xauthority
 
New 'servidor1.oracleenespanol.blogspot.com:1 (antunezg)' desktop is servidor1.oracleenespanol.blogspot.com:1
 
Creating default startup script /home/antunezg/.vnc/xstartup
Starting applications specified in /home/antunezg/.vnc/xstartup
Log file is /home/antunezg/.vnc/servidor1.oracleenespanol.blogspot.com:1.log

Ya que arrancaste el servicio de vnc, haz el intento de entrar con vncviewer, pero te puedes topar que al entrar, lo unico que te vas a topar es con una pantalla gris o con una pantalla negra, si esto te sucede, verifica el log, si te encuentras la linea marcada en rojo. Baja tu servicio de vnc y cambia los permisos de xstartup

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg
antunezg $ cd ~/.vnc

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg/.vnc
antunezg $ more servidor1.oracleenespanol.blogspot.com:1.log

Xvnc Free Edition 4.1.2
Copyright (C) 2002-2005 RealVNC Ltd.
See http://www.realvnc.com for information on VNC.
Underlying X server release 70101000, The X.Org Foundation


Thu Mar  1 18:02:41 2012
vncext:      VNC extension running!
vncext:      Listening for VNC connections on port 5901
vncext:      Listening for HTTP connections on port 5801
vncext:      created VNC server for screen 0sh: /home/antunezg/.vnc/xstartup: Permission denied


antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg/.vnc
antunezg $ vncserver -kill :1
Killing Xvnc process ID 18926

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg/.vnc
antunezg $ cd $HOME

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg
antunezg $ chmod +x ~/.vnc/xstartup

Ya una vez que cambiaste los permisos, lo unico es que hay que verificar que las lineas marcadas en rojo no esten comentadas

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg/.vnc
antunezg $ vi xstartup

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg/.vnc
antunezg $ cat xstartup
#!/bin/sh

# Uncomment the following two lines for normal desktop:
 unset SESSION_MANAGER
 exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

Y ya para terminar, arranca de nuevo tu servicio de vnc y conectarte al desktop que te menciona, con la contraseña que elegiste anteriormente

antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg
antunezg $ vncserver

New 'servidor1.oracleenespanol.blogspot.com:1 (antunezg)' desktop is servidor1.oracleenespanol.blogspot.com:1

Starting applications specified in /home/antunezg/.vnc/xstartup
Log file is /home/antunezg/.vnc/servidor1.oracleenespanol.blogspot.com:1.log


Actualizacion a la entrada (29/Ene/2013)

Si no tienes el password o quieres cambiar el password, lo haces con el siguiente comando:


antunezg@servidor1.oracleenespanol.blogspot.com /home/antunezg
antunezg $ vncpasswd
Password:
Verify: