Oracle为每一个事物都分配一个唯一的SCN值,事务开始时的SCN可以从V$TRANSACTION.START_SCNB+ START_SCNW中查询,如下所示:
SQL> update t2 set obj#=1 where rownum=1;
1 row updated.
SQL> select XIDUSN,START_SCNB,START_SCNW from v t r a n s a c t i o n 2 w h e r e S E S A D D R = ( s e l e c t S A D D R f r o m v transaction 2 where SES_ADDR=(select SADDR from v transaction2whereSESADDR=(selectSADDRfromvsession
3 where sid=(select sid from v$mystat where rownum=1)
4 );
也可以通过DUMP回滚段头来观察事务开始时的SCN,如下所示:
SQL> select name from v$rollname where usn=10;
SQL> ALTER SYSTEM DUMP UNDO HEADER ‘_SYSSMU10$’;
System altered.
打开跟踪文件(以下显示有部分省略),state为10表示这是一个未提交的事务,scn表示事务开始SCN。如下所示:
0x1c 10 0x80 0x012a 0x0002 0x0000.000b97d1 0x0080bac3 0x0000.000.00000000 0x00000001 0x00000000 0