Oracle12c中分区(Partition)新特性之TRUNCATEPARTITION和EXCHANGE PARTITION级联功能
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级联功能的更多相关文章
- Oracle12c中数据泵新特性之功能增强(expdp, impdp)
Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1. 禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展 ...
- Oracle12c中性能优化新特性之新增APPROX_COUNT_DISTINCT 快速唯一值计数函数
Oracle11g中,为了改善DBMS_STATS包收集统计信息时的唯一值计数功能,增加了 APPROX_COUNT_DISTINCT函数,但文档中未记载.Oracle12c文档中包括了该函数,因此, ...
- Jdk5.0中出现的新特性
掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...
- MVC中的其他新特性
MVC中的其他新特性 (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtm ...
- C#6.0 中的那些新特性
C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...
- iOS中的项目新特性页面的处理
一般项目中都会出现新特性页面,比如第一次使用应用的时候,或者在应用设置里查看新特性的时候会出现. 这里,选择新建一个专门处理项目新特性的控制器,来完成功能. 首先是 NewFeaturesViewCo ...
- Xcode中StoryBoard Reference 新特性的使用
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- 浅析Oracle 12c中Data Guard新特性
浅析Oracle 12c中Data Guard新特性 写在前面 无论是做Oracle运维的小伙伴还是老伙伴,想必对Oracle数据库的数据级灾备核心技术—Data Guard是再熟悉不过了!这项从 ...
- ES6系列之项目中常用的新特性
ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...
随机推荐
- python的w+到底是什么
python 文件处理的打开方式有很多种, os.mknod("test.txt") 创建空文件 fp = open("test.txt",w) 直接打开一个文 ...
- 小强的HTML5移动开发之路(5)——制作一个漂亮的视频播放器
来自:http://blog.csdn.net/dawanganban/article/details/17679069 在前面几篇文章中介绍了HTML5的特点和需要掌握的基础知识,下面我们开始真正的 ...
- wing带你玩转自定义view系列(1) 仿360内存清理效果
本篇是接自 手把手带你做自定义view系列 宗旨都是一样,带大家一起来研究自定义view的实现,与其不同的是本系列省去了简单的坐标之类的讲解,重点在实现思路,用简洁明了的文章,来与大家一同一步步学习. ...
- Ubuntu 14 安装Skype 4.3
Ubuntu 14 安装Skype 4.3Step 1: 删除老版本sudo apt-get remove skype skype-bin:i386 skype:i386 sudo apt-get i ...
- ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...
- 《java入门第一季》之面向对象(方法重写问题)
方法重载的引入:根据一个案例: /* 继承中成员方法的关系: A:子类中的方法和父类中的方法声明不一样,这个太简单. B:子类中的方法和父类中的方法声明一样,这个该怎么玩呢? 通过子类对象调用方法: ...
- mongodb系列之---副本集配置与说明
在配置副本集之前,我们先来了解一些关于副本集的知识. 1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置 ...
- 网站开发进阶(十一)如何将一个jsp页面嵌套在另一个页面中
如何将一个jsp页面嵌套在另一个页面中 这个在做网页中常要用到,有些通用的内容可集中放在一个页面文件中,其它要用到这些内容的页面只需要包含(引用)这个通用文件即可.这样便于维护,如果有很多网页,当通用 ...
- ViewPagerIndicator+viewpager指示器详解
前几天学习了ViewPager作为引导页和Tab的使用方法.后来也有根据不同的使用情况改用Fragment作为Tab的情况,以及ViewPager结合FragmentPagerAdapter的使用.今 ...
- rails关于一个Action的多次或多个Action之间共享数据的思路
举一个实际的例子:一个考试页面,总共有20题,每页一题,通过页面下方的"前一题"和"后一题"的提交按钮来跳转题目.如果到最后一题则再产生一个"交卷&q ...