Databasavbrott kan vara oerhört kostsamt för datadrivna organisationer, vilket gör att ditt företag stannar nära. En av de vanligaste orsakerna till databasavbrott är korruption av datablock. I den här artikeln diskuterar vi hur du kan upptäcka och reparera problemet med blockkorruption i din Oracle-databas.

vad är ett datablock korruption?

datablockkorruptioner uppstår när data inte är i sitt förväntade tillstånd. Blocket kan ha innehåll som inte är internt konsekvent, eller det kan ha ändrats för att vara oigenkännlig som en del av Oracle databasformat.

vissa datablockförstöringar är relativt små och påverkar endast ett enda block. Andra korrumperar en betydande del av databasen, vilket gör den oanvändbar och leder till förlust av kritisk information.

varför uppstår datablockförstöringar?

datablockskador kan inträffa när som helst som data ändras och kan spåras tillbaka till både hårdvaru-och programvaruproblem. Problem med någon eller alla av följande komponenter kan leda till datablockskador:

  • hårddisk
  • Disk controller
  • operativsystem
  • Storage area network (SAN)
  • lagringsenhet

hur kan du förhindra datablock korruption?

datablockskador är svåra att förhindra eftersom de i sig är oförutsägbara. Faktum är att korruption är oundvikliga i dagens mycket komplexa databasmiljöer.

du kan dock fortfarande arbeta för att mildra effekterna av datablockskador med en robust säkerhetskopierings-och återställningsstrategi. Oracle tillhandahåller en mängd olika verktyg och lösningar för dessa ändamål, inklusive:

  • Oracle Data Guard: skyddar företagsdatabaser i händelse av katastrof eller korruption.
  • Data Recovery Advisor: diagnostiserar dataförlust eller korruption och utför reparationer.
  • Oracle Flashback: återställer databastabeller eller rader till ett tidigare tillstånd.
  • Oracle Recovery Manager: säkerhetskopierar och återställer Oracle-databaser.
  • Oracle Secure Backup: säkerhetskopierar filsystemdata och Oracle-databasfiler till band.

Hur upptäcker och övervakar du korruption av datablock?

trots dina bästa ansträngningar kan datablockkorruption inträffa när som helst. Lyckligtvis finns det flera sätt att Oracle kan upptäcka och reparera korruption av datablock:

  • Oracle Recovery Manager (RMAN)
  • DBVerify
  • analysera kommandot
  • db_block_checking parameter
  • Block media recovery (BMR)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

för att kontrollera en databas för fysisk och logisk korruption, kör följande kommando i Oracle rman:

  • BACKUP validera kontrollera logisk databas ARCHIVELOG alla;

kommandot validera i Oracle RMAN kan användas för att validera filer, tabellutrymmen och till och med hela databaser. Exempelvis:

  • validera datafil ’ / u01/oradata/ORCL / system01.dbf’;
  • validera TABELLUTRYMMESANVÄNDARE;
  • validera databas;

om Oracle RMAN upptäcker några datablockförstöringar visas de i v$DATABASE_BLOCK_CORRUPTION-vyn.

DBVerify

DBVerify är en extern kommandorad verktyg för att validera online och offline databaser och filer, inklusive säkerhetskopior. Exemplet nedan visar användningen av DBV-kommandot:

  • dbv fil= / u01/oradata/ORACL / system01.DBF feedback=10000 blockstorlek=8192

Observera att du inte kan använda Dbverify för Oracle-kontrollfiler eller göra om loggar.

kommandot analysera

du kan använda konstruktionen analysera… validera struktur för att verifiera datablocken i ett objekt. När analysen är klar, kontrollera INVALID_ROWS-tabellen för att se de skadade data.

för att först skapa tabellen INVALID_ROWS, kör följande kommando i SQL:

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

för det andra, validera tabellen och indexstrukturen med följande kommando:

  • analysera tabell scott.emp validera struktur kaskad;

db_block_checking parameter

genom att ställa in db_block_checking parameter till, kan du ha Oracle check databasblock för självkonsistens. Observera att detta kan lägga till upp till 10 procent overhead till servern, så använd bara det här alternativet om prestanda inte är av stor betydelse.

Block media recovery (BMR)

Block media recovery (BMR) låter dig återställa ett eller flera datablock utan att påverka filen som helhet. Som ett resultat kommer du att uppleva en lägre mean time to repair (MTTR) och njuta av högre tillgänglighet, eftersom du bara behöver ta de drabbade blocken offline.

denna taktik är användbar när endast ett begränsat antal datablock har skadats. Du kan bara utföra BMR inom Oracle RMAN med kommandot BLOCKRECOVER.

DBMS_REPAIR

Oracles dbms_repair-paket kan både upptäcka och reparera korruption. För att göra det måste du först skapa två administrationstabeller. Dessa tabeller kommer att innehålla en lista med korrupta block, och indextangenterna pekar på dessa block:

börja

DBMS_REPAIR.admin_tables (

table_name => ’REPAIR_TABLE’,

table_type => DBMS_REPAIR.repair_table,

åtgärd => DBMS_REPAIR.create_action,

tablespace => ’användare’);

DBMS_REPAIR.admin_tables (

table_name => ’ORPHAN_KEY_TABLE’,

table_type => DBMS_REPAIR.orphan_table,

action = > DBMS_REPAIR.create_action,

tablespace =>’användare’);

END;

det andra steget är att använda CHECK_OBJECT-proceduren för att undersöka tabellen:

Ställ SERVEROUTPUT på

deklarera

v_num_corrupt INT;

börja

v_num_corrupt := 0;

DBMS_REPAIR.check_object (

schemanamn => ’SCOTT’,

object_name => ’avd’,

repair_table_name => ’REPAIR_TABLE’,

corrupt_count => v_num_corrupt);

dbms_output.put_line (’number corrupt: | / / TO_CHAR (v_num_corrupt));

END;

använd sedan FIX_CORRUPT_BLOCKS-proceduren för att markera de skadade blocken:

Ställ SERVEROUTPUT på

deklarera

v_num_fix INT;

börja

v_num_fix := 0;

DBMS_REPAIR.fix_corrupt_blocks (

schemanamn => ’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;

nästa steg är att söka efter föräldralösa nycklar, som är nyckelposter som pekar på ett korrupt datablock:

Ställ SERVEROUTPUT på

deklarera

v_num_orfans INT;

börja

v_num_orfans := 0;

DBMS_REPAIR.dump_orphan_keys (

schemanamn => ’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_orfans);

DBMS_OUTPUT.put_line (’orphan key count:’ | | TO_CHAR(v_num_orfans));

END;

om det finns 1 eller fler orphan-nycklar måste du bygga om databasindexet med REBUILD_FREELISTS-proceduren:

börja

DBMS_REPAIR.rebuild_freelists (

schemanamn => ’SCOTT’,

object_name => ’DEPT’,

object_type => DBMS_REPAIR.table_object);

END;

använd slutligen SKIP_CORRUPT_BLOCKS-proceduren för att säkerställa att de korrupta blocken hoppas över under frågor:

börja

DBMS_REPAIR.skip_corrupt_blocks (

schemanamn => ’SCOTT’,

object_name => ’DEPT’,

object_type => DBMS_REPAIR.table_object,

flaggor => DBMS_REPAIR.skip_flag);

slut;

slutsats

medan datablockkorruption är ett olyckligt faktum i livet, har Oracle en mogen, omfattande uppsättning verktyg för att skydda och återställa dina företagsdata. Att använda programvara som Oracle Data Guard och Oracle RMAN, liksom att utföra regelbundna korruptionskontroller, hjälper dig att motverka problemet med korruption av datablock.

Lämna ett svar

Din e-postadress kommer inte publiceras.