“ORA-03113: fim de arquivo no canal de comunicação” na inicialização

22

Estive lendo postagens aqui, no suporte da Oracle, e em qualquer outro lugar que encontrei nos últimos três dias e desisti desse problema ...

Um banco de dados Oracle travou. O desligamento do banco de dados ficou parado por algumas horas e depois encerrou. Não seria reiniciado. O servidor foi reiniciado. O Oracle foi reiniciado. Indo passo a passo: o nome da inicialização funciona, altera os trabalhos de montagem do banco de dados, altera os retornos abertos do banco de dados ORA-03113. Isso tudo é no host local - não pela rede. A máquina não possui nenhum tipo de firewall em execução.

Alguma idéia de como superar este erro ORA-03113? Estive ao telefone com suporte na Índia nas últimas 4,5 horas e ainda não encontrei ninguém útil.

kainaw
fonte
1
Poste um trecho do log de alerta ALTER DATABASE OPENe os erros depois disso.
Mindaugas Riauba 11/09/13
1
Pesquise (grep) todos os logs de alerta entre a última inicialização bem-sucedida e a inicialização sem êxito atual e procure ALTER SYSTEM SET nesse período de tempo. Talvez alguém tenha alterado algum parâmetro de instância de maneira não padrão.
Kubanczyk

Respostas:

35

Após horas de desvio de orientação do suporte oficial da Oracle, mergulhei nisso sozinho e o corrigi. Estou documentando aqui, caso outra pessoa tenha esse problema.

Para fazer isso, você deve ser o usuário oracle:

$ su - oracle

Etapa 1: você precisa olhar para o log de alerta. Não está em / var / log conforme o esperado. Você precisa executar um programa de leitura de log 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 a base de ADR. Essa não é a instalação. Você precisa ver as casas para poder se conectar à que você usa.

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

O CCI é o lar. Defina isso.

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

Agora, você pode olhar para os logs de alerta. Seria muito bom se eles estivessem em / var / log para que você pudesse analisar facilmente os logs. Apenas pare de querer e lide com essa interface. Pelo menos você pode seguir (e espero que você tenha um buffer de rolagem):

adrci> show alert -tail 100

Role para trás até ver erros. Você deseja o primeiro erro. Qualquer erro após o primeiro erro provavelmente está sendo causado pelo primeiro erro. No meu caso, o primeiro erro foi:

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

Isso é causado por transações. O Oracle não foi projetado para ser usado. Se você inserir muitos dados nele, eles salvarão os logs de transações. Aqueles vão para a área do arquivo de recuperação. Quando estiver cheio (50 GB neste caso). Então, a Oracle simplesmente morre. Por padrão, se algo estiver errado, a Oracle responderá desligando.

Existem duas soluções, a correta e a rápida e suja. O mais rápido e sujo é aumentar o db_recovery_file_dest_size. Primeiro, saia do adrci.

adrci> exit

Agora, entre no sqlplus sem abrir o banco de dados, apenas montando-o (você pode fazer isso sem montar o banco de dados, mas eu o monto de qualquer maneira).

$ 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

Agora, você pode aumentar seu db_recovery_file_dest_size atual, aumentado para 75G no meu caso:

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

Agora, você pode desligar e iniciar novamente e esse erro anterior deve ter desaparecido.

A solução correta é se livrar dos arquivos de recuperação. Você faz isso usando o RMAN, não o SQLPLUS ou 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;

Se você tiver RMAN-06171: not connected to target database, tente usar em rman target /vez de apenasrman

Aguarde um longo tempo e o seu archivelog (que estava ocupando todo esse espaço) desaparecerá. Assim, você pode desligar / inicializar seu banco de dados e voltar aos negócios.

kainaw
fonte
Não encontro o comando adrci no meu servidor oracle linux. Como instalo? Obrigado.
3
Obrigado! Funciona. Mas o comando correto para o rman é: export ORACLE_SID=my_oracle//rman target /
Para adicionar meus 2 centavos - você pode conferir este artigo aqui, que possui um comando com o qual você pode usar RMAN, para limpar a área de arquivamento, além de outras coisas. Cuidado, pois também limpará os pontos de restauração se o banco de dados estiver aberto por algum motivo (o último bit): the1403.github.io/RMAN-cleanup-logs
g00dy 11/12