miércoles, 30 de mayo de 2012

RAC: Error ORA-12537 al conectarse a traves del listener

El día de hoy , un compañero me contacto que estaba teniendo un problema al tratar de correr nuestros scripts de respaldo, que han estado funcionando sin problema en otros servidores.

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ rman target system@TESTDB

Recovery Manager: Release 11.2.0.3.0 - Production on Wed May 30 21:23:56 2012

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

target database Password:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-12537: TNS:connection closed

Lo primero que pensé es que el archivo de password estaba mal en el $RDBMS_ORACLE_HOME/dbs, lo cual no fue el caso.

Cabe decir que esta granja de servidores es nuevo, así que era la primera vez que estábamos haciendo pruebas de respaldos aquí.

Después de quebrarme un rato la cabeza buscando el problema en el sqlnet.ora , tnsnames.ora y el listener, me di cuenta de que el problema se encontraban en los permisos del binario de "oracle".

Ya que como sabes en RAC, el listener del SCAN pertenece al dueño del GI_HOME, que normalmente es el usuario grid, y de igual manera entre el usuario grid y el usuario oracle , el grupo de los binarios es el asmadmin.

Para diagnosticar el problema fue que como el usuario grid, tratamos de correr el comando de unix "ls", y me di cuenta que el listener no podía acceder a este archivo binario:

grid@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/grid
grid $ ls -l $RDBMS_ORACLE_HOME/bin/oracle
ls: /mount/oracle/product/11.2.0.3v1/bin/oracle: Permission denied

Una vez que me di cuenta de este problema, lo único que tenia que hacer es cambiar el grupo y los permisos del archivo binario "oracle" y de igual manera asegurarme que el bit suid del archivo sea el correcto, teniendo en si permisos 6751, y esto tiene que ser en todos los RBDMS_ORACLE_HOME de la granja de servidores que tienes

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ cd $ORACLE_HOME/bin

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3v1/bin
oracle $ ls -lart oracle
-rwsr-s--x 1 oracle dba 232399431 Mar 17 07:57 oracle

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3v1/bin
oracle $ chgrp asmadmin oracle

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3v1/bin
oracle $ chmod 6751 oracle


Cuando cambiamos los permisos de este archivo, no tuvimos ningún problema en acceder vía el listener, así que no se te olvide este paso cuando estas instalando manualmente el RDBMS_ORACLE_HOME:

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ rman target system@TESTDB

Recovery Manager: Release 11.2.0.3.0 - Production on Wed May 30 21:23:56 2012

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

target database Password:
connected to target database: TESTDB (DBID=643988434)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name TESTDB are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 35 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/mount/copy01/TESTDB/oracle/TESTDB/control/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/mount/copy01/TESTDB/oracle/TESTDB/full/%U';
CONFIGURE MAXSETSIZE TO UNLIMITED;
CONFIGURE ENCRYPTION FOR DATABASE OFF;
CONFIGURE ENCRYPTION ALGORITHM 'AES128';
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/mount/copy01/TESTDB/oracle/TESTDB/control/snapcf_TESTDB.f';

jueves, 24 de mayo de 2012

RAC: Clonar un Oracle Home version 11.2.0.3 en Linux 5

Hace como año y medio escribi una entrada de como clonar un ORACLE_HOME en Solaris, y ahora que ando con RAC, me tope que clonar el OH para esta tecnologia cambia un poco.

Como siempre, lo primero que te voy a decir es que cumplas con todos los prerequisitos antes de cualquier instalacion

Prerequisitos para instalar Oracle RDBMS 11gR2 Linux

Lo primero que tienes que hacer es un archivo TAR de tu OH

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ cd /mount/oracle/product/11.2.0.3v1 

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3v1
oracle $tar -cvf /mount/copy01/11.2.0.3v1_GOLD.tar .

Una vez que tienes tu archivo TAR, copialo al servidor en donde vayas a hacer tu clonacion, en mi caso nada mas voy a hacerlo en el mismo servidor, pero crear un segundo OH.

Esto lo tienes que hacer para cada nodo en donde vayas a clonar tu OH, o sea que si tienes 10 nodos, en cada uno de los 10 nodos lo tienes que hacer :)

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ cd /mount/oracle/product/11.2.0.3_CLONED

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3_CLONED
oracle $ tar -xvf /mount/copy01/11.2.0.3v1_GOLD.tar

Ya que descomprimiste tu OH en cada uno de los nodos, asegurate de cambiar los permisos al usuario y al grupo que pertenece la instalacion, en mi caso es oracle:oinstall

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3_CLONED
oracle $ cd /mount/oracle/product

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product
oracle $ chown -R oracle:oinstall 11.2.0.3_CLONED

No se te olvide, si es necesario, borrar los *.ora de $ORACLE_HOME/network/admin y los init/spfiles y orapw de $ORACLE_HOME/dbs

Ahora lo que tenemos que hacer es construir un pequeño archivo llamado clonar_oh.sh y correrlo, va contener lo siguiente

ORACLE_BASE=/mount/oracle
ORACLE_HOME=/mount/oracle/product/11.2.0.3_CLONED
THISNODE=`hostname -s`

cd $ORACLE_HOME/clone/bin

E01=ORACLE_HOME=/mount/oracle/product/11.2.0.3_CLONED
E02=ORACLE_HOME_NAME=ORA11g203_RDBMS_v1
E03=ORACLE_BASE=/mount/oracle
E04=OSDBA_GROUP=dba
E05=OSOPER_GROUP=oper
C01="CLUSTER_NODES={servidor1.oracleenespanol.blogspot.com,servidor2.oracleenespanol.blogspot.com}"
C02="LOCAL_NODE=$THISNODE"


echo $E01
echo $E02
echo $E03
echo $E04
echo $E05
echo $C01
echo $C02

perl $ORACLE_HOME/clone/bin/clone.pl $E01 $E02 $E03 $E04 $E05 $C01 $C02

Cuando finaliza el script clonar_oh.sh, no se te olvide correr en cada nodo el script $ORACLE_HOME/root.sh  que genera la clonacion., esto tiene que ser como el usuario root

De igual manera  tenemos que actualizar los nodos del OH en dado caso de que haya cambiado la locacion de tu OH

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/oracle
oracle $ cd $ORACLE_HOME/oui/bin

oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.3_CLONED/oui/bin
oracle $./runInstaller -updateNodeList CLUSTER_NODES=servidor1.oracleenespanol.blogspot.com,servidor2.oracleenespanol.blogspot.com ORACLE_HOME=/mount/oracle/product/11.2.0.3_CLONED

Ya para terminar, lo unico que tenemos que hacer, es cambiar los permisos y dueño para el binario "oracle" del RDBMS

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

grid@servidor1.oracleenespanol.blogspot.com [TESTDB1] /home/grid
grid $ $GRID_ORACLE_HOME/bin/setasmgidwrap o=/mount/oracle/product/11.2.0.3_CLONED/bin/oracle

Espero que esto te sirva para cuando quieras clonar tu ORACLE_HOME de tu RDBMS en RAC.

lunes, 7 de mayo de 2012

Oracle SQL Developer y su Navegador de DBA

Este fin de semana entre varias cosas que me encontré,gracias a Yury Velikanov, fue la nueva ( para mi ) noticia de que SQL Developer 3.1 tiene un navegador para DBA's.

Para las personas que no tienen una licencia de TOAD y OEM es demasiado lento para ciertas tareas; como ver la definición de todos tus tablespaces y hacer una molificación a uno de tus tablespaces, esta es una muy buena herramienta.

De igual manera tiene un monitor de respaldos, así como una sección para definir tareas en el scheduler de Oracle

De hecho aquí no me voy a poner a dar ejemplos de como usarlo, pero si es, mas bien para que sepas que existe y que lo saques a dar una vuelta.

Oracle SQL Developer 3.1

Tutorial del Navegador de DBA (Ingles pero con muchas fotos)


miércoles, 2 de mayo de 2012

Como monitorear si un respaldo corrio en las ultimas 24hrs

OEM tiene bastantes métricas que puedes usar para monitorear tu base de datos, pero que pasa cuando quieres monitorear si en las ultimas 24 o 36 horas no ha corrido tu respaldo de producción,

OEM tiene algo llamado métricas definidas por el usuario,  UDM por sus siglas en ingles, y es algo muy útil para lo que te mencione al principio

Para que funcione esta métrica, tienes que utilizar RMAN como herramienta de respaldo, no funciona si usas el comando "alter tablespace ... begin backup;".

Primero , vamos a utilizar este query para sacar el tiempo que ha transcurrido desde que finalizo el ultimo respaldo

select nvl((sysdate-min(t2)),0)*24 time_since_bu from 
( select max(b.checkpoint_time) t2 
from v$backup_datafile b, v$tablespace ts, v$datafile f 
where included_in_database_backup='YES' and completion_time>sysdate-90 
and f.file#=b.file# and f.ts#=ts.ts# group by f.file# );


Una vez que definimos el query vamos a utilizar, en OEM Grid Control 11g en el tabulador de HOME de tu base de datos vas a encontrar en la parte inferior derecha  varias ligas, y ahí se encuentra ladeUser-Defined Metrics .  Si estas utilizando otra versión de OEM, esta liga se puede encontrar en el lado izquierdo u en otra parte del tabulador HOME.

Ya que entraste a la sección de UDM, vas a darle click a Create, y ahí te va a llevar a la definición de la métrica, que en mi caso es de la siguiente manera


Cuando termines de definir tu UDM, tienes que definir una regla de notificación , si no, no vas a recibir
la alerta en tu correo, solamente sera mostrada en OEM

En la parte superior izquierda de OEM, vas a ver una liga llamada Preferences, al darle click ahi vas a ver una parte que se llama Notification, y ahi le das Create

Ya para acabar, le vas a dar un nombre a tu regla, y vas a seleccionar de la parte de metricas, a tu UDM que creaste, y de igual manera, selecciona el estado Critic y Warning para recibir alerts.



Y listo, vas a recibir una alerta similar a esta en tu correo cuando tu respaldo no haya corrido y finalizado en las ultimas 25hrs.

Metric Column
User-Defined Numeric Metric
Metric Value
VERIFICAR_RESPALDO
Timestamp
02-05-12 02:36:00
Severity
WARNING
Message
El Ultimo Respaldo se tomo hace 25.41 hrs