什么是SCN
时间:06-23
来源:IT专家网
点击:
什么是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语句,何时进行了提交。
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语句,何时进行了提交。
- 浅析SQL Server与Oracle区别(04-22)
- 5条DBA最佳实践指导(04-25)
- Oracle简化Oracle 10g中用户管理(04-29)
- 讲解基于Oracle高性能动态SQL程序开发(04-29)
- 在Linux系统下优化Oracle具体步骤(05-01)
- 如何选择Oracle优化器(04-30)