jueves, 10 de marzo de 2011

Tratas de conectarte como sysdba y no puedes por el error Ora-12547

Aqui de regreso al blog, les pido mil disculpas por no actualizarlo en el ultimo mes, pero estuve viajando y a su vez en un proceso de upgrade a 11.2.0.2 muy pesado. Tocando el tema de este upgrade, ando desarrollando unos scripts en donde tengo que hacer un clon de la base de datos en vivo, esto es sin la nueva funcionalidad de RMAN en 11g.

Haciendo pruebas con este script que les platico, en pruebas, acabe borrando todos los datafiles, controlfiles y redologs!!! Esto si que es preocupante si fuera la base de datos de produccion, pero como era una de pruebas, no pasa nada, el problema surgio cuando tratando de recrear la base de datos, no me dejaba conectarme ni como sysdba, marcando el error ORA-12547.

oracle $ sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on Thu Mar 10 22:39:43 2011

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

Enter user-name: /as sysdba
ERROR:
ORA-12547: TNS:lost contact

Cual es mi sorpresa que al buscar informacion de los procesos de la base de datos en mi servidor, veo que ninguno esta corriendo

ejemplo
oracle $ ps -eaf | grep TESTDB | grep -v "grep" | wc -l
       0

Despues de unos cuantos dolores de cabeza tratando de averiguar que fue lo que me estaba impidiendo acceder desde sqlplus a mi instancia, por cierto teniendo todas las variables de ambiente correctas, me di cuenta de que los segmentos de memoria compartida y los semaforos en Unix seguian presentes.

Oracle en 9i,10g y 11g trae una utileria llamada sysresv que nos permite saber que semaforos y segmentos de memoria compartida esta siendo utilizada por nuestra instancia.

$ORACLE_HOME/bin/sysresv

Una vez que corri e identifique los segmentos de memoria compartida y los semaforos que estaban presentes para mi instancia

oracle $ $ORACLE_HOME/bin/sysresv

IPC Resources for ORACLE_SID "TESTDB" :
Shared Memory:
ID KEY
1073741917 0xfc4002bc
Semaphores:
ID KEY
2130706467 0x0b90e3f0
67108901 0x0b90e3f1
1711276072 0x0b90e3f5
1543503922 0x0b90e3f6
1828716596 0x0b90e3f7
Oracle Instance not alive for sid "TESTDB"

Me di a la tarea de removerlos con el comando "ipcrm", de las siguientes dos maneras, toma en cuenta que mi prompt en unix es "oracle $"

oracle $ ipcrm -m [shared_memory_ID]

oracle $ ipcrm -s [semaphore_ID]

Ahora si, despues de que los segmentos de memoria y semaforos no estaban presentes, pude acceder a sqlplus sin ningun problema, pudiendo arrancar mi instancia sin ningun inconveniente

oracle $ sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on Thu Mar 10 23:07:51 2011

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

Enter user-name: /as sysdba
Connected to an idle instance.

TESTDB> startup nomount
ORACLE instance started.

Total System Global Area 2088402944 bytes
Fixed Size 2159904 bytes
Variable Size 721423072 bytes
Database Buffers 1342177280 bytes
Redo Buffers 22642688 bytes
TESTDB>

Conclusion
Espero que este pequeño ejemplo les ayude cuande se les presente esta situacion, aunque no es algo que sucede seguido, cuando sucede puede ser un dolor de cabeza arreglarlo y atacarlo.