det finns två typer av korruption.
a. fysisk korruption: detta händer generellt på grund av mediekorruption. I det här fallet har blocket ogiltigt checksum.it maj innehåller noll. Detta är i allmänhet resultatet av infrastrukturproblem som media,nätverk ,minne.
rman block recover kan användas för att ta bort fysisk korruption
vi ser felet ORA-01578: ORACLE datablock skadad i varningsloggen när oracle upptäcker fysisk korruption. Oracle upptäcker korruption genom att kontrollera blockhuvudet och blockfoten.
b. logisk korruption: detta händer när oracle hittar blockhuvud och sidfot bra men det finner intern konsistens i blocket. Generellt händer det på grund av något fel i Oracle-programvaran. När oracle upptäcker det kastar det felet i varningsloggen.
ORA-08103-detta fel är ett logiskt korruptionsfel för ett visst datablock.
ORA-00600-det här felet är relaterat till blockkorruption och uppstår på grund av en högre SCN än databas SCN.
hur man kontrollerar databaskorruption
databaskorruption kan hittas med hjälp av nedanstående metod
a. RMAN
c. Kontrollera varningslogg för eventuell förekomst
c. dbverify
D. exportera
e. analysera kommando
rman
kör under kommandot
RMAN> backup validate check logical database;
”kontrollera logisk” alternativet används för att identifiera både fysiska och logiska Block korruption.
vi kan använda kommandot nedan om vi vill kontrollera 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älj vyn för att identifiera de skadade blocken som upptäckts av 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;
Observera att efter att ett korrupt block har reparerats raderas raden som identifierar blocket från vyn.
kontrollera varningslogg för eventuell förekomst
kontrollera varning. loggfil för skadade block, datafillista.
For ex:- ORA-01578: ORACLE data block corrupted (file # 11, block # 45)ORA-01110: data file 5: '/xyz/db01.dbf'
dbverify
du kan också använda dbverify verktyg för att identifiera fysiska och logiska Intra Block korruption.
dbv file=datafile_name blocksize=datafile_block_size
du kan använda kommandot nedan för att generera DBV-kommandot för alla 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
vid RAW-enhet
select 'dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||' logfile='||substr (name, instr (name, '/', -1, 1) + 1)||'.'||file#||'.log'from v$datafile;
vid 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/
exportera
med export av tabell eller schema hittar du också korruptionen i tabellen eller schemat
men den stora begränsningen med export är att den misslyckas omedelbart efter att ha stött på den första korruptionen., så fullständig bild kommer att saknas.
analysera kommando
analysera har kallats det bästa verktyget som utför maximala kontroller.
Detta är det enkla verktyget för att kontrollera korruptionerna i samband med index på något sätt.
för att kontrollera korruptionen med en tabell gör du följande:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE;
för att kontrollera korruptionen med ett index gör du följande:
ANALYZE INDEX <OWNER.INDEX_NAME> VALIDATE STRUCTURE;
för att kontrollera korruptionen med tabellen och dess index(er) för att utföra korsreferenskontrollerna gör du följande:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE;
för partitionstabeller måste vi använda analysera kommando med INTO INVALID_ROWS alternativ, liknande följande:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE INTO INVALID_ROWS;
hur man korrigerar korruptionen
a. Använda blockrecover rman kommando
med Block recover, bara blocken som återvinns är inte tillgängliga, rest datafile är tillgänglig
RMAN >blockrecover datafile 10 block 1688
RMAN > BLOCKRECOVER korruption lista återställa tills tiden ’SYSDATE– 7’;
b. använda datafilåterställning från backup eller standby (om du har)
c. komplett databasåterställning
d. om det bara är indexkorruption kan vi släppa indexet och återskapa det
e. vi kan använda DBMS_REPAIR. Det kommer inte att korrigera det korrupta blocket men det kommer att markera det blocket som hoppa över och du kommer inte att kontrollera det blocket nu och framåt