Describe the internals of the Oracle segment header.
Oracle Segment Header Internals
Segment header block
When we look at the placement of Oracle data rows within data blocks, we must understand how Oracle uses the segment header to manage data rows.
The data block header contains general block information. The segment header block is the first block of any Oracle table or index,
and contains control information about free blocks, extents, and high water marks.
Let us look at the contents of this block using the MouseOver that follows.
Oracle internal structures for managing free space
All Oracle tables use freelists to manage free space.
One or more freelists are enabled automatically for each data and index segment.
These freelists are internal structures that can never be changed, have no parameters, and are never seen by the DBA. Master freelists, transaction freelists, and process freelists are also contained
in the segment header.
The role of Oracle's internal structures and freelists
To understand the role of Oracle's internal structures, we must examine the freelists in more detail.
A freelist is a list of the data blocks that are available for inserts, and is a tool for Oracle to manage free data blocks. There is a
relationship between the high water mark and the freelists. Before we discuss this, let's look at some other freelist
A freelist can be thought of as a chain of block pointers or a one-way linked list, similar to a data structures linked list. As shown in
the graphic below, the segment header points to the first free block, the first free block points to the second free block, and so on.
Structures for managing free space
Oracle uses the following structures to manage free space: the master freelists, super master freelists, freelist groups, process freelists,
and transaction freelists.
The SlideShow below reviews the high water mark, and other segment header internal structures Oracle uses to manage free space.
The high water mark is increased when a request for a new free block cannot be satisfied by the existing freelists. When this happens, Oracle
will increment the master freelist by five blocks.
OPS and the super master freelist
With the Oracle Parallel Server (OPS), you have a super master freelist on block #1 of the segment. This is in addition to the
master freelists that are dedicated to each freelist. We will discuss the OPS in more detail later in the course.
The freelist merge
A process freelist may also acquire blocks when a freelist merge occurs. A freelist merge is when the master freelist has been
incremented, and Oracle moves five-block increments from the master freelist to the process list.
The role of the transaction freelist
The transaction freelist is allocated on an as-needed basis. These entries are transferred after the task has ended or committed to
the process freelist, the most recently freed blocks being added to the head of the freelist chain.
The role of the extents table
The extents table manages the extents for the object, and points Oracle to the next extent for the table or index.
Relationship between the high water mark and freelists
It is important that you understand the relationship between freelists and the high water mark .
All blocks above the high water mark are automatically eligible to receive rows, but all blocks below the high water mark must be on the
freelist. When the high water mark is increased, Oracle will move the high water mark up, in increments of five blocks, and add these blocks
to the master freelist.
Oracle Segment Header Summary
Oracle has several structures for managing free space. These internal structures have an important relationship with PCTFREE and PCTUSED, and
the high water mark. Listed below are some of the main points about PCTFREE and PCTUSED. You will learn more about these parameters later in
Each update process reads its own freelist, and blocks only appear on one freelist.
The PCTUSED parameter determines when to perform a freelist re-link.
The PCTFREE parameter determines freelist un-link.
The next lesson discusses how to set PCTFREE for optimal performance.
Before moving on to the next lesson, click the link below to read about data block fundamentals. Data Block Fundamentals