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>

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.