der er to typer korruption.
a. fysisk korruption: dette sker generelt på grund af mediekorruption. I dette tilfælde,blok er ugyldig checksum.it maj indeholder nul. Dette er generelt resultatet af infrastrukturproblemer som medier,netværk ,hukommelse.
RMAN block recover kan bruges til at fjerne fysisk korruption
vi ser fejlen ORA-01578: ORACLE data block ødelagt i alarm log når oracle registrerer fysisk korruption. Oracle opdage korruption ved at kontrollere blok header og blok sidefod.
b. logisk korruption: dette sker, når oracle finder blokhoved og sidefod godt, men det finder intern konsistens i blokken. Generelt sker det på grund af nogle fejl i Oracle-programmet. Når oracle registrerer det, kaster det fejlen i alert log.
ORA – 08103-denne fejl er en logisk korruptionsfejl for en bestemt datablok.
ORA – 00600-denne fejl er relateret til blok korruption , og opstår på grund af en højere SCN end af database SCN.
Sådan kontrolleres databasekorruption
Databasekorruption kan findes ved hjælp af nedenstående metode
a. RMAN
c. kontrol af alarmlog for mulig forekomst
c. dbverify
d. eksport
e. analyser kommando
RMAN
kør under kommando
RMAN> backup validate check logical database;
“CHECK logisk” mulighed bruges til at identificere både fysiske og logiske blok korruption.
vi kan bruge nedenstående kommando, hvis vi vil kontrollere selektivt
BACKUP VALIDATE DATAFILE 1;BACKUP VALIDATE check logical DATAFILE 1;BACKUP VALIDATE TABLESPACE TOOLS;BACKUP VALIDATE check logical TABLESPACE TOOLS;BACKUP VALIDATE BACKUPSET 1;BACKUP VALIDATE CURRENT CONTROLFILE;
Vælg visningen for at identificere de beskadigede blokke, der er registreret af RMAN.
SQL> select * from v$database_block_corruption;For each row, find the segment impactedSQL> SELECT TABLESPACE_NAME, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE FROM DBA_EXTENTS WHERE FILE_ID=&FILE_ID AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
Bemærk, Efter at en korrupt blok er repareret, slettes rækken, der identificerer blokken, fra visningen.
kontrol alert log for mulig forekomst
Check alert. logfil for beskadigede blokke, datafil liste.
For ex:- ORA-01578: ORACLE data block corrupted (file # 11, block # 45)ORA-01110: data file 5: '/xyz/db01.dbf'
dbverify
du kan også bruge dbverify værktøj til at identificere fysiske og logiske intra blok korruption.
dbv file=datafile_name blocksize=datafile_block_size
du kan bruge nedenstående kommando til at generere DBV-kommandoen for alle datafiler
sqlplus /nologconnect / as sysdbaset feedback offset head offset echo offset linesize 200set pagesize 2500spool /tmp/dbvlogs/dbvchk.shselect 'dbv file=' || name || ' blocksize='|| block_size || ' logfile=' ||substr(name, instr(name, '/', -1, 1) +1) ||'.' || file# || '.log' from v$datafile/spool off
i tilfælde af rå enhed
select 'dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||' logfile='||substr (name, instr (name, '/', -1, 1) + 1)||'.'||file#||'.log'from v$datafile;
i tilfælde af ASM-lagring
select 'dbv file=' || name || ' blocksize='|| block_size || ' USERID=sys/&SYS_PASSWORD logfile=' ||substr(name, instr(name, '/', -1, 1) +1) ||'.' || file# || '.log' from v$datafile/
eksport
brug af eksport af tabel eller skema vil også finde korruptionen i tabellen eller skemaet
men den store begrænsning med eksport er, at den mislykkes umiddelbart efter at have stødt på den første korruption., så komplet billede vil blive savnet.
analyser kommando
analyser er blevet omtalt som det bedste værktøj, der udfører maksimal kontrol.
dette er det nemme værktøj til at kontrollere de korruptioner, der er forbundet med indeks på nogen måde.
for at kontrollere korruptionen med en tabel skal du gøre følgende:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE;
for at kontrollere korruptionen med et indeks skal du gøre følgende:
ANALYZE INDEX <OWNER.INDEX_NAME> VALIDATE STRUCTURE;
for at kontrollere korruptionen med tabellen og dens indeks(R) for at udføre krydsreferencekontrollen skal du gøre følgende:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE;
for partitionstabeller skal vi bruge analyser kommando med in INVALID_FINDER mulighed, svarende til følgende:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE INTO INVALID_ROWS;
sådan rettes korruptionen
a. Brug af blockrecover RMAN kommando
med Blokgendannelse er kun de blokke, der gendannes, ikke tilgængelige, rest datafil er tilgængelig
RMAN >blockrecover datafil 10 blok 1688
RMAN > BLOCKRECOVER KORRUPTIONSLISTE Gendan indtil tiden ‘SYSDATE– 7’;
b. brug af datafile recovery fra backup eller standby (hvis du har)
c. komplet database recovery
d. hvis det kun er indekskorruption, kan vi droppe indekset og genskabe det
e. vi kan bruge dbms_repair. Det vil ikke rette den korrupte blok, men det vil markere den blok som spring over, og du vil ikke kontrollere den blok nu og fremefter