The past image concept was introduced in the RAC
version of Oracle 9i to maintain data integrity.
In an Oracle database, a typical data block is
not written to the disk immediately, even after
it is dirtied. When the same dirty data block is
requested by another instance for write or read
purposes, an image of the block is created at
the owning instance, and only that block is
shipped to the requesting instance. This backup
image of the block is called the past image
(PI) and is kept in memory. In the event of
failure, Oracle can reconstruct the current
version of the block by reading PIs. It is also
possible to have more than one past image in the
memory depending on how many times the data
block was requested in the dirty stage.
A past image copy of the data block is different
from a CR block, which is needed for
reconstructing a read-consistent image. A CR
version of a block represents a consistent
snapshot of the data at a point in time. It is
constructed by applying information from the
undo/rollback segments. The PI image copy helps
the recovery process and aids in maintaining
data integrity.
For example, suppose user A of Instance 1 has
updated row 2 on block 5. Later, user B of
Instance 2 intends to update row 6 on the same
block 5. The GCS transfers block 5 from Instance
A to Instance B. At this point, the past image
(PI) for block 5 is created on Instance A.
Lock Modes
From the examination of resource roles, resource
modes, and past images, the next step is to
consider the possible resource access modes as
shown in Table 2.2.
There are three characters that distinguish lock
or block access modes. The first letter
represents the lock mode, the second character
represents the lock role, and the third
character (a number) indicates any past images
for the lock in the local instance.
LOCK MODE
|
DESCRIPTION
|
NL0
|
Null Local and No past images
|
SL0
|
Shared Local with no past image
|
XL0
|
Exclusive Local with no past image
|
NG0
|
Null Global – Instance owns current
block image
|
SG0
|
Global Shared Lock – Instance owns
current image
|
XG0
|
Global Exclusive Lock – Instance own
current image
|
NG1
|
Global Null – Instance owns the past
image block
|
SG1
|
Shared Global – Instance owns past
image
|
XG1
|
Global Exclusive Lock – Instance
owns past image.
|
When a block is brought into the local cache of
an instance, it is acquired with the local role.
But if a dirty buffer
for the same data block is present in a remote
instance, a past image is created in the remote
instance before the data block is sent to the
requesting instance’s cache. Therefore, the data
block resource acquires a global role.
For recovery purposes, instances that have past
images will keep those past images in their
buffer cache until the master instance prompts
the lock to release them. When the buffers are
discarded, the instance holding the past image
will write a block written redo
(BWR) to the redo stream. The BWR indicates that
the block has already been written to disk and
is not needed for recovery by the instance.
Buffers are discarded when the disk write is
initiated on the master instance. The master
instance is where the current status and
position of the data block is maintained.
This has been a review of how a GCS resource
maintains its access mode and its role. There is
another feature called the buffer state, which
is covered in the next section.