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

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

请看以下Demo SQL语句:

CREATE TABLE sales ( order_num NUMBER, order_name VARCHAR2(128), region VARCHAR2(10)); insert into sales (1,'YHEM','BEIJING'); insert into sales (2,'ENMOTECH','SHENZHEN'); insert into sales (3,'YHEM','SHANGHAI'); ALTER TABLE sales MODIFY PARTITION BY LIST (region) (partition p1 values ('BEIJING'), partition p2 values ('SHENZHEN'), partition p3 values ('SHANGHAI'), partition p4 values (DEFAULT)) ONLINE;

在Modify修改表结构时,增加了ONLINE语句,可以直接将原有的数据表修改为分区结构。不会影响现有业务的运行。

在Live SQL站点运行一下测试语句( https://livesql.oracle.com ),可以看到顺利的完成了分区定义。事实上这个功能已经非常健壮:

那么Oracle在后台是如何完成这个DDL的重定义过程呢?

如果通过10046进行跟踪,可以发现这是一个非常复杂的内部递归过程,Oracle会建立一个日志表记录变更,然后通过Bulk Move批量迁移原有数据,最后增量应用变化数据,所以当然,你会发现这期间需要两倍的存储空间:

10046 的跟踪日志,揭示了这一过程,以下是跟踪日志中一个映射表的建立(感兴趣的同学可以从10046中找到很多原理性知识):

一个简单的操作,后台的递归执行高达2500次,大家可以想象Oracle这艘航空母舰有多么的庞大:

体验12.2,学习不止步!

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

经验分享:社会工程学数据库搭建TIPS

最近一直在搞社工库的搭建。网上这方面也有很多文章,但是很少涉及到细节,在此与大家分享一些个人心得。 测试环境 测试坏境:windows server 2012...

2828
来自专栏数据和云

2015 OOW:Oracle的Sharding技术

在2015年OOW大会,国内很多小伙伴们一直非常关心Oracle Database 12.2中的Sharding技术实现,可是要知道在Larry Ellison...

2904
来自专栏数据和云

SQL之美 - Oracle 子查询优化系列精讲

题记:SQL优化及SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是DBA,都应当持续深入的学习SQL开发技能,从而为解决性能问题打下根基。 本系列...

3693
来自专栏Linyb极客之路

MySQL锁机制及优化

总的来说,MySQL各存储引擎使用了三种类型(级别)的锁定机制:行级锁定,页级锁定和表级锁定。下面我们先分析一下MySQL这三种锁定的特点和各自的优劣所在。

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

备库CPU使用异常优化(r6笔记第73天)

一般在一些容灾环境中,尤其是在11g的ADG非常普及的场景下,备库被赋予了更多的责任,很多时候在容忍一些延迟的情况下,有些应用的大量数据查询任务直接放到了备库,...

3044
来自专栏沃趣科技

Oracle数据库12cR2版本的SQL计划管理

文章翻译自ORACLE WHITE PAPER SQL Plan Management with Oracle Database 12c Release 2 概...

36310
来自专栏张善友的专栏

SQLite vs MySQL vs PostgreSQL:关系型数据库比较

自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛。面对如此之多的关系型数据...

3055
来自专栏数据和云

全表扫描却产生大量db file sequential read一例

编辑手记:一条看似简单的SQL,执行时间异常惊人,明明是全表扫描,却在undo 表空间产生大量的单块读导致db file sequential read等待事件...

3674
来自专栏数据和云

常识之外:全表扫描为何产生大量 db file sequential read 单块读?

编辑手记:在理解Oracle技术细节时,我们不仅应该读懂概念,还要能够通过测试验证细节,理解那些『功夫在诗外』的部分,例如全表扫描和单块读。 开发人员在进行新系...

3689
来自专栏Java架构沉思录

MySQL在并发场景下的优化手段

对于数据库系统来说在多用户并发条件下提高并发性的同时又要保证数据的一致性一直是数据库系统追求的目标,既要满足大量并发访问的需求又必须保证在此条件下数据的安全,为...

1522

扫码关注云+社区

领取腾讯云代金券