A) What you're seeing is a real problem others have encountered. B) This problem is not only caused by Data Pump. C) UPDATE will help the problem but you cannot rely on it always working.
ORA_ROWSCN is both inaccurate and inconsistent. The 10g documention only mentions the inaccuracy. The 11g documentation makes it clear just how ill-suited ORA_ROWSCN
is for what you're attempting to do:
If a block is queried twice, then it is possible for the value of ORA_ROWSCN to change between the queries even though rows have not been updated in the time between the queries.
I'm not sure what causes ORA_ROWSCN
to change between sessions, but I don't think it is only related to Data Pump. When I first encountered this problem about 5 years ago we never found a pattern, and if I remember correctly we didn't even use Data Pump.
Our problem specifically was with Oracle SQL Developer, which uses ORA_ROWSCN
for optimistic locking. This bug was incredibly annoying. Users would make changes and when they went to commit it they were incorrectly told someone else had already changed the row. Like you are doing now, we found that if we applied any type of change to the rows the problem would go away. I can't remember how well that worked, but you should not assume it will work 100% of the time.
As far as I know nobody can explain exactly how ORA_SCN is set and what it will return. It should not be used when you need accurate or repeatable results.