split block (torn page) problem

From: <Laimutis.Nedzinskas_at_seb.lt>
Date: Tue, 6 Dec 2011 11:08:25 +0200
Message-ID: <OFC89356C0.DDFC8D13-ONC225795E.00302F7F-C225795E.003235F0_at_seb.lt>


Recently people blogged about very basic, core oracle functionality and issues with durability and isolation here: http://jonathanlewis.wordpress.com/2011/08/19/redo-2/

Now I have a similar basic question about split block (torn page) problem.

According to
http://www.emc.com/collateral/hardware/solution-overview/h2603-oracle-db-emc-symmetrix-stor-sys-wp-ldv.pdf  EMC has a (separately licensed) feature Generic SafeWrite which "is used to help protect critical application from incurring an incomplete write, and subsequent torn page, due to a failure within a component"

The question is what happens when:

  • Oracle dbwr(or foreground process for that matter) issues a single IO kernel call to write 8k block into a datafile
  • the first 4k are written successfully and the next 4k fails, i.e. torn page situation arises
  • Oracle is stopped, the problem is fixed, oracle is started and attempts crash recovery
  • My understanding is that Oracle crash recovery can not handle split-block. Unless the database was in backup mode meaning full block image is saved in the redo stream as a starting recovery point. I can only speculate the whole 8k image is so important because crash recovery needs datafile block sturctures like row directory (may be ITL's too ?) to be in a good shape.
  • Basically, is it so that Oracle relies on hardware atomicity with respect to 8k(or whatever block size) IO calls ? Is it so that the whole 8k block must be stored or nothing?

Brgds, Laimis N

Received on Tue Dec 06 2011 - 03:08:25 CST

Original text of this message