This Article assumes familiarity with the "RFUTIL" commands necessary to manage after-imaging (AI). Refer to the "
Database Administration Guide and Reference" Section "
After-Imaging” for further clarification as needed.
Pre OpenEdge 10.2BWhile there is no limit to the number of variable-length AI extents that may be defined on a Progress database, if the current "BUSY" variable AI extent reaches the 2GB limit (in an environment where large files have not been enabled), the extent will not switch to the next EMPTY variable AI extent and the database will crash with:
SYSTEM ERROR: Attempted to exceed maximum size on file <current variable AI extent>. (9452)
Can't extend AI extent <current variable AI extent> (3779)
Database Server shutting down as a result of after-image extent switch failure. (5350)
Were
largefiles enabled, this variable extent would have grown to OS/filesystem/user limits in size and then the same crash would have resulted. In other words, even if there were an available "EMPTY" AI extent after this extent, there would have been no switching to this extent (which if on the same filesystem, would not have had any space left to grow into anyway).
The database crash can be avoided by adding -
aistall to the database startup parameters, at which time, a quiet point will be issued instead of bringing the database down until manual intervention from the database manager who switches to the next AI-extent:
SYSTEM ERROR: Attempted to exceed maximum size on file <current variable AI extent>. (9452)
Can't extend AI extent <current variable AI extent> (3779)
Backup AI extent and mark it as empty. (3776)
# The -aistall kicks in, database activity is suspended, Database Administrator:
- Archives all full AI extents
- Marks these as empty (RFUTIL -C aimage empty) then,
- Forces a manual AI switch (RFUTIL -C aimage new), allowing for database activity to resume.
If instead of indicating a variable-length AI extent by leaving out the extent size in the dbname.st file entry line, the maximum size to which the extent can grow is specified by indicating the "v" fixed-variable extent type and a size in kilobytes when the AI files are added to the database structure:
Example of AI extents
# Fixed AI extent of 512MB then switch when full to the next available AI extent
a . f 512000
# Fixed-Variable AI extent that will only grow to 512MB then switch to the next available AI extent
a . v 512000
# Fixed-Variable AI extent in an environment with largefiles supported/enabled will only grow to 8GB then switch to the next available AI extent
a . v 8000000
# Variable AI extent that will grow to the system | filesize | ulimit limits.
a .
The difference between a "Variable" and a "Fixed-Variable" AI extent, is that the latter will automatically switch to the next variable AI extent when it's maximum variable size specified is reached, until such time as there are no EMPTY AI extents left in the AI sequence chain to switch to. Again, the -aistall startup parameter will prevent the database from crashing at this point.
Example: Note this example simply demonstrates how Fixed-Variable extents do switch when their fixed-variable size is reached. Typically RFUTIL scripting or the AIMGT deamon would empty the FULL extents.
With the database started with the -aistall parameter, the following AI extents defined and their statuses at the start of the run:
#v_ai.st
a . v 512000 # current status BUSY <current variable AI extent sequence 1>.
a . v 512000 # current status EMPTY <next variable AI extent sequence 2>.
a . v 512000 # current status FULL <following variable AI extent sequence 3>.
The following actions would result:
This is after-image file number 1 since the last AIMAGE BEGIN (3778)
SYSTEM ERROR: Attempted to exceed maximum size on file <current variable AI extent 1>. (9452)
Can't extend AI extent <current variable AI extent 1> (3779)
# maximum size to which this extent can grow has been reached ..
Switched to AI extent <next variable AI extent 2>. (3777)
This is after-image file number 2 since the last AIMAGE BEGIN (3778)
# database manager automatically switches to next EMPTY variable maximum size ai extent, until ..
SYSTEM ERROR: Attempted to exceed maximum size on file <next variable ai extent 2>. (9452)
Can't extend ai extent <next variable ai extent 2> (3779)
# maximum size to which the next extent can grow has been reached
Can't switch to after-image extent <following variable ai extent 3> it is FULL (3775)
# no more available EMPTY ai extents to switch to.
Backup ai extent and mark it as empty. (3776)
# The -aistall kicks in as noted above.
The initial allocation for a Fixed-Variable length extent is 128K. There will be a slight performance hit in growing a variable length AI extent to its specified maximum size (KB) and additional AI notes need to be recorded for this extension. Furthermore, there needs to be sufficient disk space available to extend every variable length AI extent to it's maximum size, the Fixed-Variable size specified is not reserved.
OpenEdge 10.2B and later:
Without large files enabled, Variable AI extents switch when the 2GB limit is reached. The behaviour is the same as documented above for Fixed-Variable extents:
(10601) SYSTEM ERROR: Attempted to exceed maximum size on file dbname.a1.
(3779) Cannot extend ai extent dbname.a1
(3777) Switched to ai extent dbname.a2.
(3778) This is after-image file number 2 since the last AIMAGE BEGIN
With largefiles enabled, variable extents will grown to OS/filesystem/user limits in size. The behaviour is the same as documented above for Variable Extents.