web-dev-qa-db-fra.com

"ORA-03113: fin de fichier sur le canal de communication" au démarrage

J'ai lu des articles ici, sur le support Oracle, et partout où je peux trouver ces trois derniers jours et j'ai abandonné ce problème ...

Une base de données Oracle s'est bloquée. L'arrêt de la base de données a duré quelques heures, puis il s'est arrêté. Cela ne redémarrerait pas. Le serveur a été redémarré. Oracle a été redémarré. Aller pas à pas: le démarrage nomount fonctionne, modifier la base de données fonctionne, modifier la base de données ouverte renvoie ORA-03113. Tout cela est sur localhost - pas sur le réseau. La machine n'a aucun pare-feu en cours d'exécution.

Une idée de comment surmonter cette erreur ORA-03113? Je suis au téléphone avec support en Inde depuis 4,5 heures et je n'ai encore trouvé personne utile.

22
kainaw

Après des heures de mauvaise orientation du support officiel d'Oracle, je me suis plongé dans ce problème par moi-même et l'ai résolu. Je le documente ici au cas où quelqu'un d'autre aurait ce problème.

Pour ce faire, vous devez être l'utilisateur Oracle:

$ su - Oracle

Étape 1: vous devez consulter le journal des alertes. Ce n'est pas dans/var/log comme prévu. Vous devez exécuter un programme de lecture des journaux 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>

Remarquez la base ADR. Ce n'est pas l'installation. Vous devez voir les maisons pour pouvoir vous connecter à celle que vous utilisez.

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

CCI est la maison. Réglez ça.

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

Maintenant, vous pouvez consulter les journaux d'alertes. Ce serait très bien s'ils étaient dans/var/log afin que vous puissiez facilement analyser les journaux. Arrêtez de vouloir et traitez cette interface. Au moins, vous pouvez suivre (et j'espère que vous avez un tampon de défilement):

adrci> show alert -tail 100

Faites défiler jusqu'à ce que vous voyiez des erreurs. Vous voulez la PREMIÈRE erreur. Toute erreur après la première erreur est probablement due à la première erreur. Dans mon cas, la première erreur a été:

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

Cela est dû aux transactions. Oracle n'est pas conçu pour être utilisé. Si vous y insérez beaucoup de données, il enregistre les journaux de transactions. Ceux-ci vont dans la zone du fichier de récupération. Une fois que c'est plein (50 Go plein dans ce cas). Ensuite, Oracle meurt. Par conception, si quelque chose est gâché, Oracle répondra en s'arrêtant.

Il existe deux solutions, la bonne et la rapide et sale. Le plus rapide et le plus sale consiste à augmenter db_recovery_file_dest_size. Tout d'abord, quittez adrci.

adrci> exit

Maintenant, allez dans sqlplus sans ouvrir la base de données, il suffit de la monter (vous pourrez peut-être le faire sans monter la base de données, mais je la monte quand même).

$ 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

Maintenant, vous pouvez augmenter votre db_recovery_file_dest_size actuelle, augmentée à 75G dans mon cas:

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

Maintenant, vous pouvez à nouveau arrêter et redémarrer et cette erreur précédente devrait avoir disparu.

La solution appropriée consiste à se débarrasser des fichiers de récupération. Pour ce faire, utilisez RMAN, pas SQLPLUS ou 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 vous avez RMAN-06171: not connected to target database, que d'essayer d'utiliser rman target / au lieu de simplement rman

Attendez longtemps et votre archivelog (qui utilisait tout cet espace) aura disparu. Ainsi, vous pouvez arrêter/démarrer votre base de données et reprendre votre activité.

35
kainaw