徽州名菜oracle拆分分区语法详解⼤全_详解Oraclepartition分区表补充:如果插⼊的值不在⾃定义的所有分区范围内,将由Oracle来分配。
三,有关表分区的⼀些维护性操作:
1、添加分区
以下代码给SALES表添加了⼀个P3分区:
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
注意:以上添加的分区界限应该⾼于最后⼀个分区界限。
以下代码给SALES表的P3分区添加了⼀个P3SUB1⼦分区
ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
2、删除分区
赞美教师
以下代码删除了P3表分区:
ALTER TABLE SALES DROP PARTITION P3;
在测试中遇到这样的情况。如果表创建了分区,如果要删除数据⽂件(表空间⽂件),则要先删除分区,然后才能删除数据⽂件(但是在删除数据⽂件时,必须要保留⼀个分区才能最终删除数据⽂件&表空间⽂件)。当然,也可以直接就删除表也⾏,刚所有的全删除,但是表空间⽂件还在。
在以下代码删除了P4SUB1⼦分区:
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
注意:如果删除的分区是表中唯⼀的分区,那么此分区将不能被删除,要想删除此分区,必须先删除表。
3、截断分区
截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有⼀个分区时,也可以截断该分区。通过以下代码截断分区:
ALTER TABLE SALES TRUNCATE PARTITION P2;
通过以下代码截断⼦分区:
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
4、合并分区
合并分区是将相邻的分区合并成⼀个分区,结果分区将采⽤较⾼分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
5、拆分分区
拆分分区将⼀个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进⾏拆分。
白羊座女生ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
6、接合分区(coalesca)
结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据⽐较⼤时,可以增加散列分区,然后进⾏接合,值得注意的是,接合分区只能⽤于散列分区中。通过以下代码进⾏接合分区:
成人高考选什么专业ALTER TABLE SALES COALESCA PARTITION;
7、重命名表分区
以下代码将P21更改为P2
ALTER TABLE SALES RENAME PARTITION P21 TO P2;
8、跨分区查询
select sum( *) from (
select count(*) cn from t_table_SS PARTITION (P200709_1)
union all
select count(*) cn from t_table_SS PARTITION (P200709_2)
);
9、与分区相关的表和视图:
分区
--查询表上有多少分区:SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
--显⽰表分区信息 显⽰数据库所有分区表的详细分区信息:select * from DBA_TAB_PARTITIONS
--显⽰当前⽤户可访问的所有分区表的详细分区信息:select * from ALL_TAB_PARTITIONS
--显⽰当前⽤户所有分区表的详细分区信息:select * from USER_TAB_PARTITIONS
⼦分区
--显⽰⼦分区信息 显⽰数据库所有组合分区表的⼦分区信息:select * from DBA_TAB_SUBPARTITIONS
--显⽰当前⽤户可访问的所有组合分区表的⼦分区信息:select * from ALL_TAB_SUBPARTITIONS
--显⽰当前⽤户所有组合分区表的⼦分区信息:select * from USER_TAB_SUBPARTITIONS
分区表
--显⽰数据库所有分区表的信息:select * from DBA_PART_TABLES where table_name=upper('dinya_test') --显⽰当前⽤户可访问的所有分区表信息:select * from ALL_PART_TABLES
--显⽰当前⽤户所有分区表的信息:select * from USER_PART_TABLES
分区列
--显⽰分区列 显⽰数据库所有分区表的分区列信息:select * from DBA_PART_KEY_COLUMNS
--显⽰当前⽤户可访问的所有分区表的分区列信息:select * from ALL_PART_KEY_COLUMNS
--显⽰当前⽤户所有分区表的分区列信息:select * from USER_PART_KEY_COLUMNS
⼦分区列
--显⽰⼦分区列 显⽰数据库所有分区表的⼦分区列信息:select * from DBA_SUBPART_KEY_COLUMNS
-
-显⽰当前⽤户可访问的所有分区表的⼦分区列信息:select * from ALL_SUBPART_KEY_COLUMNS
--显⽰当前⽤户所有分区表的⼦分区列信息:select * from USER_SUBPART_KEY_COLUMNS
特例
--怎样查询出oracle数据库中所有的的分区表:select * from user_tables a where a.partitioned='YES'
--删除⼀个表的数据是
truncate table table_name;
--删除分区表⼀个分区的数据是
alter table table_name truncate partition p5;
注:分区根据具体情况选择。
表分区有以下优点:
1、数据查询:数据被存储到多个⽂件上,减少了I/O负载,查询速度提⾼。
2、数据修剪:保存历史数据⾮常的理想。
3、备份:将⼤表的数据分成多个⽂件,⽅便备份和恢复。
4、并⾏性:可以同时向表中进⾏DML操作,并⾏性性能提⾼。
================================================
四、分区索引:
1、⼀般索引:create index index_name on table(col_name);
2、Oracle 分区索引详解
语法:Table Index
CREATE [UNIQUE|BITMAP] INDEX [schema.]index_name
英雄联盟进不去ON [schema.]table_name [tbl_alias]
(col [ASC | DESC]) index_clause index_attribs
index_clauses:
分以下两种情况
1. Local Index
就是索引信息的存放位置依赖于⽗表的Partition信息,换句话说创建这样的索引必须保证⽗表是Partition
1.1 索引信息存放在⽗表的分区所在的表空间。但是仅可以创建在⽗表为HashTable或者composite分区表的。
LOCAL STORE IN (tablespace)
1.2 仅可以创建在⽗表为HashTable或者composite分区表的。并且指定的分区数⽬要与⽗表的分区数⽬要⼀致
LOCAL STORE IN (tablespace) (PARTITION [partition [LOGGING|NOLOGGING] [TABLESPACE {tablespace|DEFAULT}] [PCTFREE int] [PCTUSED int] [INITRANS int] [MAXTRANS int] [STORAGE storage_clause] [STORE IN
{tablespace_name|DEFAULT] [SUBPARTITION [subpartition [TABLESPACE tablespace]]]])
1.3 索引信息存放在⽗表的分区所在的表空间,这种语法最简单,也是最常⽤的分区索引创建⽅式。
Local
1.4 并且指定的Partition 数⽬要与⽗表的Partition要⼀致
LOCAL (PARTITION [partition
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
[MAXTRANS int]
熔岩巧克力蛋糕的做法
[STORAGE storage_clause]
[STORE IN {tablespace_name|DEFAULT]
[SUBPARTITION [subpartition [TABLESPACE tablespace]]]])
Global Index
索引信息的存放位置与⽗表的Partition信息完全不相⼲。甚⾄⽗表是不是分区表都⽆所谓的。语法如下:GLOBAL PARTITION BY RANGE (col_list)
( PARTITION partition VALUES LESS THAN (value_list)
[LOGGING|NOLOGGING]
[TABLESPACE {tablespace|DEFAULT}]
[PCTFREE int]
[PCTUSED int]
[INITRANS int]
[MAXTRANS int]
[STORAGE storage_clause] )
但是在这种情况下,如果⽗表是分区表,要删除⽗表的⼀个分区都必须要更新Global Index ,否则索引信息不正确ALTER TABLE TableName DROP PARTITION PartitionName Update Global Indexes
--查询索引
select object_name,object_type,tablespace_name,sum(value)
from v$segment_statistics
where statistic_name IN ('physical reads','physical write','logical reads')and object_type='INDEX'
group by object_name,object_type,tablespace_name
order by 4 desc
注意:不能为散列分区或⼦分区创建全局索引。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论