|
1、这个设想:‘设想:每个更改都会有SCN,是在上一个SCN+1,按这种理解的话SCN应该是一个全局变量,由DBMS维护,并且自动加1.现在我开了三个会话…………’
本身有问题,
由设想得出的这个结论呢:如果是这样的话,也就是说log file 里面的SCN 号并不是递增写的了?
我想,log file中的SCN是否递增不知道。就算不是递增的,也不应是因为设想中说的由于rollback或commit时机造成的。
因为redo中的内容并不是在commit时才写的,所有操作发生时就已经写到redo中了。而commit时,是把内存中的redo信息写入文件log file,但把所有redo信息都写入文件,不管是rollback了的,还是commit的。我理解还应该是内存中所有redo信息,不分哪个session,哪个用户,一律写入。不知道对否,请高人指点。
2、关于:‘不知scn号是如何维护的,如果我现在做了关机操作,内存中的信息将会消失了,那么开机以后ORACLE是如何找到上一次的SCN号的呢?如果是根据log file 去找的话,那么我上面的一种情况显然会有问题的’
SCN号在control file中有记载,数据库启动时查找此SCN,来同步数据,将log file中没有commit的操作rollback,将数据文件中没有写入的数据写入。关机时,内存中的redo信息一定是未commit的,因为oracle保证commit的一定写到file中,所以丟了就丟了。 |
|