Les pannes de base de données peuvent être extrêmement coûteuses pour les organisations axées sur les données, ce qui met votre entreprise à l’arrêt. L’une des causes les plus courantes de pannes de base de données est la corruption des blocs de données. Dans cet article, nous allons discuter de la façon dont vous pouvez détecter et réparer le problème de corruption de bloc au sein de votre base de données Oracle.

Qu’est-ce qu’une corruption de bloc de données ?

Des corruptions de blocs de données se produisent chaque fois que les données ne sont pas dans leur état attendu. Le bloc peut avoir un contenu qui n’est pas cohérent en interne, ou il peut avoir été modifié pour être méconnaissable dans le cadre du format de base de données Oracle.

Certaines corruptions de blocs de données sont relativement mineures, n’affectant qu’un seul bloc. D’autres corrompent une partie importante de la base de données, la rendant inutilisable et entraînant la perte d’informations critiques.

Pourquoi des corruptions de blocs de données se produisent-elles ?

Des corruptions de blocs de données peuvent se produire chaque fois que des données sont modifiées et peuvent être retracées à la fois à des problèmes matériels et logiciels. Des problèmes avec l’un ou l’ensemble des composants suivants peuvent entraîner des corruptions de blocs de données:

  • Disque dur
  • Contrôleur de disque
  • Système d’exploitation
  • Réseau de stockage (SAN)
  • Périphérique de stockage

Comment pouvez-vous empêcher les corruptions de blocs de données?

Les corruptions de blocs de données sont difficiles à prévenir car elles sont intrinsèquement imprévisibles. En effet, les corruptions sont inévitables dans les environnements de base de données très complexes d’aujourd’hui.

Cependant, vous pouvez toujours travailler pour atténuer les effets des corruptions de blocs de données avec une stratégie de sauvegarde et de récupération robuste. Oracle fournit une variété d’outils et de solutions à ces fins, notamment:

  • Oracle Data Guard : Protège les bases de données d’entreprise en cas de catastrophe ou de corruption.
  • Conseiller en récupération de données: Diagnostique la perte ou la corruption de données et effectue les réparations.
  • Oracle Flashback : Restaure les tables ou lignes de base de données à un état antérieur.
  • Oracle Recovery Manager : Sauvegarde et récupère les bases de données Oracle.
  • Sauvegarde sécurisée Oracle : Sauvegarde les données du système de fichiers et les fichiers de base de données Oracle sur bande.

Comment détectez-vous et surveillez-vous la corruption des blocs de données?

Malgré tous vos efforts, la corruption des blocs de données peut survenir à tout moment. Heureusement, Oracle peut détecter et réparer de multiples façons la corruption de blocs de données:

  • Gestionnaire de récupération Oracle (RMAN)
  • DBVerify
  • Commande d’ANALYSE
  • Paramètre DB_BLOCK_CHECKING
  • Récupération de support de bloc (BMR)
  • DBMS_REPAIR

Gestionnaire de récupération Oracle (RMAN)

Pour vérifier la corruption physique et logique d’une base de données, exécutez la commande suivante dans Oracle RMAN:

  • SAUVEGARDE VALIDER VÉRIFIER LA BASE DE DONNÉES LOGIQUE ARCHIVER TOUT;

La commande VALIDATE dans Oracle RMAN peut être utilisée pour valider des fichiers, des espaces de table et même des bases de données entières. Exemple:

  • VALIDER LE FICHIER DE DONNÉES ‘/u01/oradata/ORCL/system01.dbf’;
  • VALIDER les utilisateurs d’ESPACE DE TABLE;
  • VALIDER LA BASE DE DONNÉES;

Si Oracle RMAN détecte des corruptions de blocs de données, elles seront affichées dans la vue VDATABDATABASE_BLOCK_CORRUPTION.

DBVerify

DBVerify est un utilitaire de ligne de commande externe permettant de valider des bases de données et des fichiers en ligne et hors ligne, y compris des sauvegardes. L’exemple ci-dessous illustre l’utilisation de la commande dbv:

  • fichier dbv = /u01/oradata/ORACL/system01.rétroaction dbf = 10000 taille de bloc=8192

Notez que vous ne pouvez pas utiliser DBVerify pour les fichiers de contrôle Oracle ou rétablir les journaux.

Commande ANALYZE

Vous pouvez utiliser la construction de STRUCTURE ANALYZE…VALIDATE pour vérifier les blocs de données d’un objet. Une fois l’analyse terminée, vérifiez la table INVALID_ROWS pour voir les données corrompues.

Pour créer d’abord la table INVALID_ROWS, exécutez la commande suivante dans SQL:

  • @$ ORACLE_HOME/SGBDR/admin/UTLVALID.SQL

Deuxièmement, validez la structure de table et d’index avec la commande suivante:

  • ANALYSER LE TABLEAU scott.CASCADE DE STRUCTURE DE VALIDATION emp;

Paramètre DB_BLOCK_CHECKING

En définissant le paramètre DB_BLOCK_CHECKING sur, vous pouvez demander à Oracle de vérifier l’auto-cohérence des blocs de base de données. Notez que cela peut ajouter jusqu’à 10% de surcharge au serveur, utilisez donc cette option uniquement si les performances ne sont pas d’une grande importance.

Block media recovery (BMR)

Block media recovery (BMR) vous permet de récupérer un ou plusieurs blocs de données sans affecter le fichier dans son ensemble. En conséquence, vous bénéficierez d’un temps moyen de réparation inférieur (MTTR) et d’une disponibilité plus élevée, car il vous suffit de déconnecter les blocs affectés.

Cette tactique est utile lorsqu’un nombre limité de blocs de données ont été corrompus. Vous pouvez effectuer BMR uniquement dans Oracle RMAN à l’aide de la commande BLOCKRECOVER.

DBMS_REPAIR

Le package DBMS_REPAIR d’Oracle peut à la fois détecter et réparer la corruption. Pour ce faire, vous devez d’abord créer deux tables d’administration. Ces tables contiendront une liste de blocs corrompus et les clés d’index pointant vers ces blocs:

COMMENCEZ

DBMS_REPAIR.admin_tables(

table_name=> ‘REPAIR_TABLE’,

table_type= >DBMS_REPAIR.repair_table,

action=>DBMS_REPAIR.create_action,

tablespace= > ‘USERS’);

DBMS_REPAIR.admin_tables(

table_name=> ‘ORPHAN_KEY_TABLE’,

table_type=>DBMS_REPAIR.orphan_table,

action=>DBMS_REPAIR.create_action,

tablespace= > ‘USERS’);

END;

La deuxième étape consiste à utiliser la procédure CHECK_OBJECT pour examiner la table:

DÉFINIR SERVEROUTPUT SUR

DÉCLARER

v_num_corrupt INT;

COMMENCER

v_num_corrupt := 0;

DBMS_REPAIR.check_object(

schema_name=> ‘SCOTT’,

object_name=> ‘DEPT’,

repair_table_name=> ‘REPAIR_TABLE’,

corrupt_count= > v_num_corrupt);

SORTIE DBMS_.put_line(‘number corrupt:| // TO_CHAR(v_num_corrupt));

END;

Ensuite, utilisez la procédure FIX_CORRUPT_BLOCKS pour marquer les blocs corrompus:

DÉFINIR SERVEROUTPUT SUR

DÉCLARER

v_num_fix INT;

COMMENCER

v_num_fix := 0;

DBMS_REPAIR.fix_corrupt_blocks(

schema_name= > ‘SCOTT’,

object_name= > ‘DEPT’,

object_type= >Dbms_Repair.table_object,

repair_table_name= > ‘REPAIR_TABLE’,

fix_count= > v_num_fix);

DBMS_OUTPUT.put_line(‘num fix:| // TO_CHAR(v_num_fix));

END;

L’étape suivante consiste à rechercher les clés orphelines, qui sont des entrées de clé qui pointent vers un bloc de données corrompu:

DÉFINIR SERVEROUTPUT SUR

DÉCLARER

v_num_orphans INT;

COMMENCER

v_num_orphans := 0;

DBMS_REPAIR.dump_orphan_keys(

schema_name= > ‘SCOTT’,

object_name= > ‘PK_DEPT’,

object_type= >DBMS_REPAIR.index_object,

repair_table_name= > ‘REPAIR_TABLE’,

orphan_table_name= > ‘ORPHAN_KEY_TABLE’,

key_count=> v_num_orphans);

DBMS_OUTPUT.put_line(‘nombre de clés orphelines:| // TO_CHAR(v_num_orphans));

END;

S’il y a 1 ou plusieurs clés orphelines, vous devez reconstruire l’index de la base de données avec la procédure REBUILD_FREELISTS:

BEGIN

DBMS_REPAIR.si vous avez un problème, vous pouvez le faire en utilisant le code de configuration ci-dessous, puis en utilisant le code de configuration ci-dessous.table_object);

END;

Enfin, utilisez la procédure SKIP_CORRUPT_BLOCKS pour vous assurer que les blocs corrompus sont ignorés pendant les requêtes :

BEGIN

DBMS_REPAIR.si vous avez un problème, vous pouvez le faire en utilisant le code de configuration ci-dessous, puis en utilisant le code de configuration ci-dessous.table_object,

flags= >DBMS_REPAIR.skip_flag);

FIN;

Conclusion

Bien que la corruption de blocs de données soit un fait malheureux, Oracle dispose d’une suite d’outils mature et étendue pour protéger et récupérer les données de votre entreprise. L’utilisation de logiciels tels qu’Oracle Data Guard et Oracle RMAN, ainsi que la vérification régulière de la corruption, vous aideront à contrer le problème de la corruption des blocs de données.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.