Qu’est-ce que la Corruption de Bloc et Comment Pouvons-Nous Résoudre la Corruption de Bloc
Confidentialité et cookies
Des cookies sont utilisés sur ce site. Suite, vous acceptez leur utilisation. En savoir plus, y compris comment vérifier les cookies.
Dans le processus informatique quotidien, il existe de nombreuses causes possibles d’une corruption de bloc, notamment:
Avant de commencer à publier, permettez-moi de vous rappeler combien de corruptions nous avons have Il y a 2 types de corruptions. La corruption des données peut se manifester comme une corruption physique ou logique.
Définissons donc tous ceux-ci,
● La corruption physique d’un bloc se manifeste par une somme de contrôle ou un en-tête invalide, ou lorsque le bloc contient tous les zéros. Lorsque cela se produit, la base de données ne reconnaîtra pas le bloc comme un bloc Oracle valide, quel que soit son contenu. Les corruptions physiques (blocs corrompus par les médias) sont des blocs qui ont subi des dommages physiques évidents. Lorsque Oracle détecte une incohérence entre le CSN dans l’en-tête de bloc et le CSN dans le pied de page de bloc, ou que les structures d’en-tête et de pied de page attendues ne sont pas présentes ou sont mutilées, la session Oracle déclenche une exception lors de la lecture du bloc (ORA-01578 : bloc de données ORACLE corrompu corrupted). Une corruption physique est aussi appelée corruption médiatique.
● La corruption logique se produit lorsqu’un bloc de données a une somme de contrôle valide, etc., mais le contenu du bloc est logiquement incohérent. La corruption de blocs logiques peut également se produire lorsque la structure située sous le début du bloc (sous l’en-tête du bloc) est corrompue. Dans ce cas, la somme de contrôle des blocs est correcte mais les structures des blocs peuvent être corrompues. La corruption logique peut également résulter d’une écriture perdue.
Pour plus d’informations, consultez ma note de support Oracle 840978.1.
Alors ?? Quand pouvez-vous obtenir ces messages d’erreur? Vous n’avez peut–être pas reçu de message d’erreur pendant les blocs corrompus d’accès jusqu’à ce que les blocs liés à l’accès
– Table d’analyse.. Valider la structure
– Dbverify
– CTAS (Créer une table en tant que Sélection)
– Exporter
– Pendant le processus RMAN
Tous ces utilitaires de base de données sont remplis VDATABDATABASE_BLOCK_CORRUPTION lors de la détection de la corruption:
Comportement en 9i et 10g, la vue v viewdatabase_block_corruption utilisée pour être remplie uniquement lorsque la sauvegarde RMAN valide & la commande check logical validate a été exécutée.
Les informations renseignées utilisées pour être actualisées une fois la corruption réparée (récupération de support/Chute d’objet) et lors de la nouvelle exécution de la commande de validation logique Rman Backup validate/check sur la base de données ou le fichier de données affecté.
Avec 11g, ce comportement a changé.Lorsqu’un utilitaire ou un processus de base de données rencontre une corruption intrabloc, il l’enregistre automatiquement dans VDATABDATABASE_BLOCK_CORRUPTION.
La réparation supprime les métadonnées sur les blocs corrompus de la vue.
Vous pouvez identifier les objets contenant un bloc corrompu à l’aide d’une requête comme celle-ci
SELECT DISTINCT owner, segment_name FROM v$database_block_corruption dbc JOIN dba_extents e ON dbc.file# = e.file_id AND dbc.block# BETWEEN e.block_id and e.block_id+e.blocks-1 ORDER BY 1,2;
ou vous pouvez utiliser :
select * from V$DATABASE_BLOCK_CORRUPTION; << get file#&block from here
SELECT segment_type, segment_name
FROM dba_extents
WHERE file_id = 1
AND block_id < 3840
AND block_id + blocks >= 3840;
SEGMENT_TYPE SEGMENT_NAME
—————– —————————————-
INDEX I_SOURCE1
ou utiliser:
SELECT segment_type, segment_name
FROM dba_extents
WHERE file_id = 1
AND 3840 BETWEEN block_id AND block_id + blocks -1;
ou
select 'SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = ' || FILE# || ' and ' || BLOCK# || ' between block_id AND block_id + blocks – 1;' from v$database_block_corruption order by 1;
Les techniques de réparation comprennent:
– bloquer la récupération des supports,
– restaurer les fichiers de données, – Exporter & importer
– CRÉER une TABLE.. COMME commande de SÉLECTION.
N’oubliez pas que la récupération de support de bloc peut réparer les corruptions physiques, mais pas les corruptions logiques.
Vérification de la corruption de bloc avec la commande VALIDATE
Syntaxe pour la commande Rman Validate : –
Pour la base de données :
RMAN > Validate database;
Pour le Fichier de Données :
RMAN > Validate datafile <file no>,<file no> ;
Pour le bloc de données :
RMAN > Validate datafile <file no> block <Block no> ;
Les restaurations Archivelog pour la récupération de support de bloc (BMR) peuvent être exécutées en parallèle sur plusieurs canaux, mais les analyses de fichiers de données/backupset et la session de récupération doivent toutes s’exécuter dans la même session de serveur.
Pour permettre la sélection de la sauvegarde qui sera utilisée pour sélectionner les blocs souhaités, la commande block recover prend en charge les options utilisées dans la commande restore:
FROM BACKUPSET–> restore blocks from backupsets onlyFROM DATAFILECOPY–> restore blocks from datafile copies onlyFROM TAG–>restore blocks from tagged backupRESTORE UNTIL TIME|SCN|LOGSEQ
Donc, après avoir validé notre base de données, comment pouvons-nous récupérer les corruptions associées? Voici quelques exemples:
Récupération à l’aide d’un fichier / bloc explicite:
targetrman target/log=rman1.log
RMAN> blockrecover datafile 12 block 4207;
Récupération à l’aide de la liste de corruption :
$ rman target / log=rman1.log
RMAN> blockrecover corruption list;
L’approche clé pour détecter et prévenir les données corrompues consiste à appliquer les meilleures pratiques MAA suivantes.
• Utilisez Oracle Data Guard
Il y a trop de documents disponibles chez metalink qui sont des couvertures expliquant en profondeur le concept avec des exemples de corruptions. Donc, je suggère fortement de revoir les documents ci-dessous pendant que vous rencontrez des erreurs similaires sur votre système: