Oracle 12c 数据库临时UNDO功能
12c的临时UNDO是专门为临时表准备的。
首先了解一下临时表:一种为了保存临时数据而被大量使用的特殊表,在临时表上的DML比普通表快,而得到这个好处的主要原因是在修改临时表的数据时基本不会因此直接产生redo,但是,临时表上发生的事务的UNDO数据对应的redo会照常产生,进而写入redo日志。
当然认为这种redo没有必要存在的人不在少数,如此即能进一步加快临时表上的DML执行速度。Oracle 12c接受了这个建议,可以使临时表的UNDO的redo不再产生(听起来有点像绕口令)。
刚刚提到临时表的修改不会直接产生redo,即便是有也是UNDO的redo。那么到底在技术上如何避免UNDO的redo产生呢?很讨巧,Oracle12c可以让临时表的UNDO生成在临时表空间中,由于使用了临时数据块,所以和其他临时数据一样,临时表的UNDO就没有对应的redo了!这种新的模式称为临时UNDO。
整理一下临时UNDO的益处:
1. 降低对UNDO表空间的占用。
2. 进一步减少redo的产生,提高DML的速度。
3. 最后是一个笔者个人非常喜欢的功能:在Active Data Guard配置中的Standby 数据库上终于可以直接在临时表上执行DML了,这个特点对用于报表的ADG来说意义重大!
那么如何在12c数据库上启用这个功能呢?
首先请确认COMPATIBLE初始化参数设置为不小于12.1.0.0.0。
然后:
ALTER SYSTEM SET TEMP_UNDO_ENABLED = TRUE; --系统范围
复制代码
ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE; --会话范围
复制代码
完