ARIES accomplishes all the goals that were mentioned in the beginning by logging all updates on a per page basis, using an LSN on every page for tracking page state, repeating history during restart recovery before undoing loser transactions, and chaining the CLRs to the predecessors of the log records that they compensated.
ARIES can be used not only for database area, but also for implementing persistent object-oriented languages, recoverable file systems and transaction based operating systems.
In the following, we summarise as to which specific features of ARIES lead to which specific attributes that give us flexibility and efficiency.
# Record level locking to be supported and records to be moved around
within a page to avoid storage fragmentation without the moved records
having to be locked and without the movements having to be logged.
# Use only one state variable, a log sequence number, per page.
# Reuse of storage released by one transaction for the same transaction's
later actions or for other transactions' actions once the former commits,
thereby leading to the preservation of clustering of records and the
efficient use of storage.
# The inverse of an operation originally performed during forward
processing of a transaction to be different from the action(s) performed
during the undo of that original action. That is, logical undo with
recovery independence is made possible.
# Multiple transactions may undo on the same page concurrently with
transactions going forward.
# Recovery of each page independently of other pages or of log records
relating to transaction state, especially during media recovery.
# If necessary, the continuation of transactions which were in progress
at the time of system failure.
# Selective or deferred restart, and undo of losers concurrently with
new transaction processing to improve data availability.
# Partial rollback of transactions.
# Operation logging and logical logging of changes within a page. For
example, decrement and increment operations may be logged, rather than
the before and after-images of modified data.
# The avoidance of undoing CLRs' actions, thus avoiding writing CLRs
for CLRs. This also makes it unnecessary to store undo information in CLRs.
# The avoidance of the undo of the same log record written during forward
processing more than once.
# As a transaction is being rolled back, the ability to release the lock
on an object when all the operations on that object have been undone.
This may be important while rolling back a long transaction or while resolving
a deadlock by partially rolling back the victim.
# Handling partial rollbacks without any special actions like patching the
log.
# Making permanent, if necessary via nested top actions, some of the
changes made by a transaction, irrespective of whether the transaction
itself subsequently rolls back or commits.