|
Re: Re: 再问"undo segment entry记录在哪里?"
最初由 jametong 发布
[B]
我的印象是.
在insert /*+ append /的情况下, Oracle并不是直接在原来的segment上进行扩展, 而是先分配一个临时的segment来存放这些数据, 在整个命令成功之后, 再将这个临时的segment加到insert的对象上去..
如果需要回滚, 系统也会直接将这个临时的segment再摘除..(通过recusive sql 直接修改seg$等相关表).
这也是为什么 insert /*+ append /之后, 我们不能对这个表进行操作的原因, 因为如果我们可以进行正常的insert/update就可能导致临时segment嫁接过来的那些extent出现异常, 导致数据库的不一致.. [/B]
如果按照这个观点,那岂不是分配新的extent?
而众所周知,insert /*+ append */ 是从hwm 之上进行分配空间,并不是分配新的extent ! 我认为如果需要扩展,还是在segment 上直接进行extent 分配!! |
|