为什么要创建oracle分区表?

一般情况下,如果不分区,则每次查询的对象都是一整张表,如果采用了表分区,那么可以根据具体的分区字段当作条件来避免扫描整张表,减少IO的扫描以提高表的查询速度。

新建(按照日期自动分区)分区表

SQL> create table test_partion(
2 pk_id number(38) generated as identity (start with 1 increment by 1),
3 P_day date,
4 words varchar2(200),
5 constraint pk_test_partition_id primary key (pk_id)
6 )
7 partition by range(P_day)
8 interval (numtodsinterval(1,'day'))
9 (
10 partition part_20170622 values less than (to_date('','yyyyMMdd'))
11 );
Table created
  • 尝试插入数据,之后查看动态分区表的分区个数:
SQL> select * from test_partion ;
PK_ID P_DAY WORDS
--------------------------------------- ----------- ------
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted
SQL> select table_name,partition_name,high_value from user_tab_partitions where table_name='TEST_PARTION';
TABLE_NAME PARTITION_NAME HIGH_VALUE
--------------- ---------------- --------------------------------------------------------------------------------
TEST_PARTION PART_20170622 TO_DATE(' 2017-06-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2252 TO_DATE(' 2017-06-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2253 TO_DATE(' 2017-06-24 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2254 TO_DATE(' 2017-06-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2255 TO_DATE(' 2017-06-26 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2256 TO_DATE(' 2017-06-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2257 TO_DATE(' 2017-06-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2258 TO_DATE(' 2017-06-29 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2259 TO_DATE(' 2017-06-30 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
9 rows selected

从上边表中我们基本可以看出,除了分区PART_20170622是我们动态创建的分区外,其他SYS_*分区都是动态创建的。

接下来查看每个分区表的数据分区情况:

SQL> select * from test_partion partition(PART_20170622);
PK_ID P_DAY WORDS
--------------------------------------- ----------- -------- SQL> select * from test_partion partition(SYS_P2252);
PK_ID P_DAY WORDS
--------------------------------------- ----------- --------
1 2017/6/22 00001 SQL> select * from test_partion partition(SYS_P2253);
PK_ID P_DAY WORDS
--------------------------------------- ----------- --------
2 2017/6/23 00002
3 2017/6/23 00003
5 2017/6/23 00005 SQL> select * from test_partion partition(SYS_P2254);
PK_ID P_DAY WORDS
--------------------------------------- ----------- -------
4 2017/6/24 00004 SQL> select * from test_partion partition(SYS_P2255);
PK_ID P_DAY WORDS
--------------------------------------- ----------- -------
6 2017/6/25 00006 SQL> select * from test_partion partition(SYS_P2256);
PK_ID P_DAY WORDS
--------------------------------------- ----------- -------
7 2017/6/26 00006 SQL> select * from test_partion partition(SYS_P2257);
PK_ID P_DAY WORDS
--------------------------------------- ----------- -------
8 2017/6/27 00006 SQL> select * from test_partion partition(SYS_P2258);
PK_ID P_DAY WORDS
--------------------------------------- ----------- -------
9 2017/6/28 00006 SQL> select * from test_partion partition(SYS_P2259);
PK_ID P_DAY WORDS
--------------------------------------- ----------- ------
10 2017/6/29 00006

分区操作:

1)删除某个分区表中的数据

SQL> delete from test_partion partition(SYS_P2259);
1 row deleted SQL> select * from test_partion partition(SYS_P2259);
PK_ID P_DAY WORDS
--------------------------------------- ----------- ------

2)删除某个分区

SQL> alter table test_partion drop partition SYS_P2259;
Table altered

删除分区之后,查看表分区情况。

SQL> select table_name,partition_name,high_value from user_tab_partitions where table_name='TEST_PARTION';
TABLE_NAME PARTITION_NAME HIGH_VALUE
--------------- ---------------- --------------------------------------------------------------------------------
TEST_PARTION PART_20170622 TO_DATE(' 2017-06-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2252 TO_DATE(' 2017-06-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2253 TO_DATE(' 2017-06-24 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2254 TO_DATE(' 2017-06-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2255 TO_DATE(' 2017-06-26 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2256 TO_DATE(' 2017-06-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2257 TO_DATE(' 2017-06-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2258 TO_DATE(' 2017-06-29 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
8 rows selected

注:drop partition时,该分区内存储的数据也将同时删除,你的本意是希望删除掉指定的分区但保留数据,你应该使用merge partition,执行该语句会导致glocal索引的失效需要重建全局索引

3)合并分区

相邻的分区可以通过命令merge partition合并为一个分区,同时分区中的数据也将会被合并到同一个分区中。

新分区的下边界为原来边界值较低的分区,上边界为原来边界值较高的分区,原先的局部索引相应也会合并,全局索引会失效,需要rebuild。

参考:http://www.cnblogs.com/wangfg/p/5286519.html

SQL> alter table test_partion merge partitions SYS_P2253,SYS_P2254 into partition  SYS_P2253_to_P2254;
Table altered SQL> select table_name,partition_name,high_value from user_tab_partitions where table_name='TEST_PARTION';
TABLE_NAME PARTITION_NAME HIGH_VALUE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
TEST_PARTION PART_20170622 TO_DATE(' 2017-06-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2252 TO_DATE(' 2017-06-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2253_TO_P2254 TO_DATE(' 2017-06-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2255 TO_DATE(' 2017-06-26 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2256 TO_DATE(' 2017-06-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2257 TO_DATE(' 2017-06-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2258 TO_DATE(' 2017-06-29 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
7 rows selected SQL> select * from test_partion partition(SYS_P2253_TO_P2254);
PK_ID P_DAY WORDS
--------------------------------------- ----------- --------------------------------------------------------------------------------
2 2017/6/23 00002
3 2017/6/23 00003
5 2017/6/23 00005
4 2017/6/24 00004 SQL> insert into test_partion (p_day,words) values (to_date('20170623','yyyyMMdd'),'06665');
insert into test_partion (p_day,words) values (to_date('20170623','yyyyMMdd'),'06665')
ORA-01502: 索引 "NETPLAN_ONLINE_APPUSER.PK_TEST_PARTITION_ID" 或这类索引的分区处于不可用状态 SQL> alter index PK_TEST_PARTITION_ID rebuild;
Index altered SQL> insert into test_partion (p_day,words) values (to_date('20170623','yyyyMMdd'),'06665');
1 row inserted SQL> insert into test_partion (p_day,words) values (to_date('20170624','yyyyMMdd'),'06665');
1 row inserted SQL> select * from test_partion partition(SYS_P2253_TO_P2254);
PK_ID P_DAY WORDS
--------------------------------------- ----------- --------------------------------------------------------------------------------
2 2017/6/23 00002
3 2017/6/23 00003
5 2017/6/23 00005
4 2017/6/24 00004
12 2017/6/23 06665
13 2017/6/24 06665
6 rows selected

4)分区重命名

SQL>
SQL> alter table test_partion rename partition SYS_P2253_to_P2254 TO SYS_P2253_to_P2254___;
Table altered SQL> insert into test_partion (p_day,words) values (to_date('','yyyyMMdd'),'');
1 row inserted SQL> select table_name,partition_name,high_value from user_tab_partitions where table_name='TEST_PARTION';
TABLE_NAME PARTITION_NAME HIGH_VALUE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
TEST_PARTION PART_20170622 TO_DATE(' 2017-06-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2252 TO_DATE(' 2017-06-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2253_TO_P2254___ TO_DATE(' 2017-06-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2255 TO_DATE(' 2017-06-26 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2256 TO_DATE(' 2017-06-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2257 TO_DATE(' 2017-06-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
TEST_PARTION SYS_P2258 TO_DATE(' 2017-06-29 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
7 rows selected SQL> insert into test_partion (p_day,words) values (to_date('20170624','yyyyMMdd'),'76665');
1 row inserted SQL> select * from test_partion partition(SYS_P2253_TO_P2254___);
PK_ID P_DAY WORDS
--------------------------------------- ----------- --------------------------------------------------------------------------------
2 2017/6/23 00002
3 2017/6/23 00003
5 2017/6/23 00005
4 2017/6/24 00004
12 2017/6/23 06665
13 2017/6/24 06665
14 2017/6/24 76665
15 2017/6/24 76665
8 rows selected

因为这里是动态分区,所以就不介绍怎么添加分区。

Oracle12c:自动分区表的更多相关文章

  1. Oracle12c:创建主分区、子分区,实现自动分区插入效果

    单表自动单个分区字段使用方式,请参考:<Oracle12c:自动分区表> 两个分区字段时,必须一个主分区字段和一个子分区字段构成(以下代码测试是在oracle12.1版本): create ...

  2. ORA-14300: 分区关键字映射到超出允许的最大分区数的分区

    环境为:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production 对象表为按天的自动分区表: PARTI ...

  3. VMWARE 虚拟机新增硬盘,格式化分区,并挂载

    VMWARE 虚拟机新增 硬盘 并挂载 一台虚拟机上安装ORACLE12c 需要分一块硬盘挂载数据文件 日志文件 以及归档文件 1. 关闭虚拟机 2. 编辑虚拟机设置 选择[编辑虚拟机设置]并打开,将 ...

  4. Oracle间隔(interval)分区

    (一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区.在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免OR ...

  5. ubuntu server下建立分区表/分区/格式化/自动挂载(转)

    link:http://www.thxopen.com/linux/2014/03/30/Linux_parted.html 流程为:新建分区-->格式化分区-->挂载分区 首先弄明白分区 ...

  6. sqlserver分区表实践:对时间分区表自动进行管理

    项目问题:有一张日志表,插入和查询为主,每天记录数据为200多万,大小为2G-4G之间.一开始开发人员使用delete语句手动删除,保留7天数据,经常造成阻塞和性能瓶颈.但是如果不删除数据随着表越来越 ...

  7. 给虚拟机添加新硬盘并分区,fdisk查看分区,分区,重新读取分区表信息partprobe,格式化,挂载,查看分区挂载信息,自动挂载文件/etc/fstab,/etc/fstab文件错误导致重启崩溃后的修复

    1.虚拟机关机断电 2.添加硬盘 2.开机 3.fdisk -l查看刚才新添加的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 2147483 ...

  8. Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)

    Oracle12c中的自动重优化 Oracle12c中的自适应查询优化有一系列不同特点组成.像自适应计划(AdaptivePlans)功能可以在运行时修改执行计划,但并不允许计划中连接顺序的改变.自动 ...

  9. oracle 11g 分区表创建(自动按年、月、日分区)

    前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性. oracle 11g 支持自动分区,不 ...

随机推荐

  1. jsp的四种范围

    jsp有四种范围,可以说是四种对象,这四种对象对应不同的作用范围,所以我们说jsp中的四种范围,这四种范围作用域由大到小分别是page>request>session>applica ...

  2. [SCOI2011] 糖果

    luogu Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到 ...

  3. Android GC Log

    最近在研究Android内存垃圾回收的内容,遇到一些自己之前不知道的技巧和方法.现在分享一种简单的在Logcat中可以看到垃圾回收状态的方法.经常关注Logcat日志的童鞋偶尔会看到一条类似于以下形式 ...

  4. 数据系统的未来------《Designing Data-Intensive Applications》读书笔记17

    终于来到这本书最后的一章了<Designing Data-Intensive Applications>大部头,这本书应该是我近两年读过最棒的技术书籍.作者Martin Kleppmann ...

  5. Python打包工具setuptools的使用

    将我们写的Python程序发布成包后,可以使其能够安装使用. 在项目上测试的时候,某些情况下,可以将Python打包,然后上传到测试服务器,安装测试. setuptools是常用的打包工具. 一个简单 ...

  6. Transaction 事务简单详解

    Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一半就不做了,要么做完,要么就不做.也就是说,事务必须是一 ...

  7. Alpha冲刺No.6

    站立式会议 继续页面设计 在安卓内构件数据库相应类 解决摄像头.照片的使用的异常问题 二.实际项目进展 页面设计完成百分80 类架构完成 在虚拟机中,能够完成摄像头的调用和程序的使用 三.燃尽图 四. ...

  8. 201621123040《Java程序设计》第七周学习总结

    1.本周学习总结 1.1思维导图:Java图形界面总结 2.书面作业 2.1GUI中的事件处理 2.1.1写出事件处理模型中最重要的几个关键词. 关键词:事件 事件源 事件监听器 2.1.2任意编写事 ...

  9. 团队开发---”我爱淘“校园二手书店 NABC分析

    本项目特点之一:可预订 N:对于一些抢手的书可以提前预定,避免学生买不到书 A:网上下单,通过手机便捷购物 B:使得订书更加方便快捷 C:二手书摊.网上书店 团队成员:杨广鑫.郭健豪.李明.郑涛

  10. 基本数据类型 Symbol

    ES6 规范之前, JavaScript 一共有六种数据类型,分别是五种基本数据类型: string . number , boolean , null , undefined ,和一种引用数据类型: ...