"ORA-03113: fin de archivo en el canal de comunicación" al inicio


22

He estado leyendo publicaciones aquí, en el soporte de Oracle, y en cualquier otro lugar que pueda encontrar durante los últimos tres días y he renunciado a este problema ...

Se colgó una base de datos Oracle. El cierre de la base de datos permaneció durante unas horas y luego se cerró. No se reiniciará. El servidor fue reiniciado. Oracle fue reiniciado. Ir paso a paso: el inicio de nomount funciona, la base de datos de montaje funciona, la base de datos de alteración abierta devuelve ORA-03113. Todo esto está en localhost, no a través de la red. La máquina no tiene ningún firewall en ejecución.

¿Alguna idea de cómo superar este error ORA-03113? He estado hablando por teléfono con soporte en India durante las últimas 4.5 horas y todavía no he encontrado a nadie útil.


1
Publicar extracto del registro de alertas con ALTER DATABASE OPENy errores después de eso.
Mindaugas Riauba

1
Busque (grep) todos los registros de alertas entre el último inicio exitoso y el inicio actual sin éxito y busque ALTER SYSTEM SET en todo este lapso de tiempo. Quizás alguien cambió algún parámetro de instancia de una manera no estándar.
kubanczyk

Respuestas:


35

Después de horas de mala dirección del soporte oficial de Oracle, me sumergí en esto por mi cuenta y lo arreglé. Lo estoy documentando aquí en caso de que alguien más tenga este problema.

Para hacer algo de esto, debe ser el usuario de Oracle:

$ su - oracle

Paso 1: debe mirar el registro de alertas. No está en / var / log como se esperaba. Debe ejecutar un programa de lectura de registros de Oracle:

$ adrci
ADRCI: Release 11.2.0.1.0 - Production on Wed Sep 11 18:27:56 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/oracle"
adrci>

Observe la base ADR. Esa no es la instalación. Necesita ver las casas para poder conectarse a la que usa.

adrci> show homes
ADR Homes:
diag/rdbms/cci/CCI
diag/tnslsnr/cci/listener
diag/tnslsnr/cci/start
diag/tnslsnr/cci/reload

CCI es el hogar. Establecer eso.

adrci> set home diag/rdbms/cci/CCI
adrci>

Ahora puede ver los registros de alertas. Sería muy bueno si estuvieran en / var / log para poder analizar fácilmente los registros. Simplemente deja de querer y trata con esta interfaz. Al menos puedes seguir (y espero que tengas un buffer de desplazamiento hacia atrás):

adrci> show alert -tail 100

Desplácese hacia atrás hasta que vea errores. Desea el PRIMER error. Cualquier error después del primer error probablemente sea causado por el primer error. En mi caso, el primer error fue:

ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.

Esto es causado por las transacciones. Oracle no está diseñado para ser utilizado. Si inserta una gran cantidad de datos, guarda los registros de transacciones. Esos van al área del archivo de recuperación. Una vez que esté lleno (50GB lleno en este caso). Entonces, Oracle simplemente muere. Por diseño, si algo está en mal estado, Oracle responderá cerrándose.

Hay dos soluciones, la adecuada y la rápida y sucia. La rápida y sucia es aumentar db_recovery_file_dest_size. Primero, salga de adrci.

adrci> exit

Ahora, vaya a sqlplus sin abrir la base de datos, simplemente montándola (es posible que pueda hacer esto sin montar la base de datos, pero la monte de todos modos).

$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 11 18:40:25 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> startup mount

Ahora, puede aumentar su db_recovery_file_dest_size actual, aumentado a 75G en mi caso:

SQL> alter system set db_recovery_file_dest_size = 75G scope=both

Ahora, puede apagar e iniciar nuevamente y ese error anterior debería desaparecer.

La solución adecuada es deshacerse de los archivos de recuperación. Lo haces usando RMAN, no SQLPLUS o ADRCI.

$ rman
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Sep 11 18:45:11 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
RMAN> backup archivelog all delete input;

Si tiene RMAN-06171: not connected to target database, intente usar en rman target /lugar de solorman

Espere mucho tiempo y su archivo (que estaba usando todo ese espacio) desaparecerá. Por lo tanto, puede cerrar / iniciar su base de datos y volver al negocio.


No encuentro el comando adrci en mi servidor oracle linux. ¿Cómo lo instalo? Gracias.

3
¡Gracias! Funciona. Pero el comando correcto para rman es: export ORACLE_SID=my_oracle//rman target /

Para agregar mis 2 centavos, puede consultar este artículo aquí, que tiene un comando que puede usar RMANpara borrar el área de archivo, así como algunas otras cosas. Cuidado, ya que también borrará los puntos de restauración si el DB está abierto por alguna razón (el último bit): the1403.github.io/RMAN-cleanup-logs
g00dy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.