View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Los 5 Errores más comunes en una BBDD Oracle - Diagnóstico y Solución


1. La BBDD no está arrancada o no ha arrancado bien : ORA-01034: ORACLE not available


Si la BBDD no está arrancada, simplemente nos conectamos como superusuario :

sqlplus "/ as sysdba"

y ponemos :

SQL> startup;

si la BBDD no ha arrancado bien (hay multiples motivos) primero habrá que echarla abajo (shutdown) :

hay 4 tipos de shutdown :

shutdown normal : La Base de Datos no se parará si hay usuarios conectados.

shutdown transactional: Después de ejecutarla, los clientes no podrán comenzar
nuevas transacciones, y la base de datos se parará cuando
todas se hayan confirmado (commit) o anulado (rollback).

shutdown immediate : Todas las sentencias SQL se terminan inmediatamente, no se
espera a que se desconecten los usuarios. Las transacciones
no confirmadas (commit) SI se deshacen, por lo que la BBDD
se podrá mantener consistente.

shutdown abort : Se usa cuando muere un proceso background y no se puede tirar
la BBDD en modo normal o immediate. Las transacciones no
confirmadas (commit) NO se deshacen y la Base de Datos puede
necesitar crash recovery durante el siguiente startup.

En el estado en que se encontrará la BBDD, lo normal es que tengamos que hacer un
shutdown immediate o, si no hay más remedio, un shutdown abort.

Una vez parada la BBDD, procederemos a arrancarla normalmente :

SQL> startup;


2. No está corriendo el Listener de Oracle : ORA-12541


El Listener de Oracle es el proceso que acepta conexiones remotas de los clientes.

Para conocer el estado del Listener utilizaremos el siguiente comando, desde el sistema operativo :

oracle@database: cd $ORACLE_HOME
oracle@database: cd /bin
oracle@database: lsnrctl status

si está corriendo debe aparecer una línea que ponga :

Resumen de servicios...
captura tiene 1 gestor(es) de servicio


captura siempre es el nombre de la instancia de la BBDD en todas las máquinas que configura SICO.

si no está corriendo el Listener, poner :

oracle@database: lsnrctl start


3. Un Tablespace se llena : ORA-1653 y ORA-1654


Este error se produce cuando una Tabla o un Indice ubicada en un Tablespace lleno intenta incrementar su tamaño.

Ejemplos (extractos del archivo alertcaptura.log) :

Thu May 11 06:00:29 2006
ORA-1653: unable to extend table METRO.EVENTOS_PCL by 40964 in tablespace HISTORICOS

Fri Jan 4 07:30:00 2008
ORA-1654: unable to extend index METRO.TSCLOG_TSC_PK by 8192 in tablespace INDX_BIT


nos conectamos con un sqlplsus :

[oracle@servbit bdump]$ sqlplus metro/metro1

y comprobamos cuál es el siguiente Datafile que le corresponde a ese Tablespace. Un Tablespace está
compuesto de 1 o varios Datafiles,digamos que Tablespace es la unidad lógica y Datafile es la unidad física :

SQL> SELECT NAME,BYTES FROM V$DATAFILE;

esta sentencia no muestra el nombre del Tablespace, pero es muy sencillo coligir a qué Tablespace
pertenece cada Datafile ya que siempre (al menos en SICO) se utiliza el siguiente criterio de
nomenclatura : nombre_del_tablespacexx.dbf donde xx es un número secuencial de 2 dígitos.

En el ejemplo anterior, para aumentar el tamaño del Tablespace INDX_BIT, utilizaremos la sentencia :

SQL> ALTER TABLESPACE INDX_BIT ADD DATAFILE '/u03/datos/oradata/captura/Indx_Bit10.dbf' SIZE 512M;

hay que tener cuidado con que el directorio donde vamos a crear el nuevo Datafile no esté lleno,
para ello previamente (desde el sistema operativo) habrá que hacer un "df -k".

Si el directorio está ya al 100% o cercano, buscamos otra ubicación : /u07 , /u08, ... y siempre
intentando respetar la estructura de directorios anterior : /datos/oradata/captura que quiere decir :
Datos/Datos de Oracle/Nombre de la Instancia de la BBDD Oracle.

Al final hay que cargar a mano los ficheros de datos que no se han cargado:

a) Buscar nombre de tabla en ej: Rgistros_sc/load_Tsclog.ctl.-->fichero de control
b) Revisar los LogCarga.log que han dado error. (La primera vez que da error te lo avisa en el AlertCaptura).
c) Mover los datos que hemos revisado a un fichero que creemos. Ejemplo:

cat Datos2Cargar.dat.2008-02-08_07:20:00 > Datos.dat -->la 1ª vez con un solo: >
cat Datos2Cargar.dat.2008-02-08_07:30:00 >> Datos.dat -->las siguientes con dos: >>
cat Datos2Cargar.dat.2008-02-08_07:40:00 >> Datos.dat

d) Mueves el fichero Datos.dat a la ruta principal. Ejemplo:

[metro@servbit Log]$ mv Datos.dat ..
[metro@servbit Log]$ cd ..
[metro@servbit SqlLoadDir]$ mv Datos.dat ..
[metro@servbit SqlLoadDir]$ cd ..
[metro@servbit RegistrosSC]$ ls
ConsolidacionDir ListasBackup SqlLoadDir xEventos.Log.0.gz xEventos.Log.3.gz xEventos.Log.6.gz
Datos.dat ListasConfig load_Tsclog.ctl xEventos.Log.1.gz xEventos.Log.4.gz xEventos.Log.7.gz
InfoRecibidaDir ListasInicio xEventos.Log xEventos.Log.2.gz xEventos.Log.5.gz

e) Ejecutar sqlldr .Ejemplo:

[metro@servbit RegistrosSC]$ sqlldr metro/metro1 DATA=Datos.dat CONTROL=load_Tsclog.ctl SKIP=1258 ERRORS=500000

SKIP= son las cargas correctas(Rows successfully loaded)

f) Ves si se han cargado correctamente: tail -30 load_Tsclog.log
g) Borras los ficheros creados: rm load_Tsclog.log Datos.bad Datos.dat


4. Una Tabla alcanza su MAX_EXTENTS (número máximo de veces que puede incrementar su tamaño) : ORA-1631


Ejemplo (extracto del archivo alertcaptura.log) :

Tue May 16 09:50:04 2006
ORA-1631: max # extents 505 reached in table METRO.EVENTOS_PCL

nos conectamos con un sqlplsus :

metrosun1% sqlplus metro/metro1

y aumentamos el número de MAX_EXTENTS de esa tabla :

ALTER TABLE EVENTOS_PCL STORAGE (MAXEXTENTS 5000);


5. El Directorio donde se almacenan los archivos de Log se llena : ORA-16014 - No available destinations


Ejemplo (extracto del archivo alertcaptura.log) :

Wed Jan 23 03:34:53 2008
ARC0: Beginning to archive log# 1 seq# 8345
Wed Jan 23 03:34:53 2008
Current log# 2 seq# 8346 mem# 0: /u02/loga/redo02a.log
Current log# 2 seq# 8346 mem# 1: /u01/logb/redo02b.log
Wed Jan 23 03:35:18 2008
ARC0: Error 19510 closing archivelog file '/u02/arch/arch_8345.dbf'
ARC0: Archiving not possible: error count exceeded
ARC0: Failed to archive log# 1 seq# 8345
ARCH: Archival stopped, error occurred. Will continue retrying
Wed Jan 23 03:35:18 2008
ORACLE Instance captura - Archival Error
ARCH: Connecting to console port...
Wed Jan 23 03:35:18 2008
ORA-16014: log 1 sequence# 8345 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/u02/loga/redo01a.log'
ORA-00312: online log 1 thread 1: '/u01/logb/redo01b.log'
ARCH: Connecting to console port...
ARCH:
ORA-16014: log 1 sequence# 8345 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/u02/loga/redo01a.log'
ORA-00312: online log 1 thread 1: '/u01/logb/redo01b.log'
Wed Jan 23 03:37:26 2008
ARC0: Beginning to archive log# 1 seq# 8345
Wed Jan 23 03:37:53 2008
ARC0: Completed archiving log# 1 seq# 8345
Archiver process freed from errors. No longer stopped.

Los directorios de Log en los diferentes Servidores son los siguientes :

metrosun1 -> /u02/arch
metrosun2 -> /u07/arch
metrosun3 -> /u02/arch

servbit -> /u02/datos/arch
bd_controlid -> /u02/datos/arch
bd_sagir -> /u02/datos/arch

Para otros servidores no incluidos en esta lista, la forma más fácil de saber
donde se almacenan los archivos de Log es mirando el script borrar_redologs
que se encuentra en el directorio scripts en el home del usuario Oracle.

También se puede dónde se encuentra el directorio /arch mirando el valor del parámetro log_archive_dest :
Nos conectamos a un sqlplus y ponemos SHOW PARAMETERS.

En nuestro ejemplo el error se arregla sin ninguna intervención por parte del Administrador
ya que los archivos de Log son purgados (borrados) cada cierto tiempo (a las 03:35 entre otras).