13
nov
17

datablock corrompido?

Há pouco tempo vi no alert que tinha um datablock corrompido na base. Segui a solução do MOS e repasso-a aqui:

No alert_orcl.log recebi a seguinte linha de erro:

ORA-01578: ORACLE data block corrupted (file # 6, block # 2506161)
ORA-01110: data file 6: ‘/u01/app/oracle/oradata/orcl/users4.dbf’

E pude confirmá-la através da query abaixo:

SQL> select * from v$database_block_corruption;

FILE#       BLOCK#       BLOCKS       CORRUPTION_CHANGE#       CORRUPTIO

———       ————        ————        ————————————-       —————-

6              2506161      1                   0                                        CORRUPT

Com o número do arquivo e o número do bloco em mãos, preencha a query abaixo e a execute:

SELECT
‘Tablespace: ‘||tablespace_name TS,
‘Extent-RFN-Blk: ‘||relative_fno||’ ‘||block_id EXTENT,
‘Segment-Type: ‘||segment_type SEGTYPE,
‘Segment: ‘||owner||’.’||segment_name SEGMENT,
‘Partition: ‘||PARTITION_NAME PARTITION,
‘Extent-ID/Blocks: ‘||extent_id||’ / ‘||blocks EXT_BLK
FROM dba_extents
WHERE file_id=<FILE#> and <BLOCK#> between block_id and block_id+blocks-1;

E o resultado será algo como:

Tablespace: USERS
Extent-RFN-Blk: 6 2506121
Segment-Type: INDEX
Segment: USUARIO.EMPREGADOS_001
Partition:
Extent-ID/Blocks: 12 / 128

Já sabemos, então, que o que foi corrompido foi um INDEX. No meu caso só precisei fazer 3 passos para me ver livre e tranquilo desse problema. Primeiro o rebuild do INDEX:

alter index USUARIO.EMPREGADOS_001 rebuild online;

Depois verificar o datafile inteiro em busca de mais blocos corrompidos:

dbv file=/u01/app/oracle/oradata/orcl/users4.dbf

E, por fim, um dump do bloco afetado para análise:

alter session set tracefile_identifier=’BLOCKDUMP’;
alter session set max_dump_file_size = unlimited;
alter system dump datafile ‘/u01/app/oracle/oradata/orcl/users4.dbf’ block 2506161;

E pronto. Resolvido.


0 Respostas to “datablock corrompido?”



  1. Deixe um comentário

Deixe um comentário


NoDBA

Categorias