So identifizieren Sie korrupte Blöcke in der Oracle-Datenbank und korrigieren sie

Es gibt zwei Arten von Korruption.

a. Physische Korruption: Dies geschieht im Allgemeinen aufgrund von Medienkorruption. In diesem Fall hat Block ungültig checksum.it mai enthält Null. Dies ist im Allgemeinen das Ergebnis von Infrastrukturproblemen wie Medien, Netzwerk, Speicher.

RMAN Block recover kann verwendet werden, um physische Korruption zu entfernen

Wir sehen den Fehler ORA-01578: ORACLE-Datenblock im Warnprotokoll beschädigt, wenn Oracle physische Beschädigung erkennt. Oracle erkennt Beschädigungen, indem Sie die Blockkopfzeile und die Blockfußzeile überprüfen.

b. Logische Beschädigung: Dies geschieht, wenn Oracle Blockkopf- und -fußzeile gut findet, aber interne Konsistenz im Block findet. Im Allgemeinen geschieht dies aufgrund eines Fehlers in der Oracle-Software. Wenn Oracle dies erkennt, wird der Fehler im Warnungsprotokoll ausgegeben.

ORA-08103 – Dieser Fehler ist ein logischer Korruptionsfehler für einen bestimmten Datenblock.
ORA-00600 – Dieser Fehler hängt mit der Blockbeschädigung zusammen und tritt aufgrund eines höheren SCN als des Datenbank-SCN auf.

So überprüfen Sie die Datenbankbeschädigung

Datenbankbeschädigung kann mit der folgenden Methode gefunden werden

a. RMAN

c. Überprüfen des Warnprotokolls auf mögliches Auftreten

c. dbverify

d. Export

e. Befehl analysieren

RMAN

Führen Sie den folgenden Befehl aus

RMAN> backup validate check logical database;

“ Die Option „LOGISCH PRÜFEN“ wird verwendet, um sowohl physische als auch logische Blockbeschädigungen zu identifizieren.

Wir können den folgenden Befehl verwenden, falls wir selektiv überprüfen möchten

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;

Wählen Sie die Ansicht aus, um die von RMAN erkannten beschädigten Blöcke zu identifizieren.

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; 

Bitte beachten Sie, dass nach der Reparatur eines beschädigten Blocks die Zeile, die den Block identifiziert, aus der Ansicht gelöscht wird.

Alert-Log auf mögliches Auftreten prüfen

Alert prüfen. protokolldatei für beschädigte Blöcke, Datendateiliste.

For ex:- ORA-01578: ORACLE data block corrupted (file # 11, block # 45)ORA-01110: data file 5: '/xyz/db01.dbf'

dbverify

Sie können das Dienstprogramm dbverify auch verwenden, um physische und logische blockinterne Beschädigungen zu identifizieren.

dbv file=datafile_name blocksize=datafile_block_size

Sie können den folgenden Befehl verwenden, um den dbv-Befehl für alle Datendateien zu generieren

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

Im Falle eines RAW-Geräts

select 'dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||' logfile='||substr (name, instr (name, '/', -1, 1) + 1)||'.'||file#||'.log'from v$datafile;

Im Falle eines ASM-Speichers

select 'dbv file=' || name || ' blocksize='|| block_size || ' USERID=sys/&SYS_PASSWORD logfile=' ||substr(name, instr(name, '/', -1, 1) +1) ||'.' || file# || '.log' from v$datafile/

Export

Wenn Sie den Export einer Tabelle oder eines Schemas verwenden, wird auch die die Tabelle oder das Schema

Aber die große Einschränkung beim Export ist, dass es sofort nach der ersten Beschädigung fehlschlägt., also wird vollständiges Bild verpasst.

ANALYZE-Befehl

ANALYZE wurde als das beste Dienstprogramm bezeichnet, das maximale Überprüfungen durchführt.

Dies ist das einfache Dienstprogramm, um die mit Index verbundenen Beschädigungen auf beliebige Weise zu überprüfen.

Um die Korruption mit einer Tabelle zu überprüfen, gehen Sie wie folgt vor:

ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE;

Um die Korruption mit einem Index zu überprüfen, gehen Sie wie folgt vor:

ANALYZE INDEX <OWNER.INDEX_NAME> VALIDATE STRUCTURE;

Um die Korruption mit der Tabelle und ihren Indizes zu überprüfen, um die Querverweisüberprüfungen durchzuführen, gehen Sie wie folgt vor:

ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE;

Für Partitionstabellen müssen wir den Befehl ANALYZE mit der Option INTO INVALID_ROWS verwenden, ähnlich wie folgt:

ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE INTO INVALID_ROWS;

Wie die Korruption zu korrigieren

ein. Verwenden des Befehls blockrecover RMAN

Mit Block recover sind nur die wiederherzustellenden Blöcke nicht verfügbar , Rest-Datendatei ist verfügbar

RMAN >Blockrecover-Datendatei 10 Block 1688

RMAN > BLOCKRECOVER KORRUPTIONSLISTE WIEDERHERSTELLEN BIS ZUM ZEITPUNKT ‚SYSDATE – 7‘;

b. Verwenden von Datafile Recovery aus Backup oder Standby (falls vorhanden)

c. Vollständige Datenbankwiederherstellung

d. Falls es sich nur um eine Indexbeschädigung handelt, können wir den Index löschen und neu erstellen

e. Wir können DBMS_REPAIR verwenden. Es wird den beschädigten Block nicht korrigieren, aber es wird diesen Block als überspringen markieren und Sie werden diesen Block jetzt nicht überprüfen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.