TRUNCATE [SUB]PARTITION和EXCHANGE [SUB]PARTITION命令如今可以包括CASCADE子句,从而允许参照分区表向下级联这些操作。为确保该选项正常,相关外键也必须包括DELETE子句。

1.        设置

下面创建一个分区父表(T1)和一个参照的分区子表(T2)。每个分区被插入一行数据。

DROP TABLE t2 PURGE;

DROP TABLE t1 PURGE;

CREATE TABLE t1 (

id           NUMBER,

info        VARCHAR2(50),

crt_dateDATE,

CONSTRAINT t1_pk PRIMARY KEY (id)

)

PARTITION BY RANGE (crt_date)

(PARTITION part_2014 VALUES LESS THAN(TO_DATE('01/01/2015', 'DD/MM/YYYY')) TABLESPACE users,

PARTITION part_2015 VALUES LESS THAN(TO_DATE('01/01/2016', 'DD/MM/YYYY')) TABLESPACE users);

CREATE TABLE t2 (

id             NUMBER NOT NULL,

t1_id          NUMBER NOT NULL,

info           VARCHAR2(50),

crt_date   DATE,

CONSTRAINT t2_pk PRIMARY KEY (id),

CONSTRAINTt2_t1_fk FOREIGN KEY (t1_id) REFERENCES t1 (id) ON DELETE CASCADE

)

PARTITION BY REFERENCE (t2_t1_fk);

INSERT INTO t1 VALUES (1, 't1 data',TO_DATE('05/05/2014', 'DD/MM/YYYY'));

INSERT INTO t1 VALUES (2, 't1 data',TO_DATE('05/05/2015', 'DD/MM/YYYY'));

INSERT INTO t2 VALUES (1, 1, 't2 data',TO_DATE('05/05/2014', 'DD/MM/YYYY'));

INSERT INTO t2 VALUES (2, 2, 't2 data',TO_DATE('05/05/2015', 'DD/MM/YYYY'));

COMMIT;

EXEC DBMS_STATS.gather_table_stats(USER,'t1');

EXEC DBMS_STATS.gather_table_stats(USER,'t2');

SELECT table_name,

partition_name,

num_rows

FROM  user_tab_partitions

ORDER BY 1,2;

TABLE_NAME           PARTITION_NAME         NUM_ROWS

-------------------- ------------------------------

T1                   PART_2014                     1

T1                   PART_2015                     1

T2                   PART_2014                     1

T2                   PART_2015                     1

SQL>

2.        TRUNCATE PARTITION ... CASCADE

通过TRUNCATE PARTITION ... CASCADE命令,我们可以清空父表分区和子表分区。

ALTER TABLE t1 TRUNCATE PARTITION part_2014CASCADE UPDATE INDEXES;

EXEC DBMS_STATS.gather_table_stats(USER,'t1');

EXEC DBMS_STATS.gather_table_stats(USER, 't2');

SELECT table_name,

partition_name,

num_rows

FROM  user_tab_partitions

ORDER BY 1,2;

TABLE_NAME           PARTITION_NAME         NUM_ROWS

-------------------- ------------------------------

T1                   PART_2014                     0

T1                   PART_2015                     1

T2                   PART_2014                     0

T2                   PART_2015                     1

SQL>

3.        EXCHANGE PARTITION ... CASCADE

为了测试EXCHANGE PARTITION ...CASCADE命令,创建如下非分区表。为确保层级功能正常,从交换级别开始往下的所有表必须存在。

DROP TABLE t2_temp;

DROP TABLE t1_temp;

CREATE TABLE t1_temp (

id           NUMBER,

info  VARCHAR2(50),

crt_dateDATE,

CONSTRAINT t1_temp_pk PRIMARY KEY (id)

);

CREATE TABLE t2_temp (

id             NUMBER NOT NULL,

t1_id          NUMBER NOT NULL,

info    VARCHAR2(50),

crt_date   DATE,

CONSTRAINT t2_temp_pk PRIMARY KEY (id),

CONSTRAINT t2_temp_t1_temp_fk FOREIGN KEY (t1_id) REFERENCES t1_temp(id) ON DELETE CASCADE

);

INSERT INTO t1_temp VALUES (2, 't1_temp data',TO_DATE('05/05/2015', 'DD/MM/YYYY'));

INSERT INTO t2_temp VALUES (2, 2, 't2_tempdata', TO_DATE('05/05/2015', 'DD/MM/YYYY'));

COMMIT;

如下交换父表和子表分区后,检查表中数据。

-- 交换分区

ALTER TABLE t1

EXCHANGE PARTITION part_2015

WITHTABLE t1_temp

CASCADE

UPDATEINDEXES;

-- 检查分区中的数据

COLUMN t1_info FORMAT A20

COLUMN t2_info FORMAT A20

SELECT t1.info AS t1_info,

t2.info AS t2_info

FROM  t1

JOIN t2 ON t2.t1_id = t1.id;

T1_info              T2_info

-------------------- --------------------

t1_temp data          t2_temp data

SQL>

-- 检查临时表中的数据。

COLUMN t1_temp_info FORMAT A20

COLUMN t2_temp_info FORMAT A20

SELECT t1_temp.info AS t1_temp_info,

t2_temp.info AS t2_temp_info

FROM  t1_temp

JOIN t2_temp ON t2_temp.t1_id = t1_temp.id;

T1_TEMP_info         T2_TEMP_info

-------------------- --------------------

t1 data               t2 data

SQL>

Oracle12c中分区(Partition)新特性之TRUNCATEPARTITION和EXCHANGE PARTITION级联功能的更多相关文章

  1. Oracle12c中数据泵新特性之功能增强(expdp, impdp)

    Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1.   禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展 ...

  2. Oracle12c中性能优化新特性之新增APPROX_COUNT_DISTINCT 快速唯一值计数函数

    Oracle11g中,为了改善DBMS_STATS包收集统计信息时的唯一值计数功能,增加了 APPROX_COUNT_DISTINCT函数,但文档中未记载.Oracle12c文档中包括了该函数,因此, ...

  3. Jdk5.0中出现的新特性

    掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...

  4. MVC中的其他新特性

    MVC中的其他新特性 (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtm ...

  5. C#6.0 中的那些新特性

    C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...

  6. iOS中的项目新特性页面的处理

    一般项目中都会出现新特性页面,比如第一次使用应用的时候,或者在应用设置里查看新特性的时候会出现. 这里,选择新建一个专门处理项目新特性的控制器,来完成功能. 首先是 NewFeaturesViewCo ...

  7. Xcode中StoryBoard Reference 新特性的使用

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  8. 浅析Oracle 12c中Data Guard新特性

    浅析Oracle 12c中Data Guard新特性   写在前面 无论是做Oracle运维的小伙伴还是老伙伴,想必对Oracle数据库的数据级灾备核心技术—Data Guard是再熟悉不过了!这项从 ...

  9. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

随机推荐

  1. (NO.00001)iOS游戏SpeedBoy Lite成形记(十二)

    如果选手能在加速的时候屁股产生推进器效果就跟好了,仿佛选手腾云驾雾的感觉.我们可以用Cocos2D中的CCMotionStreak类来轻松实现.下面在Player.h接口文件添加以下代码: @prop ...

  2. 【一天一道LeetCode】#52. N-Queens II

    一天一道LeetCode系列 (一)题目 Follow up for N-Queens problem. Now, instead outputting board configurations, r ...

  3. lvs与haproxy

    最近一直在看一些高可用性的负载均衡方案,当然那些f5之类的硬件设备是玩不起也接触不到了.只能看这些for free的开源方案. 目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实 ...

  4. 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)

    原文:http://blog.csdn.net/sk719887916/article/details/44781475 skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家 ...

  5. inittab文件剖析[CentOS 5.X](第二版)

    inittab文件剖析[CentOS 5.X] grep -v "^#" /etc/inittab | more #过滤掉以#开头的行 inittab文件格式 id:runleve ...

  6. 《java入门第一季》之面向对象(private关键字与封装概念的初探)

    /* 定义一个学生类: 成员变量:name,age 成员方法:show()方法 在使用这个案例的过程中,发现了一个问题: 通过对象去给成员变量赋值,可以赋值一些非法的数据.例如:name你赋值了一个3 ...

  7. OM模块功能&API详解

    (一)销售订单概述 1.1   与车间模块关系 当使用ATO类型订单时,订单管理模块会直接在车间模块中产生任务 1.2   与库存模块关系 在销售订单中使用的物料,单位等信息均来自库存模块,在订单执行 ...

  8. LeetCode之“链表”:Rotate List

    题目链接 题目要求: Given a list, rotate the list to the right by k places, where k is non-negative. For exam ...

  9. Android实现RecyclerView侧滑删除和长按拖拽-ItemTouchHelper

    RecyclerView这个被誉为ListView和GirdView的替代品,它的用法在之前的一篇博文中就已经讲过了,今天我们就来实现RecyclerView的侧滑删除和长按拖拽功能,实现这两个功能我 ...

  10. FNDCPASS Troubleshooting Guide For Login and Changing Applications Passwords

    In this Document   Goal   Solution   1. Error Starting Application Services After Changing APPS Pass ...