oracle分区操作文档
ORACLE按时间创建分区表

ORACLE按时间创建分区表有些项⽬中可能会涉及到表的分区(有的表⼤⼩在70G左右)下⾯简单写⼀下创建分区表过程1、创建测试表⾸先创建测试表weihai_test语句如下create table weihai_test (id int notnull,join_date DATE);以上表中join_date字段为分区表字段2、插⼊数据2.1、模拟插⼊30万条数据plsql/developer ⼯具执⾏declarei int := 1;year VARCHAR2(20);beginloopyear :=CASE mod(i, 3)WHEN 0 THEN'2015-12-01 00:00:00'WHEN 1 THEN'2016-12-01 00:00:00'ELSE'2017-12-01 00:00:00'END;insert into weihai_test values(i, to_date(year, 'yyyy-mm-dd hh24:mi:ss'));exit when i= 300000;i := i+ 1;end loop;end;commit;2.2、查看是否插⼊成功select count(1) from weihai_test;3、重命名原表,⽣成临时表数据插⼊完成后,重命名原表,这⾥演⽰的是停机之后的操作,如果是在线操作,建议使⽤oracle 在线重定义功能来保障数据不丢失rename weihai_test to weihai_test_his; (这个过程只建议应⽤停机的时候做)4、创建分区表create table weihai_test (id int notnull,join_date DATE )partition by range(join_date)(partition weihai_test_2016_less values less than (to_date('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) tablespace fmt, partition weihai_test_2016 values less than (to_date('2017-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) tablespace fmt,partition weihai_test_2017 values less than (to_date('2018-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) tablespace fmt,partition weihai_test_max values less than (to_date('2999-12-31 23:59:59','yyyy-mm-ddhh24:mi:ss')) tablespace fmt);5、数据转移表创建完成之后,开始导数,insert /*+append*/ into weihai_test (id,join_date) selectid,join_date from weihai_test_his;commit;6、数据对⽐导⼊完成之后,对⽐两张表的数据,⼀样就表⽰导⼊成功select count(1) from weihai_test_his;select count(1) from weihai_test;7、查看执⾏计划查询数据,查看执⾏计划,与临时表weihai_test_his相⽐较,是否扫描的更少explain plan for select * from weihai_test_his where join_date <= date'2016-01-01'; select plan_table_output from table(dbms_xplan.display());同样的查询在分区表执⾏⼀遍explain plan for select * from weihai_test where join_date <= date'2016-01-01'; select plan_table_output from table(dbms_xplan.display());相⽐之下,分区表耗费的资源更少8、删除临时表数据导⼊完成之后,drop临时表drop table weihai_test_his;。
oracle动态创建分区语法

oracle动态创建分区语法Oracle数据库中提供了动态创建分区的语法,这种方式可以让我们在进行分区表的查询和管理时更加灵活和高效。
在本篇文章中,我将为大家详细讲解Oracle动态创建分区语法的操作步骤及注意事项。
步骤一:确定分区键值类型在使用Oracle动态创建分区语法之前,我们需要先确定分区键值的类型。
常见的分区键值类型包括数字、日期、字符等。
不同的类型需要使用不同的语法进行分区。
步骤二:创建分区表在创建分区表时,我们需要定义分区键和分区类型。
分区键通常是表中的某一列,而分区类型则是我们在第一步中确定的分区键值类型。
例如,如果我们要以日期为分区键值类型,则分区类型应该是“按日期分区”。
使用动态创建分区语法时,我们可以在创建分区表的DDL语句中包含“PARTITION BY RANGE”或“PARTITION BY LIST”等关键字,以定义相应的分区方式。
步骤三:动态创建分区使用Oracle动态创建分区语法时,我们可以使用ALTER TABLE 语句进行操作。
下面是根据日期动态创建分区的例子:ALTER TABLE orders ADD PARTITION order_part_20210101 VALUES LESS THAN(TO_DATE('20210101','YYYYMMDD'));上述语句的意思是,在orders表中动态创建一个名为“order_part_20210101”的分区,该分区的分区键值小于“20210101”。
当我们需要创建更多的分区时,只需要通过ALTER TABLE语句重复上述步骤即可。
需要注意的是,在动态创建分区时,我们需要按照正确的分区键值范围进行创建,否则可能会导致查询结果不准确。
总结:Oracle提供了动态创建分区的语法,可以让我们更加灵活高效地进行分区表的管理和查询。
使用该方法时,我们需要确定分区键值类型、创建分区表并使用ALTER TABLE语句进行动态创建分区。
oracle表分区创建

oracle表分区创建⼀、什么是分区表表分区有以下优点:1、数据查询:数据被存储到多个⽂件上,减少了I/O负载,查询速度提⾼。
2、数据修剪:保存历史数据⾮常的理想。
3、备份:将⼤表的数据分成多个⽂件,⽅便备份和恢复。
4、并⾏性:可以同时向表中进⾏DML操作,并⾏性性能提⾼,均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
5、增强可⽤性:如果表的某个分区出现故障,表在其他分区的数据仍然可⽤;6、维护⽅便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;7、改善查询性能:对分区对象的查询可以仅搜索⾃⼰关⼼的分区,提⾼检索速度。
8、需要注意的是包含LONG、LONGRAW数据类型的表不能分区,如果表格⼤于2G需要考虑分区。
⼆、分区表的种类1、RANGE 范围分区说明:针对记录字段的值在某个范围。
规则:(1)、每⼀个分区都必须有⼀个VALUES LESS THEN⼦句,它指定了⼀个不包括在该分区中的上限值。
分区键的任何值等于或者⼤于这个上限值的记录都会被加⼊到下⼀个⾼⼀些的分区中。
(2)、所有分区,除了第⼀个,都会有⼀个隐式的下限值,这个值就是此分区的前⼀个分区的上限值。
(3)、在最⾼的分区中,MAXVALUE被定义。
MAXVALUE代表了⼀个不确定的值。
这个值⾼于其它分区中的任何分区键的值,也可以理解为⾼于任何分区中指定的VALUE LESS THEN的值,同时包括空值。
若不添加maxvalue的分区插⼊数值⼀旦超过设置的最⼤上限会报错。
例⼀,按date范围创建分区表CREATE TABLE PART_TAB_CUSTOMER_BY_RANGE(CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,FIRST_NAME VARCHAR2(30) NOT NULL,LAST_NAME VARCHAR2(30) NOT NULL,PHONE VARCHAR2(15) NOT NULL,EMAIL VARCHAR2(80),SEX VARCHAR2(10),STATUS VARCHAR2(10),INSERT_DATE DATE)PARTITION BY RANGE (INSERT_DATE) --按时间分区(PARTITION DATE_RANGE1 VALUES LESS THAN (TO_DATE(' 2001-01-01', 'YYYY-MM-DD')) TABLESPACE part_Data1,PARTITION DATE_RANGE2 VALUES LESS THAN (TO_DATE(' 2007-01-01', 'YYYY-MM-DD')) TABLESPACE part_Data2,PARTITION DATE_RANGE3 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3)例⼆、按照number范围分区PARTITION BY RANGE (CUSTOMER_ID) --按id分区(PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE part_Data1,PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE part_Data2,PARTITION CUS_PART2 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3)2、LIST 列表分区说明:该分区的特点是某列的值只有有限个值,基于这样的特点我们可以采⽤列表分区。
Oracle子分区(subpartition)操作

Oracle⼦分区(subpartition)操作要重新定义⼤量分区表。
⾸先看 SQL Reference ⼤致了解了 Oracle 的分区修改操作。
Alter table 语句的alter_table_partitioning ⼦句可以分为以下⼏类:全局:modify_table_default_attrs分区:Modify, Move, Add, Coalesce, Drop, Rename, Truncate, Split, Merge, Exchange⼦分区:Set Template, Modify, Move, Drop, Rename, Truncate, Split, Merge, ExchangeMove: 将分区、⼦分区移动到新的表空间。
Coalesce: 只适⽤于 hash 分区的表。
作⽤是减少⼀个 hash 分区;⽅法是将最后⼀个分区的数据分布到前⾯的分区中,再删除此分区。
Merge: 将两个分区、⼦分区合并为⼀个新分区,并删除两个旧分区。
Merge 可以合并 List 和相邻的 Range 分区,只能合并属于同⼀分区的 List ⼦分区。
Exchange: 交换表分区。
我要做的是添加 List 分区、List ⼦分区、修改⼦分区模板。
1. 添加 List 分区:如果表使⽤ List 分区,且创建了 Default 分区,则此表上⽆法执⾏ Add 分区操作,必须 Split 此表的 Default 分区。
Alter table 语句提供了split_table_partition ⼦句。
此⼦句的功能是创建两个新分区(新建 Segment,可以指定新的物理属性),移动 partition 指定的分区的数据,满⾜ values 条件的放⼊ into 的第⼀个分区,其余的放⼊第⼆个分区,之后原分区。
Oracle 将⾃动 Split Local Index,因此需要重建索引。
下⾯的语句为表 A_CHECKBILL_MONTH 添加了⼀个分区 P_6230000,将原有 P_OTHERS 分区中 COMPANY_ID = 6230000 的数据存储到新分区 P_6230000 ,剩余数据存储到 P_OTHERS。
oracle创建分区表语法

oracle创建分区表语法在Oracle中,分区表是一个物理数据库对象,它允许您将一个大表的数据分割成较小的、更易于管理的片段,称为分区。
每个分区可以在不同的表空间中存储,并且可以独立地备份和恢复。
这可以提高查询性能,备份和恢复的效率,以及管理大量数据的便利性。
创建分区表的语法如下:```sqlCREATE TABLE table_name (column1 datatype1,column2 datatype2,...)PARTITION BY partition_method (partition_name1 value_column1 value_range,partition_name2 value_column2 value_range,...);```这里是一些常见的分区方法:RANGE Partitioning:根据列的值范围对数据进行分区。
LIST Partitioning:根据列的离散值对数据进行分区。
HASH Partitioning:根据计算列的哈希值对数据进行分区。
KEY Partitioning:类似于 RANGE Partitioning,但使用索引的键值进行分区。
以下是一个创建RANGE分区表的例子:```sqlCREATE TABLE sales (order_id NUMBER,sale_date DATE,amount NUMBER)PARTITION BY RANGE (sale_date) (PARTITION p0 VALUES LESS THAN (TO_DATE('', 'YYYY-MM-DD')), PARTITION p1 VALUES LESS THAN (TO_DATE('', 'YYYY-MM-DD')),PARTITION p2 VALUES LESS THAN (MAXVALUE));```在这个例子中,`sales` 表根据 `sale_date` 列的值被分成了三个分区:p0、p1 和 p2。
ORACLE分区表、分区索引详解

ORACLE分区表、分区索引详解ORACLE分区表、分区索引ORACLE对于分区表⽅式其实就是将表分段存储,⼀般普通表格是⼀个段存储,⽽分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那⼏个内部,然后在分区内部去查找数据,⼀个分区⼀般保证四⼗多万条数据就⽐较正常了,但是分区表并⾮乱建⽴,⽽其维护性也相对较为复杂⼀点,⽽索引的创建也是有点讲究的,这些以下尽量阐述详细即可。
1、类型说明:range分区⽅式,也算是最常⽤的分区⽅式,其通过某字段或⼏个字段的组合的值,从⼩到⼤,按照指定的范围说明进⾏分区,我们在INSERT数据的时候就会存储到指定的分区中。
List分区⽅式,⼀般是在range基础上做的⼆级分区较多,是⼀种列举⽅式进⾏分区,⼀般讲某些地区、状态或指定规则的编码等进⾏划分。
Hash分区⽅式,它没有固定的规则,由ORACLE管理,只需要将值INSERT进去,ORACLE会⾃动去根据⼀套HASH算法去划分分区,只需要告诉ORACLE要分⼏个区即可。
分区可以进⾏两两组合,ORACLE 11G以前两两组合都必须以range作为⼀级分区的开头,ORACLE⽬前最多⽀持2级别分区,但这个级别已经够我们使⽤了。
我这只以最简单的分区⽅式创建分区来说明问题,就拿range分区来说明问题吧(基本创建语句如下):CREATE [url=]TABLE[/url] TABLE_PARTITION(COL1 NUMBER,COL2 VARCHAR2(10))partition by range(COL1)(partition TAB_PARTOTION_01 values less than (450000),partition TAB_PARTOTION_02 values less than (900000),partition TAB_PARTOTION_03 values less than (1350000),partition TAB_PARTOTION_04 values less than (1800000),partition TAB_PARTOTION_OTHER values less THAN (MAXVALUE));这个分区表创建了四个定长分区,理想情况下,存储450000条数据,扩展分区是超过这个数额的分区,当发现扩展分区有数据的时候,可以进⾏将扩展分区做SPLIT操作,这个后⾯说明,这⾥先说⼀下⼀些常⽤的分区表查询功能,我们先插⼊⼀些数据进去。
oracle自动分区

1、创建表注意:创建的表必须有一个足够大的初始分区,因为后续增加分区都是在当前这个分区上面分裂而来的。
2、创建存储过程3、在oracle的命令行界面执行下面操作,启动一个job:说明:一些常用命令:--给指定表添加分区alter table TEST3 add partition part_aaa values lessthan(TO_DATE('01-JUL-2009','DD-MON-YYYY'))--分裂分区alter table TEST2 split partition ORD_ACT_PART02 AT (TO_DATE('01-JUL-2009','DD-MON-YYYY')) INTO (PARTITION P1,PARTITION ORD_ACT_PART02);--删除指定表的指定分区ALTER TABLE TEST3 DROP PARTITION part_aaa;--查看某张表所有分区信息SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'TEST2'--查看指定分区记录SELECT * FROM TEST2 PARTITION (P1)--查看定时任务job相关信息SELECT job,broken,what,interval,t.* from user_jobs t;SELECT job,broken,what,interval,t.next_sec ,SYSDATE from user_jobs t; --对应broken为N的时候job才为运行状态SELECT * from dba_jobs order by job;--删除jobA、查找job对应的idSELECT job,broken,what,interval,t.next_sec ,SYSDATE from user_jobs t;B、根据查找到的job的id来删除指定的job--在删除分区表的时候,用下面的语句,否则分区表的信息会放到oracle的垃圾站中去,会导致存储过程中判断分区是否存在的时候会有问题DROP TABLE TEST2 PURGE--下面的语句是清空oracle的垃圾站数据PURGE recyclebin;。
oracle按时间创建分区表

oracle 按时间创建分区表首先明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现。
当表的大小过G 的时候可以考虑进行表分区,提高查询效率,均衡IO 。
oracle 分区表是oracle 数据库提供的一种表分区的实现形式。
表进行分区后,逻辑上仍然是一张表,原来的查询SQL 同样生效,同时可以采用使用分区查询来优化SQL 查询效率,不至于每次都扫描整个表一、分区表基本操作1、按时间分区表创建:1 2 3 4 5 6 7 8 9 10 11 create table t_test (pk_id number(30) not null,add_date_time DATE,constraintPK_T_TEST primary key (pk_id))PARTITION BY RANGE (add_date_time)(PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS)其中add_date_time 为分区字段,每一年一个分区。
插入100W 数据1 2 3 4 5 6 7 declarei int := 1;yearVARCHAR2(20);beginloopyear := CASEmod(i, 3)WHEN 0 THEN8 9 10 11 12 13 14 15 16 17 18 '2012-01-14 12:00:00'WHEN 1 THEN'2013-01-14 12:00:00'ELSE'2014-01-14 12:00:00'END;insert into t_test values(i, to_date(year, 'yyyy-mm-dd hh24:mi:ss'));exit when i= 1000000;i := i + 1;end loop;end;查看分区表的分区的详细信息1 Select table_name,partition_name,high_value fromdba_tab_partitions where table_name='T_TEST';2、分区表修改2.1增加一个分区分两种情况:1.没有maxvalue 分区。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 分区建立1.1. 建立分区表create table bigtable(sale_date date,product_id number,sale_count number,charge number,sales_id number)tablespace ts_partitionpctfree 5pctused 80initrans 1maxtrans 255parallel(degree 2)storage(initial 2Mnext 2Mminextents 1maxextents unlimitedpctincrease 0)partition by range(sale_date)(partition sale_date_20020101 values less than (to_date('20020102','yyyymmdd')),partition sale_date_20020102 values less than (to_date('20020103','yyyymmdd')));1.2. 建立分区索引create index create index idx_bigtable_product_id on bigtable(product_id) parallel 2 localtablespace users on bigtable(product_id) parallel 2 local tablespace users;分区索引和全局索引:分区索引就是在所有每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用,也就是索引不会失效,维护起来比较方便,但是在查询性能稍微有点影响。
create index idx_ta_c2 on ta(c2) local (partition p1,partition p2,partition p3,partition p4);或者 create index idx_ta_c2 on ta(c2) local ;另外在create unique index idx_ta_c2 on ta(c2) local ;系统会报ORA-14039错误,这是因为ta表的分区列是c1,不支持在分区表上创建PK主键或时主键列不包含分区列,创建唯一约束也不可以这样。
oracle全局索引就是在全表上创建索引,它可以创建自己的分区,可以和分区表的分区不一样,也就是它是独立的索引。
在drop或truncate某个分区时需要创建索引alter index idx_xx rebuild,也可以通过alter table table_name drop partition partition_name update global indexes;实现,但是如果数据量很大则要花很长时间在重建索引上。
可以通过查询user_indexes、user_part_indexes和user_ind_partitions视图来查看索引是否有效。
create index idx_ta_c3 on ta(c3);或者把全局索引分成多个区(注意和分区表的分区不一样):create index idx_ta_c4 on ta(c4) global partition by range(c4)(partition ip1 values less than(10000),partition ip2 values less than(20000),partition ip3 values less than(maxvalue));注意全局索引上的引导列要和range后列一致,否则会有ORA-14038错误。
如不能这样写:create index idx_ta_c4 on ta(c1) global partition by range(c4)(partition ip1 values less than(10000),partition ip2 values less than(20000),partition ip3 values less than(maxvalue));oracle会对主键自动创建全局索引如果想使某个分区索引置为不可用则可以用如下脚本:alter index idx_tab1 modify partition "ind partition name" unusable如果想在主键的列上创建分区索引,除非主键包括分区键,还有就是主键建在两个或以上列上,否则不能创建。
在频繁删除表的分区且数据更新比较频繁时为了维护方便要避免使用全局索引。
1.3. 增加分区alter table bigtable add partition sale_date_20020103values less than (to_date('20020104','yyyymmdd'));1.4. 截断分区alter table bigtable truncate partition sale_date_20020103;1.5. 丢弃分区alter table bigtable drop partition sale_date_20020103;1.6. 交换分区如果分区表里含有LOCAL 的索引,此分区的索引将处于不可用状态,需要重建:alter index idx_bigtable_product_id rebuild partition sale_date_20020102 tablespace users;如果被交换表和分区表的索引结构相同,可以用including indexes 连同索引一起交换,不1.7. 移动分区alter table bigtable move partition sale_date_20020102 tablespace user2;1.8. 修改分区alter table bigtable modify partitionsale_date_20020102 storage(pctincrease 10);1.9. 重命名分区alter table bigtable rename partitionsale_date_20020102 to sale_date_20020103;1.10. 分割分区alter table bigtable split partition sale_date_20020104at (to_date('20020104','yyyymmdd'))into (partition sale_date_20020103,partition sale_date_20040104);1.11. 合并分区合并分区的具体语法格式为:alter table 表名 merge partitions 分区名1,分区名2 into partition 合并后分区的名字。
alter table PM_V01R00_UTRANCELL_HSDPA merge partitionsPART_2010_06_01,PART_2010_06_05_BAK into partitionPART_2010_06_05;1.12. 分区表数据的逻辑备份exp username/password file=bigtable20020103_4.dmp tables= (bigtable:sale_date_20020103,bigtable:sale_date_20020104)1.13. 分区表数据的逻辑恢复imp username/password file=bigtable20020103_4.dmp tables= (bigtable:sale_date_20020103,bigtable:sale_date_20020104) ignore=y2. 分区维护2.1. 分区管理视图分区用到的视图:管理user_tab_partitions,user_part_indexes,user_part_tables,user_partial_drop_tabs,user_part_indexesuser_part_key_columns========================2.2. --查询分区所属的硬盘信息select file_name,file_id,bytes/1024/1024from dba_data_fileswhere tablespace_name='NMCPMTS';2.3. --查询表所有的分区信息select * from dba_tab_partitions where table_name='PM_V01R00_UTRANCELL_HSDPA';2.4. --查询表分区占用的空间大小select d.segment_name,d.partition_name,d.bytes/1024/1024 cnt_mb from dba_segments d whered.segment_name='PM_V01R00_UC_RRC_SUBCOUNTER';2.5. 为分区表建立一个单独的表空间create tablespace ts_partition datafile '/home/oracle/oradata/esales/partition.dbf' size 10Mextent management local uniform size 2M;查询分区表:select * from hcl partition(p_200809)2.6. 查看索引类型是否为分区索引select t1.index_name,t1.partitioned from Dba_Indexes t1wheret1.Table_Name=upper('CCB_COGNOS_PROD_BALANCE_AA')select t1.index_name,t1.partitioned from Dba_Indexes t1wheret1.Table_Name=upper('CCB_COGNOS_PROD_BALANCE_AA')将索引重建为索引:alter indexB_COGNOS_PROD_BALANCE_AA_N1 rebuild Nologging 找出失效的分区索引:select t.Index_Name, t.Partition_Name, t.Tablespace_Name, t.Statusfrom Dba_Ind_Partitions twhere t.Index_Name = 'CMZ_LOCAL_IDX_2'重建所有状态为unusable的索引重建脚本: Java代码ALTER INDEX 索引名REBUILD PARTITION 分区名TABLESPACE 表空间名NOLOGGING2.7. 查看介于某个时间段的分区先建立表create table pnmc_partitions(table_owner varchar2(50),table_name varchar2(40),partition_name varchar2(40),high_value varchar2(4000),TABLESPACE_NAME varchar2(50))tablespace NMCCMTSpctfree 10initrans 1maxtrans 255storage(initial 64minextents 1maxextents unlimited);然后建立测试窗口declarecursor my_cursor isselect table_owner ,table_name ,partition_name ,high_value ,tablespace_namefrom dba_tab_partitions;v_pnmc_partion pnmc_partitions%rowtype;begindelete from pnmc_partitions;commit;open my_cursor;loopfetch my_cursor into v_pnmc_partion;exit when my_cursor%notfound;v_pnmc_partion.high_value:=substr(v_pnmc_partion.high_value,11,19); insert into pnmc_partitions(table_owner, table_name, partition_name, high_value,tablespace_name) values(v_pnmc_partion.table_owner,v_pnmc_partion.table_name,v_pnmc_partion.partition_name,v_pnmc_partion.high_value,v_pnmc_partion.tablespace_name);end loop;commit;close my_cursor;end;然后再进行查询selecttable_owner ,table_name ,partition_name ,high_value ,tablespace_namefrom pnmc_partitions t where table_owner='NMC'and to_date(high_value,'YYYY-MM-DD HH24:MI:SS')<to_date('2009-03-01 00:00:00','YYYY-MM-DD HH24:MI:SS');--delete 操作后表空间的释放;select'alter table '||table_name||' drop partition '||partition_name||';',partition_name, high_valuefrom pnmc_partitions twhere table_owner ='NMC3G'and to_date(high_value,'YYYY-MM-DD HH24:MI:SS')<to_date('2011-06-15 00:00:00','YYYY-MM-DD HH24:MI:SS')and table_name in('PM_V01R00_UC_RLC_SUBCOUNTER',--'PM_V01R00_UC_FP_SUBCOUNTER',--'PM_V01R00_UC_CR_SUBCOUNTER',--'PM_V01R00_UTRANCELL_SUBCOUNTER',--'PM_V01R00_UTRANCELL_HSDPA',--'PM_V01R00_UTRANCELL_HSUPA')—--查询分区保存时间select table_name,(max(to_date(high_value, 'YYYY-MM-DD HH24:MI:SS')) -min(to_date(high_value, 'YYYY-MM-DD HH24:MI:SS')) )/365 ||’年’partition_save_timefrom pnmc_partitions twhere table_owner = 'CDMA2000'group by table_name--移动分区select'alter table '||table_name||' move partition '||partition_name||' tablespace NMCPMTS;'from pnmc_partitionswhere table_namein('PM_AN_CELL_INFO','PM_1601_TBL_RST_1275071817_3','PM_AN_CELL_SUM_INFO')--删除分区drop index UIDX_PM_AN_CELL_INFO;create unique index UIDX_PM_AN_CELL_INFO on PM_AN_CELL_INFO (START_TIME, SYS_INT_ID) localtablespace INDXpctfree 10initrans 2maxtrans 255storage(initial 2088Kminextents 1maxextents unlimited);。