SQL>createindexidx_testontest(id1)tablespaceIDXnologgingonlineparallel4;Indexcreated.SQL>alterindexidx_testnoparallel;Indexaltered.SQL>selectdegreefromdba_indexeswhereindex_name='IDX_TEST';DEGREE----------------------------------------1

在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c)createindexidx_testontest(a,b,c)online;altertabletestaddconstraintcons_testunique(a,b,c)usingindexidx_test;

先移动表的表空间:SQL>altertabletestmovetablespaceLLC;Tablealtered.再移动索引的表空间:SQL>alterindexidx_testrebuildtablespaceLLC;Indexaltered.

查询索引(或者表)在数据文件上的分布:SELECTDISTINCT(b.file_name),a.owner,a.segment_nameFROMdba_extentsa,dba_data_filesbWHEREa.file_id=b.file_idANDa.segment_name='IDX_LOTHISTORY_MODULEID'ANDa.owner='RPT'

重建索引,关注临时表空间的使用:

SELECTround((f.bytes_free+f.bytes_used)/1024/1024,2)"totalMB",round(((f.bytes_free+f.bytes_used)-nvl(p.bytes_used,0))/1024/1024,2)"FreeMB",d.file_name"Datafilename",round(nvl(p.bytes_used,0)/1024/1024,2)"UsedMB",round((f.bytes_free+f.bytes_used)/1024,2)"totalKB",round(((f.bytes_free+f.bytes_used)-nvl(p.bytes_used,0))/1024,2)"FreeKB",round(nvl(p.bytes_used,0)/1024,2)"UsedKB",0"FragmentationIndex"FROMsys.v_$temp_space_headerf,dba_temp_filesd,sys.v_$temp_extent_poolpWHEREf.tablespace_name(+)=d.tablespace_nameANDf.file_id(+)=d.file_idANDp.file_id(+)=d.file_id