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?”