如何获得与我的COMMIT相对应的SCN?

时间:2010-09-03 13:16:00

标签: oracle

当我在Oracle中提交事务时,如何才能获得包含事务更改的最早SCN?

2 个答案:

答案 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值。