|
哦,看了各位的回复,让我想起了更多的问题,等我回去想一想再贴出来!
对了,我上面有一个问题,为什么一直没人回答呢?再贴一遍问题如下:
还有一个问题:
我做update 或者 delete 等更新操作,但还没有commit 的时候也会产生scn号吗?
如果有的话,下面一种情况怎么办:
设想:每个更改都会有SCN,是在上一个SCN+1,按这种理解的话SCN应该是一个全局变量,由DBMS维护,并且自动加1.现在我开了三个会话,分别是 A,B,C,每个会话都做更新操作,按上面的理解我三个会话都会有SCN号,假设A,B,C的三个SCN号分别为1000,1001,1002,过了一段时间,会话B做了一个rollback操作,并关闭B会话,因此SCN为1001也就不存在了,现在会话C做了一个COMMIT操作,因此会话C的剩余redo log和SCN将写入到log file里面去,我想问一下,会话C写到log file 中去的SCN号是否就是1002呢?如果是这样的话,当会话C提交后,会话A也做了COMMIT操作,因此会话A的剩余redo log 和SCN 1000也写入log file 中,现在log file 文件应该看起来是这样的:
.......
.......
会话C所做的一些操作
会话C的SCN号,1002
会话A所做的一些操作
会话A的SCN号:1000
如果是这样的话,也就是说log file 里面的SCN 号并不是递增写的了?
不知scn号是如何维护的,如果我现在做了关机操作,内存中的信息将会消失了,那么开机以后ORACLE是如何找到上一次的SCN号的呢?
如果是根据log file 去找的话,那么我上面的一种情况显然会有问题的
上面的老兄虽然回答了一些,但主要的还没有答复哦
先谢了 |
|