Consultor Eletrônico



Kbase 21083: Error 3636 when using -RO
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   14/02/2011
Status: Verified

SYMPTOM(s):

Error generated for remote client connecting with -RO (Read-only)

Error:
SYSTEM ERROR: bksteal: Attempt to read block <block-num> above high water mark <block-num2>. (3636)

FACT(s) (Environment):

All Supported Operating Systems
Progress 8.x
Progress 9.x
OpenEdge 10.x

CAUSE:

The -RO (read-only) parameter should only be used for Single-user database access. The 3636 error will be generated when the -RO is used to connect to a database started in Multi-user mode. The -RO is not designed to be used on databases that are being updated at the same time.

FIX:

Never use -RO with a multi-user environment.

Accessing with -RO fails because multi-user sessions are using a shared buffer pool, and all database changes go into that buffer pool. These changes are not written to disk immediately. If at the same time, a client connects as a read-only session, the process does not consider the buffer activity of the other sessions and only sees what is on disk.

One of many things that might go wrong is this:

In a multi-user session, the database can be extended. Some records or
index blocks can be stored in the newly acquired blocks. The high water mark, which indicates the last database block that contains data, is kept in the master block (area information block in V9). The master block gets updated when the database is extended. So, now the single-user session has an old copy of the master block in its memory.

Progress checks whether a block that is about to be read is legitimate. The buffer manager finds that according to the old, stale copy of the master block, the requested block is above the high water mark. Thus, it thinks the database is corrupt and 3636 error is generated. In fact, there is nothing wrong with the database. It just looks that way because of the stale data int the single-user sessions buffer.