【动手实践】Oracle 12.2新特性:多列列表分区和外部表分区

在Oracle 12.2版本中,增加了大量的分区新特性,这其中包括:

自动的列表分区创建

在线的普通表转换分区表

支持只读分区和读写分区混合

以下介绍的三个特性同样是12.2新增的:

多列列表分区、外部表分区、维护过滤

而对于多列列表分区的支持,也是大家关注已久的特性,先看一下脚本(在 livesql.oracle.com 测试执行,推荐动手实践):

CREATE TABLE dba_by_db_in_yhem (dbalic NUMBER, username VARCHAR2(20), dbcat VARCHAR2(4), region VARCHAR2(10) ) PARTITION BY LIST (dbcat, region) ( PARTITION north_part VALUES (('ORCL','BEIJING'), ('ORCL','TIANJIN')), PARTITION south_part VALUES (('DB2','SHENZHEN'), ('DB2','GUANGZHOU')), PARTITION west_part VALUES (('SQL','CHENGDU'),('ORCL','CHENGDU'),('DB2','KUNMING')), PARTITION east_part VALUES ('ORCL','SHANGHAI'), PARTITION rest VALUES (DEFAULT) ); insert into dba_by_db_in_yhem values(1,'EYGLE','ORCL','BEIJING'); insert into dba_by_db_in_yhem values(2,'KAMUS','ORCL','BEIJING'); insert into dba_by_db_in_yhem values(3,'LAOXIONG','SQL','CHENGDU'); insert into dba_by_db_in_yhem values(4,'ORA-600','DB2','GUANGZHOU'); insert into dba_by_db_in_yhem values(5,'YANGTINGKUN','ALL','BEIJING'); select * from dba_by_db_in_yhem partition (north_part); select * from dba_by_db_in_yhem partition (south_part); select * from dba_by_db_in_yhem partition (west_part); select * from dba_by_db_in_yhem partition (east_part); select * from dba_by_db_in_yhem partition (rest);

现在Oracle支持通过多列定义列表分区,最多支持16个列值定义,这极大的丰富了列表分区的适用场景。

为了简化维护操作,12.2 增加了维护过滤特性 - Filtered Partition on Maintenance Operations,也就是说,在执行分区的Move、Split和Merge等操作时,可以选择对数据进行过滤,通过一个 INCLUDING ROWS 进行限制。

继续前面的测试用例,当MOVE时指定保留分区中区域为「BEIJING」的数据后,『TIANJIN』的数据则被移除了:

insert into dba_by_db_in_yhem values(6,'SECOOLER','ORCL','TIANJIN'); select * from dba_by_db_in_yhem partition (north_part); ALTER TABLE dba_by_db_in_yhem MOVE PARTITION north_part INCLUDING ROWS WHERE REGION = 'BEIJING'; select * from dba_by_db_in_yhem partition (north_part);

在12.2中,Oracle还支持外部表分区,类似如下的语法展示了这一特性的用途,对于一个统一的外部表,可以通过分区指向不同的外部文件,不同文件可以用于存储已经分类的数据,从而更加灵活的使用外部表:

CREATE TABLE sales (loc_id number, prod_id number, cust_id number, amount_sold number, quantity_sold number) ORGANIZATION EXTERNAL (TYPE oracle_loader DEFAULT DIRECTORY load_d1 ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII NOBADFILE LOGFILE log_dir:'sales.log' FIELDS TERMINATED BY "," ) ) REJECT LIMIT UNLIMITED PARTITION BY RANGE (loc_id) (PARTITION p1 VALUES LESS THAN (1000) LOCATION ('california.txt'), PARTITION p2 VALUES LESS THAN (2000) DEFAULT DIRECTORY load_d2 LOCATION ('washington.txt'), PARTITION p3 VALUES LESS THAN (3000)) ;

了解了Oracle这些新的变化,将有助于我们深入和灵活的去使用Oracle数据库。


原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

MySQL中有关TIMESTAMP和DATETIME的对比

1> 两者都可用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期。

602
来自专栏java一日一条

Java初学者必知:Java语言的11大特点

Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的静态语言。那么java语言的特点是什么呢?

282
来自专栏蓝天

改进型MapReduce

本文通过对MapReduce的分析,列出MapReduce存在的问题,然后提出一种解决这些问题的改进型MapReduce,这种改进型的MapReduce暂且取名...

742
来自专栏JAVA烂猪皮

用 Node + MySQL 如何处理 100G 数据

通过这个 Node.js 和 MySQL 示例项目,我们将看看如何有效地处理 数十亿行 占用 数百GB 存储空间的数据。

1375
来自专栏潘昌伟的专栏

用好 mysql 分区表

大数据时代,数据量趋于海量,mysql单表很难满足大数据场景的一些统计需求,用好分区表可以很好的解决很大一部分的问题。

8260
来自专栏杨建荣的学习笔记

巧妙使用exchange partition的一个案例(r6笔记第1天)

前几天写过一篇文章讨论过分区表的在线重定义,其实就是另外一个分区表和现有的分区表做数据字典信息的交换 http://blog.itpub.net/2371875...

2574
来自专栏微信公众号:Java团长

Java中高级面试题

1)集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet);

574
来自专栏令仔很忙

【JVM调优】----内存溢出和内存泄漏

项目的开发,涉及到了服务器的运维,先来介绍下JVM相关的知识,也方便后期的使用。今天主要是说一说内存溢出和内存泄漏两件事。

511
来自专栏杨建荣的学习笔记

关于interval partitioning(r3笔记65天)

今天一个开发的同事问我一个问题,说在系统中目前需要一个临时的解决方案,定义了一张表,目前想设定为分区表,因为会和外围系统交互产生大量的数据,所以需要按照小时来做...

2548
来自专栏精讲JAVA

Gof设计模式之单例模式(一)

今天开始更新设计模式系列,题目中Gof指的是《Design Patterns: Elements of Reusable Object-Orie...

1925

扫描关注云+社区