上篇我们介绍了Oracle分区表在性能方面的优势,本篇集中在管理层面,讨论下管理层面的优势。
4、管理便捷性
相对于一个大数据对象(数据表、索引),分区化首先给我们带来的就是管理便捷。一个很大的数据表,无论是进行数据表重构,还是存储位置操作,都会面临连带负载问题。在生产环境下,这种负载变化尤其是我们希望避免的。
借助分区,我们可以将大对象划分为一系列小对象进行单独处理。也就是将一个突然性的大操作转变为一系列的小规模操作进行,从而减少对其他正在运行作业的影响。
下面是数据表T_PART,对应的本地索引。
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 SYSTEM
P2 SYSTEM
P3 SYSTEM
SQL> select partition_name, status from dba_ind_partitions where index_owner='SYS' and index_name='IDX_T_PART_IDP';
PARTITION_NAME STATUS
------------------------------ --------
P1 USABLE
P2 USABLE
P3 USABLE
当我们需要调整一个数据表分区的表空间,到users表空间,我们可以使用单独的命令进行处理,而不会影响到其他数据。
SQL> alter table t_part move partition p1 tablespace users;
Table altered
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 USERS
P2 SYSTEM
P3 SYSTEM
针对分区索引,如果出现失效的情况,我们也是可以进行部分rebuild。
SQL> select partition_name, status from dba_ind_partitions where index_owner='SYS' and index_name='IDX_T_PART_IDP';
PARTITION_NAME STATUS
------------------------------ --------
P1 UNUSABLE
P2 USABLE
P3 USABLE
SQL> alter index idx_t_part_idp rebuild partition p1;
Index altered
SQL> select partition_name, status from dba_ind_partitions where index_owner='SYS' and index_name='IDX_T_PART_IDP';
PARTITION_NAME STATUS
------------------------------ --------
P1 USABLE
P2 USABLE
P3 USABLE
此外,Oracle提供的很多针对分区的操作,比如导出特定分区数据、删除分区数据等,都是管理便捷性的体现。
5、数据删除
对大数据表,数据退出生命周期之后,就可以从数据表中进行删除。从数据活跃性理论角度看,任何数据在数据表中都是有生命周期的,一旦经过了业务处理高峰期,就应该会在某个特定标准框架下被删除。
大数据量删除是应用运维领域一个比较麻烦的事情。因为通常情况下,删除数据总数虽然很大,但是往往占到全部数据表比例不高。比如,每次Purge数据,可能都是数据表中最老的一周数据,而数据表中包括了近三个月数据。
一种结合设计的手段是将分区融入到过程中,将一次删除的数据放在相同的分区上,这样有两个好处。一个是可以将活性相同的数据放在相同位置上,避免低活性数据的影响。另一个是可以借助分区层次上的操作手段,快速进行数据删除操作。
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 USERS
P2 SYSTEM
P3 SYSTEM
SQL> set timing on;
SQL> alter table t_part drop partition p3;
Table altered
Executed in 0.453 seconds
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 USERS
P2 SYSTEM
Executed in 0.015 seconds
注意:Drop Partition操作和普通的delete是有显著性区别的。Delete操作的核心在于“打标记”。Server Process检索所有符合条件的数据记录,标记为删除。这个过程的时间往往和数据量相关。
而Drop Partition是一个DDL过程,这个过程中,数据并没有被删除,而是数据表的分区定义发生了变化,让Oracle“不再承认”分区的存在。这种方法删除数据和Truncate Table有相似之处。优点是速度快,适合大数据分区表的删除动作。
作为提醒注意一下,对于drop partition操作,Global Index和Local Index的行为是有差异的,这一点和上面move操作的结果相同。如果是Local Index,其他分区的变化并不影响本分区的索引作用。所以,Local Index还是存在的。但是,Global Index由于结构上的特殊性,需要进行额外的rebuild操作。
当然,我们可以在drop partition的时候,连带加入update global indexes字句到drop partition命令中,实现自动的global索引重构。
SQL> create index idx_t_part_idg on t_part(object_name);
Index created
Executed in 0.983 seconds
SQL> alter table t_part drop partition p2 update global indexes;
Table altered
Executed in 0.609 seconds
SQL> select status from dba_indexes where owner='SYS' and index_name='IDX_T_PART_IDG';
STATUS
--------
VALID
Executed in 0.031 seconds
6、数据归档
归档Archive和删除是有一些差别的。删除表示的是数据不再需要,可以直接永久删除。实际生产环境中,直接删除的情况是比较少的,大部分情况是需要保留一个备份数据。只是将这个备份数据Offline出系统范围。
这个时候,使用分区数据表技术,可以快速的进行归档动作,卸载数据。先准备数据。
SQL> drop table t_part;
Table dropped
Executed in 1.03 seconds
SQL> create table t_part
2 partition by list (owner)
3 (
4 partition p1 values('SYS'),
5 partition p2 values('PUBLIC'),
6 partition p3 values(default)
7 )
8 as
9 select * from dba_objects;
Table created
Executed in 1.856 seconds
我们希望归档P2数据,可以先创建一个空数据表作为载体。
SQL> create table t_arch_p2 as select * from t_part where 1=0;
Table created
Executed in 0.094 seconds
SQL> alter table t_part exchange partition p2 with table t_arch_p2;
Table altered
Executed in 0.094 seconds
SQL> select count(*) from t_arch_p2;
COUNT(*)
----------
27703
Executed in 0.047 seconds
Exchange partition操作是一种非常强大的工具。语句基于操作定义层面的变化,将数据分区和数据表定义转换。所以,exchange partition操作的速度是非常有优势的。
将分区拆分出数据表t_part,到t_arch_p2独立数据表之后,我们接下来可以将其导出数据库或者备份到其他设备上。
下面我们继续看其他管理方面分区的用法。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-1061914/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-1061914/