Oracle – Une instance ne démarre pas et renvoie une erreur ORA-03113 à cause du tablespace UNDO corrompu
Alors bonne blague ce matin, une base Oracle de test ne démarre pas et me renvoie cette erreur :
ORA-03113: fin de fichier sur canal de communication
Ok, c’est cool mais ça na veut pas dire grand chose, donc je vais voir le alert_SID.log (ORACLE_HOME\RDBMS\trace\) et j’obtiens ceci :
KCF: write/open error block=0x6fba1 online=1 file=2 UNDO_01.DBF error=27072 txt: 'OSD-04008: échec de Writefile() ; écriture impossible dans le fichier O/S-Error: (OS 33) Le processus ne peut pas accéder au fichier car un autre processus en a verrouillé une partie.' Wed Apr 10 11:47:21 2013 Errors in file c:\oracle\10.2.0\rdbms\trace\SID_dbw0_2984.trc: ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode ORA-01114: IO error writing block to file 2 (block # 457633) ORA-01110: data file 2: UNDO_01.DBF; ORA-27072: File I/O error OSD-04008: échec de Writefile() ; écriture impossible dans le fichier O/S-Error: (OS 33) Le processus ne peut pas accéder au fichier car un autre processus en a verrouillé une partie.
Il semble que ce soit le tablespace UNDO, qui a un problème !
Par acquis de concsience, on va voir la trace associée :
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
Je vais voir ce fichier UNDO_01.DBF et remarque qu’il semble bien corrompu.
On fait quoi maintenant, la base ne vaut pas démarrer à cause de ce fichier corrompu et on ne peut pas agir sur ce fichier sans avoir la base démarrée…
Alors comment qu’on fait ;), et bien une grosse bidoule …
D’abord, le fichier étant mort, je supprime. J’essaye de démarrer la base sans succès, il lui manque le fichier UNDO_01.DBF.
Je duplique un fichier DBF du même répertoire et le renomme en UNDO_01.DBF.
Cette fois-ci, la base démarre avec une erreur, mais elle est démarrée et on peut agir sur le UNDO tablespace :
ORA-00376: file 2 cannot be read at this time ORA-01110: data file 2: 'UNDO_01.DBF'
Alors action :
C:\>sqlplus /nolog SQL*Plus: Release 10.2.0.2.0 Production on Mer. Avr. 10 14:47:20 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL>connect / as sysdba; Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 143725064 bytes Fixed Size 451080 bytes Variable Size 109051904 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: 'UNDO_01.DBF' SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_tablespace string UNDO SQL> alter system set undo_management = manual scope=spfile; System altered. SQL> shutdown ORA-01109: base non ouverte SQL> exit Déconnecté de Oracle Database 10g Release 10.2.0.2.0 - Production
Ensuite,
C:\>sqlplus /nolog SQL*Plus: Release 10.2.0.2.0 Production on Mer. Avr. 10 14:47:20 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> connect / as sysdba; Connecté. SQL> startup; ORACLE instance started. Total System Global Area 143725064 bytes Fixed Size 451080 bytes Variable Size 109051904 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Base de données montée. ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: 'UNDO_01.DBF' SQL>alter database datafile 'UNDO_01.DBF' offline drop; Database altered. SQL> alter database open; Database altered. SQL> drop tablespace UNDO; Tablespace dropped. SQL> create undo tablespace UNDOTS2 datafile 'UNDO_02.dbf' size 25m autoextend on next 5m maxsize 10024m; Tablespace created. idle> alter system set undo_management = auto scope=spfile; System altered. SQL> ALTER SYSTEM SET undo_tablespace = 'UNDOTS2'; Système modifié. SQL> shutdown; Base de données fermée. Base de données démontée. Instance ORACLE arrétée. SQL> exit; Déconnecté de Oracle Database 10g Release 10.2.0.2.0 - Production
Et voilà :
C:\>sqlplus /nolog SQL*Plus: Release 10.2.0.2.0 Production on Mer. Avr. 10 14:47:20 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> connect / as sysdba; Connecté. SQL> startup; ORACLE instance started. Total System Global Area 143725064 bytes Fixed Size 451080 bytes Variable Size 109051904 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Base de données montée. Base de données ouverte. SQL>