Databaseonderbrekingen kunnen enorm kostbaar zijn voor gegevensgestuurde organisaties, waardoor uw bedrijf bijna tot stilstand komt. Een van de meest voorkomende oorzaken van database uitval is data block corruptie. In dit artikel bespreken we hoe u het probleem van blokcorruptie binnen uw Oracle-database kunt detecteren en repareren.

Wat is een data block corruptie?

corruptie van gegevensblokken treedt op wanneer gegevens niet in de verwachte staat zijn. Het blok kan inhoud bevatten die intern niet consistent is, of het kan zijn gewijzigd om onherkenbaar te zijn als onderdeel van het Oracle-Databaseformaat.

sommige corrupties in gegevensblokken zijn relatief gering en hebben slechts betrekking op een enkel blok. Anderen corrupt een aanzienlijk deel van de database, waardoor het onbruikbaar en leidt tot verlies van kritieke informatie.

waarom treden corrumpties van gegevensblokken op?

data block corrumpties kunnen optreden op elk moment dat gegevens worden gewijzigd, en kunnen worden getraceerd naar zowel hardware-als softwareproblemen. Problemen met een of alle van de volgende componenten kunnen leiden tot data block corrupties:

  • harde schijf
  • Disk controller
  • besturingssysteem
  • Storage area network (SAN)
  • Storage device

Hoe kunt u corruptie van gegevensblokken voorkomen?Corrumperaties in gegevensblokken zijn moeilijk te voorkomen omdat ze inherent onvoorspelbaar zijn. Inderdaad, corruptie zijn onvermijdelijk in de huidige zeer complexe database-omgevingen.

u kunt echter nog steeds werken om de effecten van gegevensblokkeringen te beperken met een robuuste back-up-en herstelstrategie. Oracle biedt een verscheidenheid aan tools en oplossingen voor deze doeleinden, waaronder:

  • Oracle Data Guard: beschermt bedrijfsdatabases in geval van rampen of corruptie.
  • Data Recovery Advisor: diagnosticeert gegevensverlies of-corruptie en voert reparaties uit.
  • Oracle Flashback: herstelt databasetabellen of-rijen naar een eerdere status.
  • Oracle Recovery Manager: maakt back-ups van Oracle-databases en herstelt deze.
  • Oracle Secure Backup: back-ups maken van bestandssysteem-gegevens en Oracle-Databasebestanden naar tape.

hoe detecteert en bewaakt u corruptie van gegevensblokken?

ondanks uw inspanningen kan corruptie van gegevensblokken op elk moment optreden. Gelukkig zijn er meerdere manieren waarop Oracle data block corruptie kan detecteren en repareren:

  • Oracle Recovery Manager (RMAN)
  • DBVerify
  • het ANALYSEREN van de opdracht
  • DB_BLOCK_CHECKING parameter
  • Blok media recovery (BMR)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

om Te controleren van een database voor de fysieke en logische corruptie, voer je het volgende commando binnen Oracle RMAN:

  • BACK-up VALIDEREN, CONTROLEREN LOGISCHE DATABASE ARCHIVELOG ALLE;

Het VALIDEREN van de opdracht in Oracle RMAN kan worden gebruikt voor het valideren van de bestanden, tablespaces, en zelfs hele databases. Bijvoorbeeld:

  • VALIDATE DATAFILE ‘/u01/oradata/ORCL / system01.dbf’;
  • TABLESPACE-gebruikers valideren;
  • DATABASE valideren;

als Oracle RMAN data block corruptions detecteert, worden deze weergegeven in de V$DATABASE_BLOCK_CORRUPTION weergave.

DBVerify

DBVerify is een extern commandoregelprogramma voor het valideren van online en offline databases en bestanden, inclusief back-ups. Het voorbeeld hieronder toont het gebruik van het DBV Commando:

  • dbv file=/U01/oradata/oracl/system01.dbf feedback = 10000 blocksize=8192

merk op dat u DBVerify niet kunt gebruiken voor Oracle control files of redo logs.

ANALYZE Commando

u kunt de STRUCTUURCONSTRUCTIE analyseren … valideren gebruiken om de gegevensblokken in een object te verifiëren. Zodra de analyse is voltooid, controleer de INVALID_ROWS tabel om de beschadigde gegevens te zien.

om eerst de INVALID_ROWS tabel aan te maken, voer je het volgende commando uit binnen SQL:

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

ten tweede, Valideer de tabel en index structuur met het volgende commando:

  • analyseer tafel scott.emp valideren structuur CASCADE;

db_block_checking parameter

door de db_block_checking parameter in te stellen op , kunt u Oracle databaseblokken laten controleren op zelfconsistentie. Merk op dat dit kan oplopen tot 10 procent overhead naar de server, dus gebruik deze optie alleen als de prestaties niet van groot belang is.

Block media recovery (BMR)

Block media recovery (BMR) Hiermee kunt u een of meer gegevensblokken herstellen zonder het bestand als geheel te beïnvloeden. Als gevolg hiervan ervaart u een lagere mean time to repair (MTTR) en geniet u van een hogere beschikbaarheid, omdat u alleen de betreffende blokken offline hoeft te halen.

deze tactiek is nuttig wanneer slechts een beperkt aantal gegevensblokken beschadigd zijn. U kunt BMR alleen uitvoeren binnen Oracle RMAN met de opdracht BLOCKRECOVER.

DBMS_REPAIR

het dbms_repair-pakket van Oracle kan zowel corruptie detecteren als herstellen. Om dit te doen, moet u eerst twee beheerstabellen maken. Deze tabellen bevatten een lijst met corrupte blokken en de indexsleutels die naar die blokken wijzen:

BEGIN

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;

de tweede stap is om de CHECK_OBJECT-procedure te gebruiken om de tabel te onderzoeken:

SERVEROUTPUT instellen op

DECLARE

v_num_corrupt int;

BEGIN

v_num_corrupt := 0;

DBMS_REPAIR.check_object (

schema_name = > ‘SCOTT’,

object_name = > ‘DEPT’,

repair_table_name =>’REPAIR_TABLE’,

corrupt_count => v_num_corrupt);

DBMS_OUTPUT.put_line (‘number corrupt:’ || TO_CHAR (v_num_corrupt));

END;

gebruik vervolgens de FIX_CORRUPT_BLOCKS procedure om de beschadigde blokken te markeren:

SERVEROUTPUT instellen op

DECLARE

v_num_fix int;

BEGIN

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;

de volgende stap is om te controleren op verweesde sleutels, die belangrijke items zijn die naar een corrupt gegevensblok wijzen:

SERVEROUTPUT instellen op

DECLARE

v_num_orfans INT;

BEGIN

v_num_orfans := 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 (‘orphan key count:’ / / TO_CHAR (v_num_orphans));

END;

als er 1 of meer orphan keys zijn, dan moet u de database index opnieuw opbouwen met de REBUILD_FREELISTS procedure:

BEGIN

DBMS_REPAIR.rebuild_freelists (

schema_name = > ‘SCOTT’,

object_name =>’DEPT’,

object_type => DBMS_REPAIR.table_object);

END;

ten slotte, gebruik de SKIP_CORRUPT_BLOCKS procedure om ervoor te zorgen dat de corrupte blokken worden overgeslagen tijdens queries:

BEGIN

DBMS_REPAIR.skip_corrupt_blocks (

schema_name = > ‘SCOTT’,

object_name =>’DEPT’,

object_type => DBMS_REPAIR.table_object,

flags = > DBMS_REPAIR.skip_flag);

einde;

conclusie

hoewel corruptie van gegevensblokken een ongelukkig feit is, heeft Oracle een volwassen, breed scala aan tools om uw bedrijfsgegevens te beschermen en te herstellen. Met behulp van software zoals Oracle Data Guard en Oracle RMAN, evenals het uitvoeren van regelmatige corruptiecontroles, helpt u het probleem van data block corruptie tegen te gaan.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.