Databaseavbrudd kan være enormt kostbart for datadrevne organisasjoner, og bringer virksomheten din til en nær stillstand. En av de vanligste årsakene til databasestans er data blokk korrupsjon. I denne artikkelen diskuterer vi hvordan Du kan oppdage og reparere problemet med blokkkorrupsjon i Oracle-databasen.

Hva er en data block korrupsjon?

data block corruptions oppstår når data ikke er i forventet tilstand. Blokken kan ha innhold som ikke er internt konsistent, eller det kan ha blitt endret for å være ugjenkjennelig som en del Av Oracle-Databaseformatet.

noen data blokk korrupsjon er relativt små, påvirker bare en enkelt blokk. Andre korrumperer en betydelig del av databasen, gjør den ubrukelig og fører til tap av kritisk informasjon.

hvorfor oppstår data blokk korrupsjon?

data blokk korrupsjon kan oppstå når som helst at data endres, og kan spores tilbake til både maskinvare og programvare problemer. Problemer med noen eller alle av følgende komponenter kan resultere i data blokk korrupsjon:

  • Harddisk
  • Diskkontroller
  • Operativsystem
  • Storage area network (SAN)
  • Lagringsenhet

hvordan kan du forhindre ødeleggelse av datablokker?

data blokk korrupsjon er vanskelig å hindre fordi de er iboende uforutsigbar. Faktisk er korrupsjon uunngåelig i dagens svært komplekse databasemiljøer.

du kan imidlertid fortsatt arbeide for å redusere virkningene av data blokk korrupsjon med en robust backup og gjenoppretting strategi. Oracle tilbyr en rekke verktøy og løsninger for disse formålene, inkludert:

  • Oracle Data Guard: Beskytter bedriftsdatabaser i tilfelle katastrofe eller korrupsjon.
  • Data Recovery Advisor: Diagnostiserer tap av data eller korrupsjon og utfører reparasjoner.
  • Oracle Flashback: Gjenoppretter databasetabeller eller rader til en tidligere tilstand.
  • Oracle Recovery Manager: Sikkerhetskopierer Og gjenoppretter oracle-databaser.
  • Oracle Secure Backup: Sikkerhetskopierer filsystemdata og Oracle-Databasefiler for å tape.

hvordan kan du oppdage og overvåke data blokk korrupsjon?

til tross for din beste innsats, kan data blokk korrupsjon oppstå når som helst. Heldigvis er Det flere måter Oracle kan oppdage og reparere data blokk korrupsjon:

  • Oracle Recovery Manager (RMAN)
  • DBVERIFY
  • ANALYSER kommando
  • db_block_checking parameter
  • Blokker mediegjenoppretting (BMR)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

for å sjekke en database for fysisk og logisk korrupsjon, kjør følgende kommando I Oracle Rman:

  • BACKUP VALIDERE SJEKK LOGISK DATABASE ARKIVLOGG ALLE;

VALIDER kommandoen I Oracle RMAN kan brukes til å validere filer, tabellområder og til og med hele databaser. Eksempelvis:

  • VALIDER DATAFILEN ‘ / u01 / oradata/ORCL / system01.DBF’;
  • VALIDERE TABELLPLASS brukere;
  • VALIDERE DATABASE;

Hvis Oracle RMAN oppdager noen data blokk korrupsjon, vil de bli vist I v$DATABASE_BLOCK_CORRUPTION visning.

DBVerify

DBVerify er et eksternt kommandolinjeverktøy for validering av online og offline databaser og filer, inkludert sikkerhetskopier. Eksemplet nedenfor viser bruken av dbv-kommandoen:

  • dbv fil= / u01 / oradata / ORACL / system01.dbf tilbakemelding=10000 blokkstørrelse=8192

Vær oppmerksom på at Du ikke kan bruke DBVerify For oracle-kontrollfiler eller gjenta logger.

ANALYSER-kommandoen

DU kan bruke STRUKTURKONSTRUKSJONEN ANALYSER… VALIDER TIL å kontrollere datablokkene i et objekt. Når analysen er fullført, sjekk INVALID_ROWS tabellen for å se de ødelagte dataene.

for å først opprette INVALID_ROWS-tabellen, kjør følgende kommando i SQL:

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

for det andre, valider tabellen og indeksstrukturen med følgende kommando:

  • ANALYSER tabell scott.emp VALIDERE STRUKTUR CASCADE;

db_block_checking parameter

ved å sette parameteren db_block_checking til, Kan Du få Oracle til å sjekke databaseblokker for selvkonsistens. Merk at dette kan legge opp til 10 prosent overhead til serveren, så bruk bare dette alternativet hvis ytelsen ikke er av stor betydning.

Block media recovery (BMR)

Block media recovery (BMR) lar deg gjenopprette en eller flere datablokker uten å påvirke filen som helhet. Som et resultat, vil du oppleve en lavere mean time to repair (MTTR) og nyte høyere tilgjengelighet, siden du bare trenger å ta de berørte blokkene offline.

denne taktikken er nyttig når bare et begrenset antall datablokker er skadet. DU kan bare utføre BMR i Oracle RMAN ved hjelp AV BLOCKRECOVER-kommandoen.

DBMS_REPAIR

Oracles dbms_repair-pakke kan både oppdage og reparere korrupsjon. For å gjøre dette må du først opprette to administrasjonstabeller. Disse tabellene vil inneholde en liste over korrupte blokker, og indeksnøkler som peker til disse blokkene:

BEGYNN

DBMS_REPAIR.admin_tables (

table_name = >’REPAIR_TABLE’,

table_type => DBMS_REPAIR.repair_table,

handling = > DBMS_REPAIR.create_action,

tabspace = > ‘BRUKERE’);

DBMS_REPAIR.admin_tables (

table_name = >’ORPHAN_KEY_TABLE’,

table_type => DBMS_REPAIR.orphan_table,

handling = > DBMS_REPAIR.create_action,

tabspace => ‘BRUKERE’);

END;

det andre trinnet er Å bruke CHECK_OBJECT-prosedyren til å undersøke tabellen:

ANGI SERVEROUTPUT PÅ

DEKLARERE

v_num_corrupt INT;

BEGYNN

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;

bruk DERETTER FIX_CORRUPT_BLOCKS-prosedyren for å markere de ødelagte blokkene:

ANGI SERVEROUTPUT PÅ

DEKLARERE

v_num_fix INT;

BEGYNN

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;

Det neste trinnet er å se etter foreldreløse nøkler, som er nøkkeloppføringer som peker på en korrupt datablokk:

ANGI SERVEROUTPUT PÅ

DEKLARERE

v_num_orphans INT;

BEGYNN

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_TABLE_NAME => DBMS_OUTPUT.put_line (‘orphan key count:’ | | to_char (v_num_orphans));

END;

hvis det er 1 eller flere foreldreløse nøkler, må du gjenoppbygge databaseindeksen med REBUILD_FREELISTS-prosedyren:

BEGIN

DBMS_REPAIR.rebuild_freelists (

schema_name = > ‘SCOTT’,

object_name => ‘DEPT’,

object_type => DBMS_REPAIR.table_object);

END;

bruk TIL SLUTT SKIP_CORRUPT_BLOCKS-prosedyren for å sikre at de korrupte blokkene hoppes over under spørringer:

BEGIN

DBMS_REPAIR.skip_corrupt_blocks (

schema_name = > ‘SCOTT’,

object_name = >’DEPT’,

object_type => DBMS_REPAIR.table_object,

flagg = > DBMS_REPAIR.skip_flag);

SLUTT;

Konklusjon

selv om korrupsjon av datablokker er et uheldig faktum i Livet, Har Oracle en moden, omfattende pakke med verktøy for å beskytte og gjenopprette bedriftsdataene dine. Bruk av programvare Som Oracle Data Guard og Oracle RMAN, samt å utføre regelmessige korrupsjonskontroller, vil hjelpe deg med å motvirke problemet med datablokkkorrupsjon.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.