System Architecture 2-45
Managing Shared-Memory Resources
Theblob timestamp on the disk page changes each time the blob data on the
page is overwritten. The blob timestamp stored with the forward pointer
changeseach time a new blob replaces the old blob. For example, when a blob
in a data row is updated, the new blob is stored on disk, and the forward
pointerstored with the blob descriptor is revised to point to the new location.
The blob timestamp in the data row is updated and synchronized with the
blobtimestamp on the new blob’s disk page. The blob timestamp on the now-
obsolete disk page is no longer synchronized. (An illustration of blobspace
blob storage shows this inFigure 2-39 on page 2-150.)
Because retrieving a blob can involve large amounts of data, it might be
impossible to retrieve the blob data simultaneously with the rest of the row
data.Coordination is needed for blob reads that OnLine user processes may
perform at the Dirty Read or Committed read level of isolation. Therefore,
eachread compares the two members of the blob timestamp pair as a test for
logicalconsistency of data. If the two timestamps in the pair differ, this incon-
sistency is reported as a part of consistency checking. (Refer topage 4-6 for
further information about consistency-checking errors and corrective
actions.)The error indicates either that the pages have been corrupted or that
theblob forward pointer read by the OnLine user process is no longer valid.
To understand how a forward pointer stored with a blob descriptor or with
the previous segment of blob data may become invalid, consider this
example.A program using Dirty Read isolation is able to read rows that have
beendeleted provided the deletion has not yet been committed. Assume that
one OnLine server process is deleting a blob from a data row. During the
delete process, another OnLine server process operating with a Dirty Read
isolation level reads the same row, searching for the blob descriptor infor-
mation.In the meantime, the first transaction completes, the blob is deleted,
the space is freed, and a third process starts to write new blob data in the
newly freed space where the first blob used to exist. Eventually, when the
second OnLine server process starts to read the blob data at the location
where the first blob had been stored, the process compares the value of the
timestampreceived from the blob descriptor with the value of the timestamp
that precedes the blob data. The timestamps will not match. The blob
timestampon the blobpage will be greater than the timestamp in the forward
pointer,indicating to the server process that the forward pointer information
it has is obsolete.