`

有关Oracle表分区进行(DML)维护后对索引的影响的分析

阅读更多

今天对数字电视系统的大表的几个分区进行了维护,总结以下经验也是为了以后能够更好的来维护分区表。
对索引的几种情况分别进行总结:
1、如果删除分区,则会导致该表下所有的索引状态处于不可用状态(除本地前缀索引外);
2、如果重命名表,同上
3、如果truncate分区数据,同上;
4、重命名分区,不会对索引产生任何影响。
解释:
对于分区表,索引有以下几种方式:
1、普通索引,与分区无关,就是平常的索引;
2、全局分区索引,独立于分区的索引,按照独立的分区方式分区。按照网上介绍的和个人的实践,这个方式查询效率不高;
3、本地前缀分区索引,即基于分区表的字段进行的分区,创建方式很简单,在普通索引建立的语句后面加个local即可,效率相对于普通索引高一点;
4、本地非前缀分区索引,即非基于分区表的分区字段,除非是特殊情况,这种方式效率较低,不推荐使用。

 

当索引处于不可用状态时,数据将不能插入,会提示:ora-01502:state unusuable。
且这种情下,只要表中有一个索引处于不可用状态,都会使表处于不可插入状态。

可以修改参数来实现这种情况下的数据插入问题:alter session set skip_unusable_indexes=true;
但是有种情况除外,当有存在唯一主键索引时,数据依然不能插入。
而且主键索引也不能drop,因此想通过删除主键索引再修改参数来实现数据的可插入是不可实现的。
因此这种情况下(索引状态处于不可用状态时)较好的办法是,先删除要进行本地索引分区的索引(此时尚未进行本地分区),
创建本地分区索引后,再drop表分区,这样的好处是本来drop分区后需要重建n+1个索引,
现在只要重建n个索引,这样的话就省去了重建这个索引的时间了。

对于本地分区前缀索引,删除分区只会对所在分区的部分产生影响,对于其他的部分则仍然是正常状态的。

另:修改参数只能对于当前session所在的用户有效,对于其他session,如果没有设置该条件,数据还是处于不可插入状态的。

以上情况,需要在实际的应用中充分考虑到这些问题才能最大的减少所带来的数据丢失。


重命名分区不会对索引状态产生影响。

注:
1、如何删除分区
alter table [table_name] drop partition [partition_name];

2、如何删除与创建本地分区索引
删除:drop index [index_name];
创建:create index [index_name] on [table_name]([index_column]) tablespace [tablespace_name] local [nologging/logging];
注意:
当在大表上建立索引时,使用NOLOGGING选项可以最小化重做记录.使用NOLOGGING选项有以下优点.
节省重做日志空间
降低索引建立实际
提高索引并行建立的性能.
但是nologging参数不建议在部署了dataguard的情况下使用,因为dataguard是基于归档日志来进行远程备份的。


3、如何重建索引:
alter index [index_name] rebuild [parallel {number}] [nologging/loggin];

4、如何创建分区:
--范围分区
create table [table_name] partition by range([col_name])(
partition [part_name] values less than [range_value] tablespace [tablespace_name],
...
)
--列表分区
--hash分区


5、如何截断分区:
alter table [table_name] truncate partition
延伸:truncate一个表或一个分区,能使HWM重至为0,而delete则不能。

6、如何重命名分区:
alter table [table_name] rename partition [old_name] to [new_name];


7、如何查询索引状态:
select ind.table_name, ind.index_name, ind.status
from user_indexes ind
where ind.index_name = '[index_name]'
and ind.table_name = '[table_name]'

8、如何添加分区:
alter table [table_name] add partition [partition_name] values less than([range_value]).

分享到:
评论
1 楼 syzyaccp 2011-03-09  
当索引分区删除后,除了 本地分区索引(前缀、非前缀)还有效外,为什么与分区无关的普通索引也失效了,这个是为什么啊? 这些索引的具体维护逻辑结构如何啊?麻烦博主能介绍一下不,非常感谢。

相关推荐

    深入学习分区表及分区索引(详解oracle分区).docx

    以下是对Oracle分区表和分区索引的深入解析: 1. **何时使用分区**: - 当表的数据量超过2GB时,分区有助于避免32位操作系统下的文件大小限制,同时减少大规模数据的备份时间。 - 对于包含历史数据的表,如按月份...

    oracle分区与索引

    ### Oracle 分区与索引详解 #### 一、Oracle 分区概述 在Oracle数据库中,分区是一种物理数据组织技术,它将一个大的表或索引分成多个较小的部分,每个部分都可以独立管理。通过分区,可以显著提高查询性能,简化...

    深入学习分区表及分区索引(详解oracle分区.docx

    这种技术尤其适用于处理超过2GB的大表,这在32位操作系统中是一个重要的考虑因素,因为这样的大文件可能对系统的性能和备份时间造成影响。 Oracle支持四种主要类型的分区:范围分区(Range Partitioning)、列表...

    ORACLE表分区指引

    通过对大表进行分区,可以提高数据可用性,因为单个分区出现问题时,只影响该分区的数据,而不会影响整个表。 3. 数据管理:管理大型表需要花费较长时间,包括加载、构建索引和执行部分删除操作。分区可以使这些...

    Oracle分区表和索引

    Oracle分区表和索引是一种高效的数据管理策略,尤其适用于处理大数据量和包含历史数据的表。当表的大小超过2GB,特别是在32位操作系统上,分区能够有效地提高查询性能,减少备份时间,并且便于管理和维护。Oracle...

    Oracle分区技术介绍

    Oracle分区技术是一种数据库管理系统(DBMS)特性,用于将大型表和索引分割成更小、更易管理和处理的部分,从而提升查询性能和数据管理效率。这种技术特别适用于数据仓库和决策支持系统(DSS),因为这些系统通常...

    oracle表分区总结

    Oracle 表分区是一种数据库优化技术,它将...然而,分区也需要注意一些潜在的挑战,如维护成本、分区键的选择、以及对DML操作的影响等。因此,在实施分区策略时,应充分考虑数据特性、查询模式以及数据库的整体架构。

    ORACLE分区表的概念及操作

    总结来说,Oracle分区表是一种有效管理大规模数据的手段,通过合理分区,可以显著提升查询效率,简化维护工作,并提供更高的数据可用性。然而,使用分区也需要权衡其带来的复杂性和额外的存储需求。正确理解和应用...

    oracle 表分区

    分区技术对应用程序透明,这意味着对分区表的操作与非分区表并无太大差异,用户仍使用标准的SQL DML命令进行数据操作。 分区带来的益处主要包括: 1. **增强可用性**:即使某一分区发生故障,其他分区的数据仍然...

    oracle表分区

    本篇将深入探讨Oracle表分区的相关知识点。 首先,我们需要理解表分区的基本概念。在Oracle中,表分区是通过将一个大表逻辑上划分为多个部分,每个部分称为一个分区,这些分区可以独立存储和管理。这种技术主要适用...

    ORACLE重建索引总结

    1. 判断是否重建索引,可通过`ANALYZE INDEX`和`index_stats`表进行评估。 2. 重建索引有删除重建(不推荐)、`ALTER INDEX REBUILD`(推荐,尤其是在线模式)和`ALTER INDEX COALESCE`(节省空间,但不能移动索引)...

    09 oracle的索引 PPT

    3. 分区索引:在大型表上使用,通过分区减少索引的扫描范围。 4. 快速全局索引扫描(Full-Index Scan):当索引条目少于表的行数时,全索引扫描可能比全表扫描更快。 六、索引的限制 1. 空值处理:Oracle中的空值在...

    Oracle索引详解

    然而,创建索引并非总是有益的,因为每次对表进行DML操作(INSERT、UPDATE、DELETE)时,Oracle需要维护索引结构,这会增加额外的I/O开销。因此,创建索引需要权衡查询性能的提升和由此带来的资源消耗。 在Oracle中...

    Oracle 分区Partitioning培训

    - **定义与目的:** Oracle 分区(Partitioning)是一种将大型表或索引分割成更小、更易于管理的部分的技术。通过分区,可以提高数据可用性、简化大型表的管理,并改善查询性能。 - **分区的优势:** - 提高数据...

    Oracle的分区技术.pptx

    以下是对Oracle分区技术的详细解释: **什么是分区?** 在Oracle数据库中,分区是将大数据对象(如表或索引)划分为多个独立的、较小的部分,每个部分称为一个分区。这些分区可以分布在不同的表空间中,并且可以...

    oracle分区技术-大批量数据操作.ppt

    Oracle数据库的分区技术是一种高效管理和处理大量数据的策略,它将大表或索引分割成较小的物理段,称为分区。这种技术的核心理念是“分而治之”,即将大规模的数据对象依据特定的字段值(分区键)划分为多个独立的...

    ORACLE数据库分区技术及其应用.pdf

    在对分区表进行数据查询时,查询优化器的分区裁剪功能使得查询仅访问数据所在的分区,避免了对其他分区的访问。在涉及多个分区的增删改等操作时,分区之间可以实现并行,如果分区随所在的表空间分布在不同的物理存储...

    Oracle数据库中分区表的操作方法详解

    2. **维护便捷**:故障修复时,只需针对有问题的分区进行操作,无需对整个表进行干预。 3. **均衡I/O**:通过将不同分区映射到不同的磁盘,可以分散I/O负载,提升系统整体性能。 4. **查询性能提升**:查询时仅扫描...

Global site tag (gtag.js) - Google Analytics