DIY编程器网

标题: 什么是SCN [打印本页]

作者: admin    时间: 2014-10-13 15:14
标题: 什么是SCN
什么是SCN(system change number)?它在redo中是何时分配的?它是被分配给我们发出的每个DML或者DDL,还是只给已经提交的事务?在我们回滚事务的时候,会发生什么?

  Brian Peasland:在会话过程中,系统变更码(system change number)被赋值了很多次。每一条DML语句(包括select)会得到一个SCN。每一条DDL也会得到一个SCN。当语句开始的时候,它就收到一个SCN。赋值不会等待提交或者回滚。系统使用SCN来了解语句发给数据库的次序。一个较小的SCN在一个较大的SCN之前的某个点发生的。假设UserA对表EMP执行了UPDATE。这条UPDATE语句被赋予15734的SCN。在一段时间之后,UserB对表EMP执行了SELECT。此时,UserA还没有提交更新。这条SELECT被赋予16014的SCN。Oracle知道UserA还没有提交更新,不会阻止UserB对表进行查询,即使UserA锁住了表。Oracle为UserB创建了一份读一致性的镜像数据。Oracle知道UserB的SQL语句发生在UserA的UPDATE之后,并且使用SCN保证UserB看到正确的数据镜像。一旦UserA提交了事务,提交的语句(或者回滚)也被赋予它自己的一个SCN。这样,Oracle就会知道相对于其他的SQL语句,何时进行了提交。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2