Existem dois tipos de corrupção.
A. corrupção física: isso acontece geralmente devido à corrupção da mídia. Nesse caso, o bloco tem inválido checksum.it maio contém zero. Isso geralmente é o resultado de problemas de infraestrutura como mídia,rede ,memória.
RMAN Block recover pode ser usado para remover a corrupção física
vemos o erro ORA-01578: O ORACLE data block foi corrompido no log de alertas quando o oracle detecta corrupção física. O Oracle detecta corrupção verificando o cabeçalho do bloco e o rodapé do bloco.
B. corrupção lógica: isso acontece quando o oracle encontra o cabeçalho e o rodapé do bloco bem, mas encontra consistência interna no bloco. Geralmente isso acontece devido a algum bug no Software Oracle. Quando o oracle o detecta, ele gera o erro no log de alertas.
ORA – 08103-este erro é um erro de corrupção lógica para um determinado bloco de dados.
ORA-00600-este erro está relacionado ao bloqueio de corrupção e ocorre devido a um SCN mais alto do que o SCN do banco de dados.
Como verificar a corrupção de banco de dados
corrupção de Banco de dados podem ser encontrados usando o método abaixo
um. RMAN
c. Verificação de log de alerta para a possível ocorrência
c. dbverify
d. Exportação
e. Analisar comando
RMAN
Execute o comando abaixo
RMAN> backup validate check logical database;
“VERIFIQUE LÓGICA” opção é usada para identificar tanto Físico e Lógico Bloco de Corrupções.
podemos usar o comando abaixo caso desejemos verificar seletivamente
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;
selecione a visualização para identificar os blocos corrompidos detectados pelo 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;
observe que, depois que um bloco corrompido é reparado, a linha que identifica o bloco é excluída da visualização.
verificar o registro de alerta para possível ocorrência
verificar alerta. arquivo de log para blocos corrompidos, lista de arquivos de dados.
For ex:- ORA-01578: ORACLE data block corrupted (file # 11, block # 45)ORA-01110: data file 5: '/xyz/db01.dbf'
dbverify
você também pode usar o utilitário dbverify para identificar corrupções Intra-Bloco físicas e lógicas.
dbv file=datafile_name blocksize=datafile_block_size
Você pode usar o comando abaixo para gerar o dbv comando para todos os datafiles
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
No caso de MATÉRIAS de dispositivo
select 'dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||' logfile='||substr (name, instr (name, '/', -1, 1) + 1)||'.'||file#||'.log'from v$datafile;
Em caso de AGO de armazenamento
select 'dbv file=' || name || ' blocksize='|| block_size || ' USERID=sys/&SYS_PASSWORD logfile=' ||substr(name, instr(name, '/', -1, 1) +1) ||'.' || file# || '.log' from v$datafile/
Exportar
Usando a exportação de tabela ou esquema encontrará também a corrupção na tabela ou esquema
Mas a grande limitação com a exportação é que Ele falha imediatamente após encontrar o primeiro corrupção., então a imagem completa será perdida.
ANALYZE command
ANALYZE foi referido como o melhor utilitário que executa verificações máximas.
este é o utilitário fácil para verificar as corrupções associadas ao índice em qualquer meio.
Para verificar a corrupção com uma tabela faça o seguinte:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE;
Para verificar a corrupção, com um índice de fazer o seguinte:
ANALYZE INDEX <OWNER.INDEX_NAME> VALIDATE STRUCTURE;
Para verificar a corrupção com a tabela e seu índice(s) para executar a referência cruzada de verificações faça o seguinte:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE;
Para tabelas de partição, precisamos usar ANALISAR comando com INVALID_ROWS opção, semelhante à seguinte:
ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE INTO INVALID_ROWS;
Como corrigir a Corrupção
um. Usando blockrecover RMAN comando
Com o Bloco de recuperar, apenas os blocos estão sendo recuperados não estão disponíveis ,o resto arquivo de dados não está disponível
RMAN >blockrecover de dados de 10 blocos de 1688
RMAN > BLOCKRECOVER CORRUPÇÃO LISTA de RESTAURAR ATÉ o TEMPO ‘SYSDATE– 7’;
b. Usando o arquivo de dados de recuperação de cópia de segurança ou no modo de espera (se você tiver)
c. Completa recuperação do banco de dados
d. No caso, é o índice de corrupção, apenas podemos descartar o índice e recriá-lo
e. Podemos usar DBMS_REPAIR. Ele não corrigirá o bloco corrompido, mas marcará esse bloco como skip e você não verificará esse bloco agora em diante