三通IT学院 门户 数据库 查看内容

2014-8-16 09:01
Oracle 分区表的技术与应用总结 四

摘要 : 4.3 索引重建问题 (1)分区索引 对于分区索引,不能整体进行重建,只能对单个分区进行重建。语法如下: Alter index idx_name rebuild partition index_partition_name 说明: online:表示重建的时候不 ...

时光与梦2014-8-16 09:0119313
原作者: Liuxuebo
4.3 索引重建问题

(1)分区索引
对于分区索引,不能整体进行重建,只能对单个分区进行重建。语法如下:
Alter index idx_name rebuild partition index_partition_name [online nologging]
说明:
online:表示重建的时候不会锁表。
nologging:表示建立索引的时候不生成日志,加快速度。
      
如果要重建分区索引,只能drop表原索引,在重新创建:
SQL>create index loc_xxxx_col on xxxx(col) local tablespace SYSTEM;
这个操作要求较大的临时表空间和排序区。

示例:
SQL> select index_name,partition_name from user_ind_partitions where index_name='I_TIME_GLOBAL';
INDEX_NAME                     PARTITION_NAME
------------------------------ ------------------------------
I_TIME_GLOBAL                  P1
I_TIME_GLOBAL                  P2

SQL>alter index I_TIME_GLOBAL rebuild partition p1 online nologging;
索引已更改。
SQL>alter index I_TIME_GLOBAL rebuild partition p2 online nologging;
索引已更改。

(2)全局索引
Oracle 会自动维护分区索引,对于全局索引,如果在对分区表操作时,没有指定update index,则会导致全局索引失效,需要重建。

SQL> select owner,index_name,table_name,status from dba_indexes where INDEX_NAME='IX_PDBA_GLOBAL';

owner         index_name                     table_name status
------------------------------ ------------------------------ ---------- -------
sys           ix_pdba_global                 pdba       valid

删除一个分区:
SQL> alter table pdba drop partition p2;
表已更改。

SQL> select owner,index_name,table_name,status from dba_indexes where INDEX_NAME='IX_PDBA_GLOBAL';
owner            index_name          table_name status
------------------------------ ------------------------------ ---------- -------
sys             ix_pdba_global         pdba       valid

split 分区:
SQL> alter table pdba split partition P4 at(TO_DATE('2010-12-21 00:00:00','YYYY-MM-DD HH24:MI:SS')) into (partition P4, partition P5);
表已更改。

SQL> select owner,index_name,table_name,status from dba_indexes where INDEX_NAME='IX_PDBA_GLOBAL';
owner        index_name                     table_name status
------------------------------ ------------------------------ ---------- -------
sys          ix_pdba_global                 pdba       valid

drop 分区时使用update indexes
SQL> alter table pdba drop partition P4 UPDATE INDEXES;
表已更改。
SQL> select owner,index_name,table_name,status from dba_indexes where INDEX_NAME='IX_PDBA_GLOBAL';
owner          index_name           table_name status
---------------------- ------------------------------ ---------- -------
sys             ix_pdba_global        pdba       valid


做了几个drop分区操作,全局索引没有失效,有点奇怪。 不过如果在生产环境中,还是小心点。

重建全局索引命令如下:
       Alter index idx_name rebuild [online nologging]
示例:
SQL> Alter index ix_pdba_global rebuild online nologging;
索引已更改。



补充一点,分区表存储空间的问题:
SQL> select table_name,partition_name,tablespace_name from user_tab_partitions where table_name='DBA';
TABLE_NAME PARTITION_NAME                 TABLESPACE_NAME
---------- ------------------------------ ------------------------------
DBA        P1                             SYSTEM
DBA        P2                             SYSTEM
DBA        P3                             SYSTEM
DBA        P4                             SYSTEM
通过user_tab_partitions 表可以查看到每个分区对应的tablesapce_name. 但是,如果通过all_tables 表,却查不到分区表对应表空间的信息。
分区表:
SQL> select owner,table_name,tablespace_name,cluster_name from all_tables where table_name='DBA';
OWNER TABLE_NAME TABLESPACE_NAME                CLUSTER_NAME
----- ---------- ------------------------------ -----------------------------------------------------
SYS   DBA
普通表:
SQL> select owner,table_name,tablespace_name,cluster_name from all_tables where table_name='DAVE';
OWNER TABLE_NAME TABLESPACE_NAME                CLUSTER_NAME
----- ---------- ------------------------------ ---------------------------------------------------
SYS   DAVE       SYSTEM

1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

收藏 分享 邀请
发表评论

最新评论

引用 pan2009 2016-8-2 18:09
好东东我也来学习,谢谢楼主分享!
引用 kkltkklt 2016-8-3 09:59
于分区索引,不能整体进行重建,只能对单个分区进行重建。
引用 sunxiaopeng10 2016-8-9 07:49
最佳优化实战培训 3
引用 renchao7 2016-8-13 11:25
好东东我也来学习,谢谢楼主分享!
引用 renchao7 2016-8-13 11:26
好东东我也来学习,谢谢楼主分享!
引用 sole 2016-8-16 13:51
Thank you for you share
引用 caara1019 2016-8-25 17:03

早上辛苦啦 ,版主,好文赞一个!
引用 nick_liu24 2016-9-3 09:41
very good
引用 793985753 2016-9-4 13:50
11111111111111111111
引用 qq_3322 2016-9-9 09:00
好东东我也来学习,谢谢楼主分享!
引用 zwwhb 2016-9-18 12:50
好东西,学习了
引用 caara1019 2016-10-20 10:38
感谢楼主分享
引用 yu_241 2016-10-24 11:24
学习了,谢谢共享

查看全部评论(13)

返回顶部