【动手实践】Oracle 12.2 新特性:自动的列表分区创建

2017年来了,我们要启动新的学习征程了。在过去我们一直思考,什么样的内容能够更帮助大家了解和学习到有用的知识?

这个『动手实践』栏目就是这样一个改进和尝试吧,一个小小的范例,几分钟的线上实践(感谢Oracle),就能帮助大家熟悉一个知识点,几个重要的命令。如此是否会有不一样的体验?试一试吧。


在Oracle Database 12.2 之前,如果使用列表分区,当插入的数据超过了分区列表值设定,则会抛出异常;而如果存在大量的列表值需要定义,则可能需要一一设置。

在12.2引入的新特性中 - Auto-List Partitioning 可以针对新的列表值,进行自动的分区创建,从而减少了维护的复杂性。

在文档中这样描述:

Partitioning: Auto-List Partitioning

The database automatically creates a separate (new) partition for every distinct partition key value of the table. Auto-list partitioning removes the management burden from the DBAs to manually maintain a list of partitioned tables for a large number of distinct key values that require individual partitions. It also automatically copes with the unplanned partition key values without the need of a DEFAULT partition.

通过以下测试来简单验证一下这个特性的表征,如果是常规的列表分区,在分区缺失时会遇到ORA-14400错误:

SQL> CREATE TABLE enmotech (
  2    PartID	     integer	     not null,
  3    CretTm	     date	     not null,
  4    PartCD	     varchar2(2)     not null
  5  ) partition by list (partcd) (
  6    partition pBJ values ('BJ'),
  7    partition pCD values ('CD'),
  8    partition pGZ values ('GZ'),
  9    partition pSH values ('SH')
 10  );

Table created.

SQL> insert into enmotech values (1, sysdate, 'KM');
insert into enmotech values (1, sysdate, 'KM')
            *
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition

当设置了automatic关键字之后,分区变更为自动管理:

drop table enmotech purge;

CREATE TABLE enmotech (
  PartID	integer		not null,
  CretTm	date		not null,
  PartCD	varchar2(2)	not null
) partition by list (partcd) automatic (
  partition pBJ values ('BJ'),
  partition pCD values ('CD'),
  partition pGZ values ('GZ'),
  partition pSH values ('SH')
);

当插入一条未定义的分区数据时,新的分区被自动创建:

SQL> insert into enmotech values (1, sysdate, 'KM');

1 row created.

SQL> select partition_name from   user_tab_partitions
  2  where  table_name = 'ENMOTECH';

PARTITION_NAME
----------------------------------------------------
PBJ
PCD
PGZ
PSH
SYS_P290

如果这个自动分片的分区名不符合你的命名规则,可以通过DDL语句去修改变更:

SQL> alter table enmotech rename partition SYS_P290 to pKM;

Table altered.

SQL> select partition_name from   user_tab_partitions
  2  where  table_name = 'ENMOTECH';

PARTITION_NAME
---------------------------------------------------
PBJ
PCD
PGZ
PKM
PSH

对于已有的分区定义,可以通过关键字 automatic 和 manual 来进行分区定义的调整:

alter table PEOPLE set partitioning automatic;

alter table PEOPLE set partitioning manual;

这是Oracle Database 12.2 分区特性的众多增强之一。

更为重要的是,在今天,虽然你还可能下载不到12.2的安装盘,但是在LiveSQL ( https://livesql.oracle.com )站点,你可以毫无障碍的测试这个新特性,以下是以上脚本在网站上的测试输出:

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

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

awr性能问题排查第一篇(r3笔记第42天)

对于awr,里面涵盖的内容比较杂,有时候看报告的时候总是不知道该怎么下手。时间长了,可能会有一些阅读习惯或者心得。今天在看大师chris lawson的一篇博文...

2664
来自专栏数据和云

Oracle 12.2 新特性:在线的修改数据表为分区表

众所周知,分区技术是Oracle应用最为广泛的一个选件,并且历史悠久,然而在过去的版本中,如果我们要将一个现有的数据表转换为分区表,则是相当复杂的一个过程,而在...

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

海量数据迁移之sqlldr和datapump的缺点分析(r4笔记第74天)

在数据迁移中,sql*loader和datapump总是作为一些常用的数据迁移方案,自己在经历了一些项目之后,优点就不说了,说点这些方案的缺点,批评不自由,则赞...

3586
来自专栏电光石火

mysql 找回误删表的数据办法

有备份的话很简单,只需要生成一个最近备份的数据 然后用mysqlbinlog找回备份时间点之后的数据 再恢复到现网即可。 要是没有备份 可能就会比较麻...

2506
来自专栏令仔很忙

手把手教你-----巧用Excel批量生成SQL语句,处理大量数据

在做系统或者做项目的时候,经常会遇到这样的要求:用户给我们发过来一些数据,要求我们把这些数据导入到数

553
来自专栏SAP最佳业务实践

SAP最佳业务实践:半成品的计划与处理(234)-5成品销售发货

image.png VA02客户订单中的可用性检查和装运地点更改 此操作介绍一种如何在交货之前检查物料可用性的可能性。 客户库存中必须存在已交付的物料。 角色销...

2814
来自专栏数据之美

常用统计分析 SQL 在 AWK 中的实现

最近有需求需要本地处理一些临时的数据,用做统计分析。如果单纯的 MYSQL 也能实现, 不过一堆临时数据这样从 mysql 导来导去还是挺麻烦的,比较理想的选...

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

使用外部表关联MySQL数据到Oracle(r6笔记第100天)

因为业务需要,有个临时的活动需要DBA来支持一些数据业务,问题来了,需要从MySQL端同步一部分数据到Oracle端,然后从Oracle端匹配查 到相应的数据返...

2474
来自专栏数据和云

高危防范:巧用触发器,实现DDL监控

在数据运维过程中,常常因为DBA的疏忽而使数据安全面临威胁,有些威胁来自数据库外部,如rm操作,而有些威胁则来自数据库内部,如Truncate操作.因此对于数据...

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

数据库负载急剧提高的应急处理(二) (r9笔记第55天)

对于之前碰到的一个数据库负载急剧提升的问题,做了应急处理之后,我们需要再冷静下来,来看看是哪些地方出现了问题,还需要哪些改进。 首先第一个问题就是为什么会突然负...

3194

扫码关注云+社区