首页 > Linux操作系统 > Linux操作系统 > 一个关于redo size的实验
今天一个朋友问我,什么情况下insert不产生redo,这本来是个比较容易回答的问题,直接路径写,可本着任何问题都严谨回答的态度,我还是做了实验,得出来以下结论,试验过程不再赘述,就是比较v$mystat的redo size的变化。
结论:
archive mode
1.logging
1.1 insert----have redo
1.2 insert /*+ APPEND */----have redo
2.nologging
2.1 insert----have redo
2.3 insert /*+ APPEND */----do not have redo
在归档模式下,只有表是nologging,并且直接路径写才不会产生redo
noarchive mode
1.nologging
1.1 insert----have redo
1.2 insert /*+ APPEND */----do not have redo
2.logging
2.1 insert----have redo
2.2 insert /*+ APPEND */----do not have redo
在非归档模式下,无论表是否是nologging模式,直接路径写都不产生redo。
那么nologging和logging该怎么用?于是我做了以下测试
noarchive mode
1.create table t nologging as select * from all_objects----do not have redo
2.create table t as select * from all_objects----do not have redo
archive mode
1.create table t nologging as select * from all_objects ----do not have redo
2.create table t as select * from all_objects----have redo
那么nologging对于表到底起啥作用?在归档模式下,也就是大部分生产库上,如果要加速操作速度,并且不插入日志,你可以选择两种操作:
1.先create一个nologging的表,然后用insert /*+ APPEND */来插入数据。
2.如果要进行复制表的操作,那么直接create table t nologging即可。
nologging对索引也有作用,alter index test_1 nologging,能有啥用?在rebuild索引时,可以先将索引nologging,然后rebuild时就不会产生大量redo。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16628454/viewspace-600883/ ,如需转载,请注明出处,否则将追究法律责任。