contact contact

Database status -96


Title: Database status -96
Document: db96
Keywords: Error Codes,database,-96

Database status -96

Database status -96 indicates a serious database corruption. You need to reload the database or use the dbcfix utility to correct the problem.

Some IMAGE background: In addition to the data (as provided by the application), the IMAGE database maintains additional internal information for each record. These information is maintained by DBPUT and DBDELETE.

Each Master record contains the following fields per chain:
first holds the record number of the first chain entry in the associated detail set.
This is returned in status element 10 on DBFIND
last holds the record number of the last chain entry in the associated detail set.
This is returned in status element 8 on DBFIND
count holds the number of chain entries in the associated detail set.
This is returned in status element 6 on DBFIND

Each Detail record contains the following fields per chain:
prev holds the record number of the previous entry in this detail set for the chain.
This is returned in status element 10 on DBGET
next holds the record number of the next entry in this detail set for the chain.
This is returned in status element 8 on DBGET

When IMAGE detects an inconsistency in this information during DBPUT or DBDELETE, a status -96 is returned, indicating a chain pointer referred to an invalid record number. When IMAGE is unable to find a Master set entry for a detail record, a status -95 is returned.

Specifically, status -96 indicates that a detail record does not exist (or the record number is invalid) which was refered to by either the last pointer in the master set or in case a sort item is present the prev pointer in the detail set.

How can this happen

The Eloquence database uses a transaction log mechanism to recover from server failures. Any recent changes are recorded in a transaction journal and are recovered when the server process is restarted. The database consistency should not be affected by a server abort.
However this cannot provide a 100% protection in case of hardware failure, operating system crash or power loss.

Enabling sync write mode (this is the default) improves database resiliance in case of a power loss condition or an operating system crash by enforcing writing critical data back to disk on a transaction commit, a checkpoint operation or metadata change.

Corrupted chain information may also be a result of repairing the volume files with dbfsck. If dbfsck fixes a corrupted record it merely marks it as deleted but does not correct any related index or chain information. As dbfsck is intended as an emergency repair tool its primary function is to support analysis of corruption issues and repairing the information sufficiently so a database reaload is possible.

Eloquence A.05.xx

With the A.05.xx database, when your system encounters a power failure or a HP-UX kernel panic, data is not written back to disk. This will leave the data entries in an inconsistent state.
This corruption could also happen if an Eloquence process is aborted due to a bug or by the administrator using kill -9 while it is updating the database. This should not happen if you abort an Eloquence process even while it is operating on the database other then using kill -9. The Eloquence database provides a mechanism to recover from this situation by the help of the eloqd daemon process.

How to recover

The Eloquence dbcfix utility allows to verify and recover the chain link information. See also: dbcfix utility

Please note, that the server process must be stopped to use dbcfix in write mode. For analysis (read-only mode) the server may be active in on-line backup mode. As dbcfix directly accesses the volume files it bypasses the forward log and transaction logging mechanism. As a result it is strongly recommended to create a new backup after running dbcfix in write mode.

When forward logging is enabled, this provides a quick and reliable option to recover the most recent state by restoring the last backup and re-applying all changes since then. See also: dbrecover utility

Another option to recover from this problem is to reload the database. This is done by dbexport/dberase/dbimport. We recommend to reload the entire database, rather than selected data sets.

  Privacy | Webmaster | Terms of use | Impressum Revision:  Wed Jul 14 14:12:34 2010  
  Copyright © 1995-2004 Marxmeier Software AG