English

Bug: Potential data inconsistencies when updating versioned tables

Description

Potential inconsistencies can be introduced for versioned updates if the transaction fails after inserting the rows into the adds table and prior to inserting the rows into the deletes table.

Cause

A versioned update is logically represented by inserting the new updated row into the adds table and inserting a row into the deletes table representing the state for which the row is being deleted or updated.

If a commit is executed after the insert to the adds table and an underlying DBMS error is encountered prior or after the insert into the deletes table (and rolled back), the logical update without its corresponding delete's row will be considered an INSERT. The result is the row being updated will contain duplicates.

Workaround

One solution to ensure no inconsistencies can be introduced during versioned updates is to set the ArcSDE server_config parameter autocommit to a value of 0. This can be accomplished by using the sdeconfig adminstration command.

By setting the value to 0, ArcSDE will only execute a commit in the DBMS when the client application explicitly ends its transaction.

It is also recommended to install the ArcSDE 9.1 General Update Patch 2 which contains a fix preventing a user's transaction from being committed after a row is inserted into the adds table and prior to a row being inserted into the deletes table. Find the link to this patch in Related Information, below.

Related Information