Query "last" records in a table with non-sequential key fields
You can use ORA_ROWSCN pseudocolumn to find rows that have been changed since last update. By default it tracks changes by database block, not by row, but it can be used to limit the amount of data transferred between databases.

I would suggest a following procedure:


Find the current Oracle SCN (System Change Number)

select dbms_flashback.get_system_change_number from dual;
Get rows that have been changed since last update

select * from [source_table] where ora_rowscn > [last scn] and ora_rowscn &lt;= [current scn]
Resolve possible duplicates in your target database
Store the [current scn] to target database so it can be used as [last scn] during the next iteration