Databaseafbrydelser kan være enormt dyre for datadrevne organisationer, hvilket bringer din virksomhed til en næsten stilstand. En af de mest almindelige årsager til databaseafbrydelser er data blok korruption. I denne artikel vil vi diskutere, hvordan du kan opdage og reparere problemet med blokkorruption i din Oracle-database.

Hvad er en data blok korruption?

data blok korruption opstår, når data ikke er i sin forventede tilstand. Blokken kan have indhold, der ikke er internt konsistent, eller det kan være blevet ændret for at være uigenkendeligt som en del af Oracle-Databaseformatet.

nogle data blok korruption er relativt små, påvirker kun en enkelt blok. Andre ødelægger en betydelig del af databasen, hvilket gør den ubrugelig og fører til tab af kritisk information.

hvorfor opstår data blok korruption?

data blok korruption kan forekomme når som helst, at data ændres, og kan spores tilbage til både maskinel og programmel problemer. Problemer med en eller alle af følgende komponenter kan resultere i data blok korruption:

  • harddisk
  • Disk controller
  • operativsystem
  • lagringsområde netværk (SAN)
  • lagerenhed

Hvordan kan du forhindre data blok korruption?

data block corruptions er vanskelige at forhindre, fordi de i sagens natur er uforudsigelige. Faktisk er korruption uundgåelig i nutidens meget komplekse databasemiljøer.

du kan dog stadig arbejde for at afbøde virkningerne af data blok korruption med en robust backup og recovery strategi. Oracle leverer en række værktøjer og løsninger til disse formål, herunder:

  • Oracle Data Guard: beskytter virksomhedsdatabaser i tilfælde af katastrofe eller korruption.
  • Data Recovery Advisor: diagnosticerer datatab eller korruption og udfører reparationer.
  • Oracle Flashback: gendanner databasetabeller eller rækker til en tidligere tilstand.
  • Oracle Recovery Manager: sikkerhedskopierer og gendanner Oracle-databaser.
  • Oracle Secure Backup: sikkerhedskopierer filsystemdata og Oracle-databasefiler til tape.

Hvordan kan du opdage og overvåge data blok korruption?

på trods af din bedste indsats, kan data blok korruption forekomme til enhver tid. Heldigvis er der flere måder, som Oracle kan opdage og reparere data blok korruption:

  • Oracle Recovery Manager (RMAN)
  • DBVerify
  • analyser kommando
  • db_block_checking parameter
  • Block media recovery (BMR)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

for at kontrollere en database for fysisk og logisk korruption skal du køre følgende kommando inden for Oracle RMAN:

  • BACKUP valider CHECK logisk DATABASE ARCHIVELOG alle;

kommandoen valider i Oracle RMAN kan bruges til at validere filer, tablespaces og endda hele databaser. Eksempel:

  • valider datafil ‘ / u01/ordata/ORCL / system01.DBF’;
  • valider TABLESPACE brugere;
  • valider DATABASE;

hvis Oracle RMAN registrerer eventuelle data blok korruption, vil de blive vist i V$DATABASE_BLOCK_CORRUPTION visning.

DBVerify

DBVerify er et eksternt kommandolinjeværktøj til validering af online og offline databaser og filer, herunder sikkerhedskopier. Eksemplet nedenfor viser brugen af DBV-kommandoen:

  • DBV-fil= / u01 / oradata / ORACL / system01.DBF feedback=10000 blokstørrelse=8192

Bemærk, at du ikke kan bruge DBVerify til Oracle control-filer eller gentage logfiler.

analyser kommando

du kan bruge konstruktionen analyser… valider struktur til at verificere datablokkene i et objekt. Når analysen er afsluttet, skal du kontrollere tabellen ugyldige for at se de beskadigede data.

for først at oprette tabellen INVALID_RÆKKER skal du køre følgende kommando inden for:

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

for det andet skal du validere tabellen og indeksstrukturen med følgende kommando:

  • analyser tabel scott.EMP validere struktur kaskade;

db_block_checking parameter

ved at indstille db_block_checking parameter til , kan du have Oracle check database blokke for selv-konsistens. Bemærk, at dette kan tilføje op til 10 procent overhead til serveren, så brug kun denne indstilling, hvis ydeevne ikke er af stor betydning.

Block media recovery (BMR)

Block media recovery (BMR) giver dig mulighed for at gendanne en eller flere datablokke uden at påvirke filen som helhed. Som et resultat vil du opleve en lavere gennemsnitlig tid til reparation (MTTR) og nyde højere tilgængelighed, da du kun behøver at tage de berørte blokke offline.

denne taktik er nyttig, når kun et begrænset antal datablokke er blevet beskadiget. Du kan kun udføre BMR inden for Oracle RMAN ved hjælp af kommandoen BLOCKRECOVER.

DBMS_REPAIR

Oracle ‘ s dbms_repair-pakke kan både opdage og reparere korruption. For at gøre det skal du først oprette to administrationstabeller. Disse tabeller indeholder en liste over korrupte blokke, og indeksnøglerne peger på disse blokke:

begynd

DBMS_REPAIR.admin_tables (

table_name =>’REPAIR_TABLE’,

table_type => DBMS_REPAIR.repair_table,

handling = > DBMS_REPAIR.create_action,

tablespace => ‘brugere’);

DBMS_REPAIR.admin_tables (

table_name =>’ORPHAN_KEY_TABLE’,

table_type => DBMS_REPAIR.orphan_table,

handling = > DBMS_REPAIR.create_action,

tablespace = > ‘brugere’);

END;

det andet trin er at bruge CHECK_OBJECT-proceduren til at undersøge tabellen:

sæt SERVEROUTPUT på

erklære

v_num_corrupt INT;

begynd

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;

brug derefter proceduren RETT_CORRUPT_BLOCKS til at markere de beskadigede blokke:

sæt SERVEROUTPUT på

erklære

v_num_rettelse INT;

begynd

v_num_rettelse := 0;

DBMS_REPAIR.rett_corrupt_blocks (

schema_name = >’SCOTT’,

object_name =>’DEPT’,

object_type => Dbms_Repair.table_object,

repair_table_name = >’REPAIR_TABLE’,

repair_count => v_num_rettelse);

DBMS_OUTPUT.put_line (‘num rettelse: | / / TO_CHAR(v_num_rettelse));

END;

det næste trin er at kontrollere for forældreløse nøgler, som er nøgleposter, der peger på en korrupt datablok:

sæt SERVEROUTPUT på

erklære

v_num_orphans INT;

begynd

v_num_orphans := 0;

DBMS_REPAIR.dump_orphan_keys (

schema_name => ‘SCOTT’,

object_name => ‘PK_DEPT’,

object_type => DBMS_REPAIR.indeks_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;

hvis der er 1 eller flere orphan keys, skal du genopbygge databaseindekset med REBUILD_FREELISTS-proceduren:

begynd

DBMS_REPAIR.rebuild_freelists (

schema_name => ‘SCOTT’,

object_name => ‘DEPT’,

object_type => DBMS_REPAIR.table_object);

END;

endelig skal du bruge SKIP_CORRUPT_BLOCKS-proceduren for at sikre, at de korrupte blokke springes over under forespørgsler:

begynd

dbms_repair.skip_corrupt_blocks (

schema_name => ‘SCOTT’,

object_name => ‘DEPT’,

object_type => DBMS_REPAIR.table_object,

flag = > DBMS_REPAIR.skip_flag);

ende;

konklusion

mens datablokorruption er en uheldig kendsgerning, har Oracle en moden, bred vifte af værktøjer til at beskytte og gendanne dine virksomhedsdata. Ved hjælp af programmer som Oracle Data Guard og Oracle RMAN, samt udfører regelmæssige korruption kontrol, vil hjælpe dig med at modvirke spørgsmålet om data blok korruption.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.