Subscribe to Posts by Email

Subscriber Count

    696

Disclaimer

All information is offered in good faith and in the hope that it may be of use for educational purpose and for Database community purpose, but is not guaranteed to be correct, up to date or suitable for any particular purpose. db.geeksinsight.com accepts no liability in respect of this information or its use. This site is independent of and does not represent Oracle Corporation in any way. Oracle does not officially sponsor, approve, or endorse this site or its content and if notify any such I am happy to remove. Product and company names mentioned in this website may be the trademarks of their respective owners and published here for informational purpose only. This is my personal blog. The views expressed on these pages are mine and learnt from other blogs and bloggers and to enhance and support the DBA community and this web blog does not represent the thoughts, intentions, plans or strategies of my current employer nor the Oracle and its affiliates or any other companies. And this website does not offer or take profit for providing these content and this is purely non-profit and for educational purpose only. If you see any issues with Content and copy write issues, I am happy to remove if you notify me. Contact Geek DBA Team, via geeksinsights@gmail.com

Pages

ORA-19566: exceeded limit of 0 corrupt blocks for file : Block that not part of any segment

Getting this error,

RMAN-00571: ======================================================
RMAN-00569: ========= ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: =====================================================
RMAN-03009: failure of backup command on ch02 channel at 10/08/2012 18:18:35
ORA-19566: exceeded limit of 0 corrupt blocks for file /testdb/dev/oradata/test13.dbf

Get the file id of the above file using

select file_id from dba_data_files where file_name='/testdb/dev/oradata/test13.dbf';

File_id
------
16

If the backup is in tape

RMAN> RUN {
allocate channel ch01 TYPE 'SBT_TAPE';
send 'NB_ORA_CLIENT=<tapebackupserver>';
BACKUP VALIDATE CHECK LOGICAL datafile 16;
}

If the backup is in disk

RMAN> RUN {
allocate channel ch01 TYPE disk;
BACKUP VALIDATE CHECK LOGICAL datafile 16;
}

Now Check the view for block corruption

SQL> SELECT * FROM v$database_block_corruption;

     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
       16    1719526          1                  0 FRACTURED

You can also use the script located in this post which may give you object name of this corrupted block as well.

Link:-

SELECT owner, segment_name, segment_type, partition_name,
FROM dba_extents
   WHERE file_id=16
   AND 1719526 BETWEEN block_id AND block_id+blocks-1;

no rows selected

If you get no rows, that means you have a corrupted block reported that is not part of any segment, RMAN reads blocks on the disk level, so it is not aware if they belong to an object. Thus if an object with corrupted blocks is dropped, those blocks remain FRACTURED until reused by a new object or allocated to an existing segment. At that time, Oracle will reformat the block (renew it) and thus remove the fracture.

Solution:- Use maxcorrupt to the number that is reported in above query, i.e above i have been shown only 1 block

RMAN> SET MAXCORRUPT FOR DATAFILE 16 to 1;
BACKUP DATABASE;

-Thanks

Geek DBA

Comments are closed.