当我在Oracle中提交事务时,如何才能获得包含事务更改的最早SCN?
答案 0 :(得分:2)
提交后,使用DBMS_FLASHBACK获取当前的SCN。
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_flashb.htm#i997043
Adam提出的ORA_ROWSCN概念并非100%安全。
6月1日上午10点,我插入了一千条每条1MB的记录。 上午10:30,我做了另一个类似大小的插入物。一个 早上11点,我承诺。
这些插入(几乎可以肯定)已作为脏块写入数据库(即包含未提交的更改)。他们根据编写的时间有一个SCN,但记录将被标记为已锁定(并且该块存储持有锁的事务的ID)。
7月15日,我读了那些街区。它们仍然“脏”并且看起来很锁定。读取一致性机制用于检查事务并发现它不再存在(并且已经存在一段时间)。因此,系统知道这些记录已经提交,但实际上无法准确记录它们何时被提交。它清理脏块,并在那里粘贴SCN。 SCN不是提交时间的准确时间,而是与数据库可以应用的最早时间相对应的SCN。
答案 1 :(得分:1)
在10g +中使用ORA_ROWSCN
伪列和CREATE TABLE ... ROWDEPENDENCIES
将允许您查看与每行最近提交相关联的SCN。您在单个提交中所做的所有更改都应具有相同的SCN值。