这里有很多内容!贵公司的人基本上是对的,只是更改会在进行时写入内存中的数据块,甚至在提交之前;并且它们完全独立于您提交的时间写入磁盘(可能之前,可能之后,从不作为提交操作的一部分)。
1) UNDO_RETENTION 与您的更改何时写入数据块无关,无论是在内存中还是在磁盘上。UNDO_RETENTION 控制在您提交更改后撤消更改所需的数据保留多长时间。目的是在您提交之前开始的其他查询或可序列化事务可能仍需要该数据。参考:http: //download.oracle.com/docs/cd/B19306_01/server.102/b14231/undo.htm#sthref1477
2)当你进行更新时,内存中的数据块会被修改。它们可能会也可能不会写入磁盘(我相信甚至在您提交之前);这是由后台进程完成的。此外,重做信息被写入重做日志缓冲区。撤消生成并存储在撤消段中。
3) 当您提交时,Oracle 确保您的重做信息写入磁盘,并将撤消数据标记为已提交。但它不会将内存中更改的数据块写入磁盘,也不会返回并将每个块标记为已提交。这是为了使提交尽可能快。参考:http: //download.oracle.com/docs/cd/B19306_01/server.102/b14220/transact.htm#sthref628
4) The data blocks in memory will be marked as committed either when they are written out to disk by the background process, or the next time they are used (by a SELECT or any other operation). That's what the AskTom note is discussing. This is not about whether your changes to data are written to the block; it is about whether they are marked as committed in the block itself.