Vad är Blockkorruption och hur vi kan lösa Blockkorruption
sekretess och Cookies
Cookies används på denna webbplats. Fortsatt, du godkänner deras användning. Läs mer, inklusive hur du kontrollerar cookies.
i den dagliga IT-processen finns det många möjliga orsaker till en blockkorruption inklusive:
– OS-problem
– Oracle– problem
-återställning genom ”oåterkallelig” eller ”NOLOGGING” databasåtgärder (i vilket fall ORA-01578&ORA-01110 förväntas beteende)
innan du börjar posta, låt mig påminna dig om hur många korruptioner vi har… det finns 2 typer av korruptioner. Datakorruption kan manifestera sig som en fysisk eller en logisk korruption.
så låt oss definiera alla dessa,
fysisk korruption av ett block manifesterar sig som en ogiltig kontrollsumma eller rubrik, eller när blocket innehåller alla nollor. När det händer kommer databasen inte att känna igen blocket som ett giltigt Oracle-block, oavsett innehåll. Fysiska korruptioner (media korrupta block) är block som har lidit uppenbar fysisk skada. När Oracle upptäcker en inkonsekvens mellan CSN i blockhuvudet och CSN i blockfoten, eller de förväntade sidhuvud-och sidfotsstrukturerna inte finns eller är manglade, höjer Oracle-sessionen ett undantag vid läsning av blocket (ORA-01578: ORACLE data block corrupted…). En fysisk korruption kallas också en mediekorruption.
logisk korruption sker när ett datablock har en giltig kontrollsumma etc., men blockinnehållet är logiskt inkonsekvent. Logisk blockkorruption kan också uppstå när strukturen under blockets början (under blockhuvudet) är korrupt. I det här fallet är blockkontrollsumman korrekt men blockstrukturerna kan vara korrupta. Logisk korruption kan också bero på en förlorad skrivning.
mer information finns i min Oracle Support Note 840978.1.
så?? När kan du få dessa felmeddelanden? Du kanske inte fick felmeddelande under åtkomst skadade block tills åtkomstrelaterade block
– analysera tabell .. Validera struktur
– Dbverify
– CTAS(Skapa tabell som Välj)
– Export
– under rman-processen
alla dessa databasverktyg fylls i v$DATABASE_BLOCK_CORRUPTION om att upptäcka korruption:
beteende i 9i och 10g, vyn v$database_block_corruption används för att bara fyllas i när rman Backup validerar&kontrollera logisk validera kommandot kördes.
den befolkade informationen som används för att uppdateras endast när korruptionen reparerades (Media recovery/Object tappades) och vid återkörning av kommandot rman Backup validate /check logical validate i databasen eller den drabbade datafilen.
med 11g har detta beteende förändrats.När något databasverktyg eller en process stöter på en intrablockkorruption, registrerar den det automatiskt i v$DATABASE_BLOCK_CORRUPTION.
reparationen tar bort metadata om korrupta block från vyn.
du kan identifiera objekt som innehåller ett korrupt block med en fråga som denna
SELECT DISTINCT owner, segment_name FROM v$database_block_corruption dbc JOIN dba_extents e ON dbc.file# = e.file_id AND dbc.block# BETWEEN e.block_id and e.block_id+e.blocks-1 ORDER BY 1,2;
eller du kan använda :
select * from V$DATABASE_BLOCK_CORRUPTION; << get file#&block from here
SELECT segment_type, segment_name
FROM dba_extents
WHERE file_id = 1
AND block_id < 3840
AND block_id + blocks >= 3840;
SEGMENT_TYPE SEGMENT_NAME
—————– —————————————-
INDEX I_SOURCE1
eller använd:
SELECT segment_type, segment_name
FROM dba_extents
WHERE file_id = 1
AND 3840 BETWEEN block_id AND block_id + blocks -1;
eller
select 'SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = ' || FILE# || ' and ' || BLOCK# || ' between block_id AND block_id + blocks – 1;' from v$database_block_corruption order by 1;
reparation tekniker inkluderar:
– återställa datafiler,
– återställa med hjälp av inkrementella säkerhetskopieringar, och blockera newing,
– Export&import
– Skapa tabell .. Som välj kommando.
glöm inte, Block media recovery kan reparera fysiska skador, men inte logiska skador.
kontrollera efter Blockkorruption med validera kommandot
Syntax för rman validera kommandot: –
för Databas :
RMAN > Validate database;
för datafil :
RMAN > Validate datafile <file no>,<file no> ;
för datablock :
RMAN > Validate datafile <file no> block <Block no> ;
Archivelog återställer för Block Media Recovery (BMR) kan köras parallellt på flera kanaler, men datafil/backupset skanningar och återställningssessionen måste alla köras i samma serversession.
för att tillåta val av vilken säkerhetskopia som ska användas för att välja önskade block, stöder kommandot block recover alternativ som används i kommandot Återställ:
FROM BACKUPSET–> restore blocks from backupsets onlyFROM DATAFILECOPY–> restore blocks from datafile copies onlyFROM TAG–>restore blocks from tagged backupRESTORE UNTIL TIME|SCN|LOGSEQ
så, efter validera vår db än hur vi kan återställa relaterade korruption? Här är några exempel:
återställning med Explicit fil / Block:
$ rman target / log=rman1.logga
RMAN> blockrecover datafile 12 block 4207;
återställning med Korruptionslista :
$ rman target / log=rman1.log
RMAN> blockrecover corruption list;
den viktigaste metoden för att upptäcka och förebygga skadade data är att utföra följande Maa bästa praxis.
• Ställ in Oracle Database block corruption detection parameters
• implementera en backup-och återställningsstrategi med Recovery Manager (RMAN)
det finns för många dokument tillgängliga på metalink som täcker djupt förklara koncept med korruptions exempel. Så, jag föreslår starkt att granska nedan dokument medan du slår liknande fel på ditt system: