关于SCN和Commit的两个概念问题

[复制链接]
查看11 | 回复9 | 2006-4-17 13:46:34 | 显示全部楼层 |阅读模式
1.SCN(system change Number)
有的书上讲给事务分配SCN是在事务commit时,但是倘若如此。在oracle的多版本中,事务去rollback segment中读取旧数据时,是比较本事务的SCN和rollback segment中数据对应事务的SCN,这说明事务在开始时就有了SCN,到底是怎么回事,不知DX们有何高见。
2. commit
commit到底是先提示用户事务完成还是先释放锁等资源,偶看两本书两种说法。

回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
select的开始时候
select语句会象Oracle申请一个最大的scn
在抽取数据的时候,select语句只会选取比他取得的scn小的数据
如果数据的scn比申请的scn大的时候,
数据就会从rollback segment 中抽取
如果也没有就会出错snap shot too old
commit时候我想是同时的.也许是异步的..不感确认


回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
如果像楼上所说,select语句向orale申请最大的SCN,由于同一个事务中的所有select语句的读一致性,说明这些select语句具有相同的SCN,才可能再rollback segment中读到相同的数据。那么这个SCN应该是事务开始时就获得的,我觉得就不应该是在commit时获得的,这就是我的疑问所在。我以前看过postgresql数据库的代码,它们是在begin transaction时就分配一个xid(事务的唯一标识)。我不知道是不是这给我理解oracle带来影响?
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
SCN在select语句开始的时候就得到
因为select本身不是一个transaction
所以两个连续的select有可能会取得不同的SCN
select语句所取出的数据不具有相同的SCN,
而是这些取出的数据的SCN比select语句所得当的SCN要小


回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
guoge
这下应该明白了吧, :)
你要知道Oracle的事务是怎么开始怎么结束的。
Oracle的一个事务开始于: Insert Update Delete等DML语句,
结束于: rollback commit或者DDL语句。
严格的说Select不是DML语句。
上面说的获取SCN,仅仅是那来做比较数据块的SCN使用。
不是GG不是MM (人又漂亮了)
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
SCN是放在每个datafile的文件的头部,所以同一个datafile中的block具有相同的scn号。
但是select 是依靠什么原理来决定申请的SCN的大小呢?而且这个大小要是多大才合适呢?
请楼上的指教。
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
这个问题比较深奥,建议斑竹开个置顶专题。
这应该是ORACLE的核心技术之一了,也是和其他小系统的重大区别,让我们都来学习一下它的内部机制。
————————————
强烈建议!
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
依照oracle concept 的说法应该是释放锁资源在先,通知用户完成在后,我想这应该是标准的说法。
3. Oracle releases locks held on rows and tables.
4. Oracle marks the transaction complete.
这个问题是我做STS时碰到的,STS和ocp lz-023的书讲是通知用户在先,而sybex的教材讲法和concepts相同。如果考试碰到这题,保险起见我还是按讲义的答,尽管知道是错的。
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
commit的问题

我没有好好看书

既然书上是这么写的那就以书为准了


我个人认为是并行的


回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
我认为没有并行之说,就像写程序一样,总有个语句前后,只是说对于用户而言,好像是同步发生的。


好像我太抠细节了,没办法,以前看代码养成习惯了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行