są dwa rodzaje korupcji.
a. korupcja fizyczna: dzieje się tak zazwyczaj z powodu korupcji w mediach. W tym przypadku blok ma nieprawidłowy checksum.it maj zawiera zero. Jest to na ogół wynikiem problemów z infrastrukturą, takich jak media, Sieć, Pamięć.
odzyskiwanie bloku RMAN może być użyte do usunięcia fizycznego uszkodzenia
widzimy błąd ORA-01578: Oracle data block uszkodzony w dzienniku alertów, gdy oracle wykryje fizyczne uszkodzenie. Oracle wykrywa uszkodzenia, sprawdzając nagłówek bloku i stopkę bloku.
b. korupcja logiczna: dzieje się tak, gdy oracle znajdzie nagłówek i stopkę bloku dobre, ale znajdzie wewnętrzną spójność w bloku. Zazwyczaj dzieje się to z powodu jakiegoś błędu w oprogramowaniu Oracle. Gdy oracle go wykryje, wyrzuci błąd do dziennika alertów.
ORA-08103-ten błąd jest logicznym błędem uszkodzenia dla określonego bloku danych.
ORA-00600-ten błąd jest związany z uszkodzeniem bloku i występuje z powodu wyższego SCN niż SCN bazy danych.
jak sprawdzić uszkodzenie bazy danych
uszkodzenie bazy danych można znaleźć za pomocą poniższej metody
a. RMAN
C. sprawdzanie dziennika alertów pod kątem możliwego wystąpienia
C. dbverify
d. eksport
e. polecenie Analyze
rman
uruchom pod komendą
RMAN> backup validate check logical database;
„opcja CHECK LOGICAL” służy do identyfikacji zarówno fizycznych, jak i logicznych uszkodzeń bloków.
możemy użyć poniższego polecenia w przypadku, gdy chcemy zrobić sprawdzanie selektywnie
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;
Wybierz widok, aby zidentyfikować uszkodzone bloki wykryte przez 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;
pamiętaj, że po naprawieniu uszkodzonego bloku wiersz identyfikujący blok jest usuwany z widoku.
sprawdzanie dziennika alertów pod kątem możliwego wystąpienia
sprawdzanie alertu. plik dziennika dla uszkodzonych bloków, Lista plików danych.
For ex:- ORA-01578: ORACLE data block corrupted (file # 11, block # 45)ORA-01110: data file 5: '/xyz/db01.dbf'
dbverify
możesz również użyć narzędzia dbverify do identyfikacji uszkodzeń fizycznych i logicznych wewnątrz bloku.
dbv file=datafile_name blocksize=datafile_block_size
możesz użyć poniższego polecenia, aby wygenerować polecenie dbv dla wszystkich plików danych
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
w przypadku urządzenia RAW
select 'dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||' logfile='||substr (name, instr (name, '/', -1, 1) + 1)||'.'||file#||'.log'from v$datafile;
w przypadku ASM storage
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
za pomocą eksportu tabeli lub schematu również znajdzie uszkodzenie w tabeli lub schemacie
ale dużym ograniczeniem eksportu jest to, że nie powiedzie się natychmiast po napotkaniu pierwszej korupcji., więc kompletny obraz zostanie pominięty.
polecenie ANALYZE
ANALYZE zostało nazwane najlepszym narzędziem, które wykonuje maksymalne kontrole.
jest to łatwe narzędzie do sprawdzania uszkodzeń związanych z indeksem w dowolny sposób.
aby sprawdzić korupcję za pomocą tabeli, wykonaj następujące czynności:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE;
aby sprawdzić korupcję za pomocą indeksu, wykonaj następujące czynności:
ANALYZE INDEX <OWNER.INDEX_NAME> VALIDATE STRUCTURE;
aby sprawdzić korupcję z tabelą i jej indeksami, aby wykonać kontrole odsyłaczy, wykonaj następujące czynności:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE;
dla tabel partycji musimy użyć polecenia ANALYZE z opcją INTO INVALID_ROWS, podobnego do następującego:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE INTO INVALID_ROWS;
jak skorygować korupcję
a. Używając polecenia blockrecover RMAN
z odzyskiwaniem bloków, tylko odzyskiwane bloki nie są dostępne ,dostępny jest plik danych rest
RMAN > blockrecover datafile 10 blok 1688
RMAN > przywracanie listy uszkodzeń BLOCKRECOVER do czasu 'SYSDATE– 7′;
b. Korzystanie z odzyskiwania datafile z kopii zapasowej lub gotowości (jeśli masz)
C. pełne odzyskiwanie bazy danych
d. w przypadku, gdy jest to tylko uszkodzenie indeksu, możemy upuścić indeks i odtworzyć go
e. możemy użyć DBMS_REPAIR. Nie poprawi uszkodzonego bloku, ale oznaczy ten blok jako skip i nie będziesz sprawdzał tego bloku teraz