• Besides the options Koen mentions above, you can use ORA_ROWSCN, an Oracle system column.

    Whenever data changes in a block in Oracle, the ORA_ROWSCN gets updated for that table. Use it the same way as Last Update Date. After each load, you save the highest value of ORA_ROWSCN for each table, and only select rows with a value above that the next time you load data from that table.

    A block is similar in concept to a page in SQL Server. You will likely have more than one row in each block, and not all of those rows have changed. However you have limited the number of rows you have to compare with your existing rows. If you want that part to be faster, you could use ORA_HASH on all columns and save that with the row and only update if the hash value has changed.