oracle表分区

Posted 那一年,我二十二

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle表分区相关的知识,希望对你有一定的参考价值。

表空间是指磁盘上的一块存储区域,用来存放表。

  使用范围分区法对数据量大的表进行分区,分区存放到不同的表空间。

  范围分区就是用表中的某个字段值的范围进行分区。

  比如:

  1)用数值型的id字段,id<100000的在第1个分区,100000<=id<200000的在第二个分区。

  2)用日期类型的字段,2011年的数据在一个分区,2012年的数据在另一个分区,或者也可以按月份进行划分。

 

  范围分区语法:

  1)partition  by  range(field)    field 就是表中要划分范围的那个字段。

  2)VALUES LESS THAN(value)   value 就是field的值,表示小于这个值的。

     如VALUES LESS THAN(1000) 就表示属性值小于1000,不包括1000

     如VALUES LESS THAN (TO_DATE(\'2012/2/1\',\'yyyy/MM/dd\')) 就表示属性值小于2012年2月1日的,不包括2012年2月1日

  3)在最高的分区中,VALUES LESS THAN(maxValue)定义的是一个最大的值

  范围分区步骤:

  1)建立表空间

  建立三个表空间测试用

复制代码
复制代码
CREATE TABLESPACE APP_TS_01  --建立第一个表空间  APP_TS_01    
NOLOGGING    --不生成日志
DATAFILE \'/home/oracle/oradata/appdata/app_data_01.def\' --指定表空间在磁盘上的位置
SIZE 1024M    --指定表空间大小

CREATE TABLESPACE APP_TS_02  --建立第二个表空间  APP_TS_02    
NOLOGGING    --不生成日志
DATAFILE \'/home/oracle/oradata/appdata/app_data_02.def\' --指定表空间在磁盘上的位置
SIZE 1024M    --指定表空间大小

CREATE TABLESPACE APP_TS_03  --建立第三个表空间  APP_TS_03    
NOLOGGING    --不生成日志
DATAFILE \'/home/oracle/oradata/appdata/app_data_03.def\' --指定表空间在磁盘上的位置
SIZE 1024M    --指定表空间大小
复制代码
复制代码

  2)建立表和对表进行分区

复制代码
复制代码
--创建订单表
create table t_order
(
  id NUMBER primary key not null ,      --主键
  order_no  VARCHAR2(30) not null,      --订单号
  order_time  DATE not null             --订单时间
)

--对订单表进行分区
partition by range (order_time)--根据订单时间范围进行划分
(
  --小于2012年1月份的数据存放到分区t_order_01,存在表空间APP_TS_01
  PARTITION t_order_01 VALUES LESS THAN (TO_DATE(\'2012/2/1\',\'yyyy/MM/dd\')) TABLESPACE APP_TS_01, 
  --2012年2月份的数据存放到分区t_order_02,存在表空间APP_TS_02
  PARTITION t_order_02 VALUES LESS THAN (TO_DATE(\'2012/3/1\',\'yyyy/MM/dd\')) TABLESPACE APP_TS_02, 
   --2012年3月份的数据存放到分区t_order_03,存在表空间APP_TS_03
  PARTITION t_order_03 VALUES LESS THAN (TO_DATE(\'2012/4/1\',\'yyyy/MM/dd\')) TABLESPACE APP_TS_03 
)
复制代码
复制代码

  4)查询分区数据

复制代码
复制代码
--查询所有分区数据
select * from t_order

--只查t_order_01分区的订单数据
select * from t_order PARTITION(t_order_01)

--联合查询t_order_01分区和t_order_02分区的数据
select * from t_order PARTITION(t_order_01)
UNION ALL
select * from t_order PARTITION(t_order_02)
复制代码
复制代码

 

  5)查看当前用户哪些表有分区

--查看当前用户有哪些表已分区
SELECT * from USER_TABLES where partitioned=\'YES\'

  6)查看某个表有多少个分区

--查询某个表有多少个分区
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME=\'表名\';

转载:https://www.cnblogs.com/adforce/p/3312252.html

以上是关于oracle表分区的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE有关表分区的一些维护性操作

MySQL 表数据分区,每10000条数据自动分区

oracle数据库如何查看表的表分区的信息(每个表分区的名字和所属表空间)

oracle 大表时间分区

oracle 查询哪些表分区

oracle表分区问题 做过数据库表分区的高手请进,非常感谢