Datablock corruption (ORA-1110) avec une base en noarchivelog
Bonjour,
J'aimerai prendre conseils auprès de vous, on m'informe ce matin qu'il ya des corruption de blocs et que la base est en no archivelog, avec un backup à froid tous les 25 du mois .
SQL> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
5 387206 1 0 CHECKSUM
5 387324 1 0 FRACTURED
5 387356 1 0 CORRUPT
5 387325 3 0 NOLOGGING
5 387328 28 0 NOLOGGING
J'avais tenté de faire un :
Code:
RMAN> RECOVER DATAFILE 5 BLOCK 387206;
et
Code:
RMAN> RECOVER CORRUPTION LIST;
Mais ça n'a pas résolu le souci.
Après quelques recherches on me propose de supprimer et de créer un nouveau tablespace avec le même nom ou de faire DBMS_REPAIR :
J'ai lancé le DBMS_REPAIR.ADMIN_TABLES et DBMS_REPAIR.CHECK_OBJECT mais ils me retournent une erreur comme quoi le nom d'objet existe déjà à SYS.DBMS_SQL et à SYS.DBMS_REPAIR
(ORA-00955 et ORA-06512).
Code:
1 2 3 4 5 6 7 8
| BEGIN
DBMS_REPAIR.ADMIN_TABLES (
TABLE_NAME => 'REPAIR_TABLE',
TABLE_TYPE => dbms_repair.repair_table,
ACTION => dbms_repair.create_action,
TABLESPACE => 'MonTablespace');
END;
/ |
Datablock corruption avec une base en mode noarch
La table repair_table existe déjà et elle a été peuplée par la prmière éxécution
de la procedure dbms_repair.check_object il reste plus qu'à l'intérroger
Sinon, si le nombre de lignes dans les blocs ne sont pas trop importants, alors tu peux
créer une nouvelle table et y inserer les lignes non corrompus par les blocs en question
ensuite tu reconstruit les indexes .
A propos des corruptions data bloc, si la base est mode archivelog, et tu dispose des backups
à jour, tu peux les récuperer facilement en un seul commande RMAN .
Bonne chance