比如我现在有一个回滚表空间,设置为10M.那么我现在做了很多批量的操作,这些操作都没有提交,且操作的大小刚好为10M,即和回滚表空间一样大.那么此时,我进行了一个查询,这个查询的时间为5秒,查询的正好是我操作的这些语句,那么实际上Oracle取数据的时候应该从回滚表空间取.
正在我查询到第3秒时,又有用户进行了一个批量的delete操作,这些操作所占大小为1M,此时回滚表空间的位置已经占满了,而且都是active的状态,即未提交的事务,但是由于有新的删除,需要覆盖撤消段1M的空间.但是我这个SQL查询的是这个撤消表空间中的10M的数据,此时由于被覆盖了1M,那么会差1M的数据.问当我5秒查询结束时,这个查询中是不是有脏数据?
正在我查询到第3秒时,又有用户进行了一个批量的delete操作,这些操作所占大小为1M,此时回滚表空间的位置已经占满了,而且都是active的状态,即未提交的事务,但是由于有新的删除,需要覆盖撤消段1M的空间.但是我这个SQL查询的是这个撤消表空间中的10M的数据,此时由于被覆盖了1M,那么会差1M的数据.问当我5秒查询结束时,这个查询中是不是有脏数据?
后面的用户操作的数据也只是先前表里面存在的数据 又不是你前面用户的数据,
2,我没测试过,但如你所言的情况不外有两个可能,如果你的回滚段不可扩展,且覆盖时间未到,你新的delete估计会被阻塞;如果不能阻塞,而强行覆盖了回滚段的内容,应该会报ora-01555错误,提示快照太旧