风哥教程

培训 . 交流 . 分享
Make progress together!

Oracle分区表的维护和索引的相关注意事项

[复制链接]
内容发布:风哥| 发布时间:2014-2-10 11:34:23
Oracle分区表的维护和索引的相关注意事项

1、分区表索引重建rebuild index
-------------------------------
对于分区索引,不能整体进行重建,只能对单个分区进行重建(也就是物理存在的分区)。语法如下:
Alter index idx_name rebuild partition index_partition_name [online nologging]
Alter Index Index1 Rebuild Partition Sys_P21;

有子分区的本地索引,不能重建某分区,只能对每个子分区进行重建
Alter Index Index2 Rebuild subPartition P_20100205_GROT;

重建不可用的索引脚本,重建所有unUsable的索引
Select 'alter index ' || Index_Name || ' rebuild;'
  From User_Indexes
Where Status = 'UNUSABLE'
union
Select 'alter index ' || Index_Name || ' rebuild Partition ' ||
       Partition_Name || ';'
  From User_Ind_Partitions
Where Status = 'UNUSABLE'
union
Select 'alter index ' || Index_Name || ' rebuild subPartition ' ||
       subPartition_Name || ';'
  From User_Ind_subPartitions
Where Status = 'UNUSABLE';

add parttion
----------------------------------------------------------------------------------------------------------------------
Alter Table Test_Tab1 Add Partition P_20100730 Values Less Than (20100801);

1 如果有子分区,且定义了子分区模板,所有的子分区会自动添加
2 新加分区后,该区没有统计信息,全是空,如果表级不是global_satus,则表级的统计信息也会空
3. 新加分区后,如果表级统计是global_satus,还会出现out of range的问题(CBO估算的选择率很低)
4 解决2,3问题的方法是:copy_table_stats

exec dbms_stats.copy_table_stats(user, tabname => 'TEST_TAB1', srcpartname =>'P_20100206', dstpartname => 'P_20100207');


2、删除分区表tuncate and drop partition
------------------------------------------------------------------------------------------------------

truncatedrop可对有子分区的分区进行
ALTER TABLE TEST_TAB1 truncate Partition P_20100730;
ALTER TABLE TEST_TAB1 Drop Partition P_20100730;

它们会导致globl index的某些分区不可用,必须这样做
ALTER TABLE TEST_TAB1 truncate Partition P_20100730 update indexes;
ALTER TABLE TEST_TAB1 truncate Partition P_20100730 update global indexes;
ALTER TABLE TEST_TAB1 Drop Partition P_20100730 update indexes;
ALTER TABLE TEST_TAB1 Drop Partition P_20100730 update global indexes;


move partition
-------------------------------------------------------------------------------------------------------------------

有子分区的分区不能move,只能move每个子分区(也就是物理分区)
Alter Table Test_Tab1 Move Partition P_20100730; --报错,有子分区,只是一个逻辑分区

由于rowid变了,会导致所有相关索引unusable,必须这样做
Alter Table Test_Tab1 Move subPartition P_20100730_GROT update indexes;
Alter Table Test_Tab1 Move subPartition P_20100730_GROT update global indexes;
--Local Index没有更新

3、分离分区split partion
------------------------------------------------------------------------------------------------------------------

语法:
alter table <table_name>
split partition <partition_name> at (<value>)
into (partition <partition_name>, partition <partition_name>)
[update [global] indexes];

1 可以对有子分区的分区进行,自动split子分区
2 由于rowid变了,新分区和global index都变为unusable

eg:
Alter Table Test_Tab1
Split Partition P_20100730 At (20100715)
into (Partition P_20100715, Partition P_20100731);

4合并分区
------------------------------------------------------------------------------------------------------------------------------------
语法比较复杂,不同的分区不一样

合并range分区
ALTER TABLE Test_Tab1
Merge Partitions P_20100715, P_20100731 Into Partition P_20100730
[Update [global] Indexes];

1. 该分区有子分区
2. 有子分区,也可以单独合并子分区merge subpartition
3. global index是好的,但local index有问题,rowid会变化的都要用update indexes




上一篇:Oracle大数据量分区表统计信息的管理(DBMS_STATS.COPY_TABLE_STATS)
下一篇:数据库Oracle10g与Oracle11g分区表统计信息收集的方法
专业提供Oracle/MySQL/NoSQL/Linux数据库培训与技术支持服务,QQ号:113257174
关注风哥教程微信公众号itpux_com  ,了解本站最新技术资料的分享.

欢迎加QQ群,提供超多高质量Oracle/Unix/Linux技术文档与视频教程的下载。

Oracle/MySQL/Linux群4-5:189070296  150201289  
Oracle/MySQL/Linux群6-8:244609803   522261684   522651731
备注:请勿重复加群,另请注明 from itpux
回复

使用道具 举报

内容发布:xjcydf909| 发布时间:2014-10-28 13:29:32
学习学习~~~~~
回复

使用道具 举报

1框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门文章教程

  • Oracle19c数据库发布与下载地址
  • 风哥Oracle数据库巡检工具V1.0(附2.6网页
  • Oracle Database 12c 数据库100个新特性与
  • Oracle 12cR2 九大新功能全面曝光_详解云数
  • 实战PHP与MySQL权威指南PDF电子书下载
  • 大数据技术与应用入门培训教程(电子版下载
快速回复 返回顶部 返回列表