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.
|