Joined: 21 Nov 2009 Posts: 58 Location: California
This problem is more often referred to as "record migration" or "block migration." Often DBAs will recommend READ BY ISN as a means to avoid double updates.
Let's say that your company has had a banner year, so all employees are getting a 10% raise. The most efficient way to process an entire file is with a READ PHYSICAL, so you write
DEFINE DATA LOCAL
1 EMP VIEW EMPLOYEES
2 SALARY (1)
READ EMP PHYSICAL
ASSIGN SALARY (1) = SALARY (1) * 1.10
'New/Salary' SALARY (1)
--- et logic ---
It so happens that the first record processed has a salary go from 99,900 to 109,890. The record length has increased by 1 byte, but the Adabas block was full prior to the increase and the updated record will no longer fit back in this block. The record automatically is migrated by Adabas to another block, say block 100. Since you are performing a physical read, that same record will be processed again when block 100 is reached, receiving another 10% increase.
READ BY ISN avoids the problem, because each record/ISN is processed only once, regardless of block migrations.