В Oracle 10g (и, думаю, начиная с 9i) вы можете использовать Flashback Query для этого.
Обычно Flashback Query используется, когда вам нужно увидеть данные, как это было некоторое время назад, но вВаш случай в том, что Flashback Query видит только совершенные данные.
Итак, вот небольшой пример:
SQL> create table t1 as select level lev from dual connect by level < 100;
Table created.
SQL> select count(*) from t1;
COUNT(*)
----------
99
SQL> select count(*) from t1 as of timestamp systimestamp;
COUNT(*)
----------
99
SQL> update t1 set lev = -lev;
99 rows updated.
SQL> select max(lev) from t1 as of timestamp systimestamp;
MAX(LEV)
----------
99
SQL> select max(lev) from t1;
MAX(LEV)
----------
-1
SQL> commit;
Commit complete.
SQL> select max(lev) from t1 as of timestamp systimestamp;
MAX(LEV)
----------
-1
SQL>
UPD: дажелучше использовать Flashback Version Query или Flashback Transaction Query с некоторыми изменениями для фильтрации изменений, внесенных во все сеансы, кроме текущего.