昨天面试时碰到的一个问题:rebuild index时,online与不使用online的区别
没有答上来,回来在网上找到的相关资料做为参考:http://blog.csdn.net/launch_225/article/details/7193560
面试官的意思是:online时在开始和结束时有量的锁(瞬间)。
使用online:LOCKTABLE FOR INDEX "REBUILD_IND_TEST_IND" IN ROW SHARE MODE
SQL> selectlocked_mode,object_name from v$locked_object l,dba_objects o wherel.object_id=o.object_id;
LOCKED_MODEOBJECT_NAME
-------------------------------------------------------------------------------------------------------------------------------------------
2 REBUILD_IND_TEST
4 SYS_JOURNAL_83598
SQL>/
LOCKED_MODEOBJECT_NAME
-------------------------------------------------------------------------------------------------------------------------------------------
3 ICOL$
3 IND$
3 SEG$
3 COL$
3 CCOL$
3 OBJ$
3 TAB$
3 CDEF$
3 OBJAUTH$
3 LOB$
3 COLTYPE$
3 SUBCOLTYPE$
3 NTAB$
3 REFCON$
3 OPQTYPE$
3 ICOLDEP$
3 ECOL$
3 COM$
3 IND_ONLINE$
3 JIJOIN$
3 JIREFRESHSQL$
3 INDREBUILD$
3 COMPRESSION$
3 OBJECT_USAGE
3 IDL_UB1$
3 IDL_CHAR$
3 IDL_UB2$
3 IDL_SB4$
3 NCOMP_DLL$
3 HIST_HEAD$
3 CACHE_STATS_1$
3 SUMPARTLOG$
3 SUMDELTA$
3 SNAP_LOADERTIME$
3 SDO_GEOR_DDL__TABLE$$
2 REBUILD_IND_TEST
6 SYS_JOURNAL_83598
37 rows selected.
不使用online:LOCK TABLE FOR INDEX"REBUILD_IND_TEST_IND" IN SHARE MODE NOWAIT
其实这个过程中也是有别的锁的,只是没有发现像使用Online一样,有大量的锁。
SQL> selectlocked_mode,object_name from v$locked_object l,dba_objects o wherel.object_id=o.object_id;
LOCKED_MODEOBJECT_NAME
-------------------------------------------------------------------------------------------------------------------------------------------
4 REBUILD_IND_TEST
上面简单测试,结果不太准确,因为每个时间点的锁情况是不一样的,也不好捕捉。请各位提供更好的方法。谢谢!