"ORA-03113: fine file sul canale di comunicazione" all'avvio

  • Ho letto post qui, sul supporto Oracle e in qualsiasi altro posto che ho trovato negli ultimi tre giorni e ho rinunciato a questo problema ...

    Un database Oracle bloccato. L'arresto del database è rimasto bloccato per alcune ore e poi si è chiuso. Non si riavvia. Il server è stato riavviato. Oracle è stato riavviato. Andando passo dopo passo: l'avvio di nomount funziona, altera il montaggio del database funziona, altera l'apertura del database restituisce ORA-03113. Questo è tutto su localhost, non sulla rete. La macchina non ha firewall di alcun tipo in esecuzione.

    Qualche idea su come superare questo errore ORA-03113? Sono stato al telefono con l'assistenza in India nelle ultime 4,5 ore e non ho ancora trovato nessuno di aiuto.

    Pubblica un estratto dal registro degli avvisi con "ALTER DATABASE OPEN" e gli errori successivi.

    Cerca (grep) tutti i registri degli avvisi tra l'ultimo avvio riuscito e l'attuale avvio non riuscito e cerca ALTER SYSTEM SET in tutto questo intervallo di tempo. Forse qualcuno ha cambiato qualche parametro di istanza in un modo non standard.

  • kainaw

    kainaw Risposta corretta

    7 anni fa

    Dopo ore di deviazioni dal supporto ufficiale Oracle, mi sono tuffato in questo da solo e l'ho risolto. Lo sto documentando qui nel caso in cui qualcun altro abbia questo problema.

    Per fare tutto ciò, devi essere l'utente Oracle:

    $ su - oracle
    

    Passaggio 1: è necessario esaminare il registro degli avvisi. Non è in / var / log come previsto. Devi eseguire un programma di lettura dei 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>
    

    Notare la base ADR. Questa non è l'installazione. Devi vedere le case in modo da poterti connettere a quella che usi.

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

    CCI è la casa. Imposta quello.

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

    Ora puoi guardare i registri degli avvisi. Sarebbe molto bello se fossero in / var / log in modo da poter analizzare facilmente i log. Smettila di volere e gestisci questa interfaccia. Almeno puoi tail (e spero che tu abbia un buffer di scorrimento):

    adrci> show alert -tail 100
    

    Scorri indietro fino a visualizzare gli errori. Vuoi il PRIMO errore. Eventuali errori dopo il primo errore sono probabilmente causati dal primo errore. Nel mio caso, il primo errore è stato:

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

    Ciò è causato dalle transazioni. Oracle non è progettato per essere utilizzato. Se inserisci molti dati, salva i registri delle transazioni. Quelli vanno nell'area del file di ripristino. Una volta che è pieno (50 GB pieni in questo caso). Quindi, Oracle muore semplicemente. In base alla progettazione, se qualcosa è incasinato, Oracle risponderà spegnendosi.

    Ci sono due soluzioni, quella giusta e quella veloce e sporca. Quello veloce e sporco è aumentare db_recovery_file_dest_size. Per prima cosa, esci da Adrci.

    adrci> exit
    

    Ora, vai in sqlplus senza aprire il database, semplicemente montandolo (potresti essere in grado di farlo senza montare il database, ma lo monto comunque).

    $ 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
    

    Ora puoi aumentare il tuo attuale db_recovery_file_dest_size, aumentato a 75G nel mio caso:

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

    Ora puoi spegnere e riavviare di nuovo e l'errore precedente dovrebbe essere scomparso.

    La soluzione corretta è sbarazzarsi dei file di ripristino. Puoi farlo usando RMAN, non 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;
    

    Se hai RMAN-06171: not connected to target database, che provare a utilizzare rman target / invece di solo rman

    Aspetta molto tempo e il tuo archivelog (che stava utilizzando tutto quello spazio) sarà sparito. Quindi, puoi chiudere / avviare il tuo database e tornare in attività.

    Non trovo il comando adrci nel mio server Oracle Linux. Come lo installo? Grazie.

    Grazie! Funziona. Ma il comando corretto per rman è: `export ORACLE_SID = my_oracle` //` rman target / `

    Per aggiungere i miei 2 centesimi - puoi controllare questo articolo qui, che ha un comando che puoi usare con `RMAN`, al fine di cancellare l'area di archivio, così come altre cose. Attenzione, poiché cancellerà anche i punti di ripristino se il DB è aperto per qualche motivo (l'ultimo bit): https://the1403.github.io/RMAN-cleanup-logs/

Licenza sotto CC-BY-SA con attribuzione


Contenuto datato prima del 26/06/2020 09:53