Oracle12c:自动分区表
为什么要创建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:自动分区表的更多相关文章
- Oracle12c:创建主分区、子分区,实现自动分区插入效果
单表自动单个分区字段使用方式,请参考:<Oracle12c:自动分区表> 两个分区字段时,必须一个主分区字段和一个子分区字段构成(以下代码测试是在oracle12.1版本): create ...
- ORA-14300: 分区关键字映射到超出允许的最大分区数的分区
环境为:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production 对象表为按天的自动分区表: PARTI ...
- VMWARE 虚拟机新增硬盘,格式化分区,并挂载
VMWARE 虚拟机新增 硬盘 并挂载 一台虚拟机上安装ORACLE12c 需要分一块硬盘挂载数据文件 日志文件 以及归档文件 1. 关闭虚拟机 2. 编辑虚拟机设置 选择[编辑虚拟机设置]并打开,将 ...
- Oracle间隔(interval)分区
(一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区.在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免OR ...
- ubuntu server下建立分区表/分区/格式化/自动挂载(转)
link:http://www.thxopen.com/linux/2014/03/30/Linux_parted.html 流程为:新建分区-->格式化分区-->挂载分区 首先弄明白分区 ...
- sqlserver分区表实践:对时间分区表自动进行管理
项目问题:有一张日志表,插入和查询为主,每天记录数据为200多万,大小为2G-4G之间.一开始开发人员使用delete语句手动删除,保留7天数据,经常造成阻塞和性能瓶颈.但是如果不删除数据随着表越来越 ...
- 给虚拟机添加新硬盘并分区,fdisk查看分区,分区,重新读取分区表信息partprobe,格式化,挂载,查看分区挂载信息,自动挂载文件/etc/fstab,/etc/fstab文件错误导致重启崩溃后的修复
1.虚拟机关机断电 2.添加硬盘 2.开机 3.fdisk -l查看刚才新添加的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 2147483 ...
- Oracle12c中SQL性能优化(SQL TUNING)新特性之自动重优化(automatic reoptimization)
Oracle12c中的自动重优化 Oracle12c中的自适应查询优化有一系列不同特点组成.像自适应计划(AdaptivePlans)功能可以在运行时修改执行计划,但并不允许计划中连接顺序的改变.自动 ...
- oracle 11g 分区表创建(自动按年、月、日分区)
前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性. oracle 11g 支持自动分区,不 ...
随机推荐
- jsp的四种范围
jsp有四种范围,可以说是四种对象,这四种对象对应不同的作用范围,所以我们说jsp中的四种范围,这四种范围作用域由大到小分别是page>request>session>applica ...
- [SCOI2011] 糖果
luogu Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到 ...
- Android GC Log
最近在研究Android内存垃圾回收的内容,遇到一些自己之前不知道的技巧和方法.现在分享一种简单的在Logcat中可以看到垃圾回收状态的方法.经常关注Logcat日志的童鞋偶尔会看到一条类似于以下形式 ...
- 数据系统的未来------《Designing Data-Intensive Applications》读书笔记17
终于来到这本书最后的一章了<Designing Data-Intensive Applications>大部头,这本书应该是我近两年读过最棒的技术书籍.作者Martin Kleppmann ...
- Python打包工具setuptools的使用
将我们写的Python程序发布成包后,可以使其能够安装使用. 在项目上测试的时候,某些情况下,可以将Python打包,然后上传到测试服务器,安装测试. setuptools是常用的打包工具. 一个简单 ...
- Transaction 事务简单详解
Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一半就不做了,要么做完,要么就不做.也就是说,事务必须是一 ...
- Alpha冲刺No.6
站立式会议 继续页面设计 在安卓内构件数据库相应类 解决摄像头.照片的使用的异常问题 二.实际项目进展 页面设计完成百分80 类架构完成 在虚拟机中,能够完成摄像头的调用和程序的使用 三.燃尽图 四. ...
- 201621123040《Java程序设计》第七周学习总结
1.本周学习总结 1.1思维导图:Java图形界面总结 2.书面作业 2.1GUI中的事件处理 2.1.1写出事件处理模型中最重要的几个关键词. 关键词:事件 事件源 事件监听器 2.1.2任意编写事 ...
- 团队开发---”我爱淘“校园二手书店 NABC分析
本项目特点之一:可预订 N:对于一些抢手的书可以提前预定,避免学生买不到书 A:网上下单,通过手机便捷购物 B:使得订书更加方便快捷 C:二手书摊.网上书店 团队成员:杨广鑫.郭健豪.李明.郑涛
- 基本数据类型 Symbol
ES6 规范之前, JavaScript 一共有六种数据类型,分别是五种基本数据类型: string . number , boolean , null , undefined ,和一种引用数据类型: ...