返回顶部
首页 > 资讯 > 数据库 >ORACLE11G 分区表新特性
  • 796
分享到

ORACLE11G 分区表新特性

2024-04-02 19:04:59 796人浏览 薄情痞子
摘要

1.引用分区表 使子表使用父表的分区条件进行分区,而无需在子表中额外添加用于分区的列,造成数据逆规范化,造成空间浪费等问题。 参考实例: (1).创建主表 CREATE TAB

1.引用分区表

使子表使用父表的分区条件进行分区,而无需在子表中额外添加用于分区的列,造成数据逆规范化,造成空间浪费等问题。

参考实例:

(1).创建主表

CREATE TABLE orders
(
   order#       NUMBER PRIMARY KEY,
   order_date   DATE NOT NULL,
   data         VARCHAR2 (30)
)
PARTITioN BY RANGE
   (order_date)
   (
      PARTITION
         part_2016 VALUES LESS THAN (TO_DATE ('01-01-2017', 'dd-mm-yyyy')),
      PARTITION
         part_2017 VALUES LESS THAN (TO_DATE ('01-01-2018', 'dd-mm-yyyy')))
/

insert into orders values ( 1, to_date( '01-01-2017', 'dd-mm-yyyy' ), 'xxx' );
insert into orders values ( 2, to_date( '01-01-2016', 'dd-mm-yyyy' ), 'yyy' );

commit;


(2).创建子表

create table order_line_items
    ( 
      order#      number NOT NULL,
      line#      number NOT NULL,
      data      varchar2(30),
      constraint c1_pk primary key(order#,line#),
      constraint c1_fk_p foreign key(order#) references orders
    )
    enable row movement
   partition by reference(c1_fk_p)
   /

insert into order_line_items values  ( 1, 1, 'yyy' );
insert into order_line_items values  ( 2, 1, 'yyy' );


  SELECT table_name, partition_name
    FROM user_tab_partitions
   WHERE table_name IN ('ORDERS', 'ORDER_LINE_ITEMS')
ORDER BY table_name, partition_name;

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS               PART_2016
ORDERS               PART_2017
ORDER_LINE_ITEMS     PART_2016
ORDER_LINE_ITEMS     PART_2017


(3).删除父表partition,可以级联删除子表分区

alter table orders drop partition part_2016 update global indexes;

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS               PART_2017
ORDER_LINE_ITEMS     PART_2017


(4).添加父表partition,可以级联添加子表分区

alter table orders add partition part_2018 values less than (to_date( '01-01-2019', 'dd-mm-yyyy' ));

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS               PART_2017
ORDERS               PART_2018
ORDER_LINE_ITEMS     PART_2017
ORDER_LINE_ITEMS     PART_2018


(5).删除子表partition,报错

alter table order_line_items drop partition PART_2017 update global indexes;

ORA-14255: table is not partitioned by Range, List, Composite Range or Composite List method


(6).truncate子表partition,可行。

alter table admin.order_line_items truncate partition PART_2017;


2.间隔分区表

定义分区规则,当有符合条件的数据插入时自动创建分区。

可以使用alter命令将现有的区间分区表修改为间隔分区,也可以使用create创建一个间隔分区。

interval分区的特点
-由range分区派生而来
-以定长宽度创建分区(比如年、月、具体的数字(比如100、500等))
-分区字段必须是number或date类型
-必须至少指定一个range分区(永久分区)
-当有记录插入时,系统根据需要自动创建新的分区和本地索引
-已有的范围分区可被转换成间隔分区(通过ALTER TABLE SET INTERVAL选项完成)
-Interval Partitioning不支持支持索引组织表
-在Interval Partitioning表上不能创建domain index


参考示例:

- 创建间隔分区表

CREATE TABLE admin.orders2
(
   order#       NUMBER PRIMARY KEY,
   order_date   DATE NOT NULL
)
PARTITION BY RANGE
   (order_date)
   INTERVAL ( NUMTOYMINTERVAL (1, 'month') )
   (
      PARTITION
         p201612 VALUES LESS THAN (TO_DATE ('01-01-2017', 'dd-mm-yyyy')));

- 插入数据

insert into admin.orders2 values(1,TO_DATE ('01-12-2016', 'dd-mm-yyyy'));
insert into admin.orders2 values(2,TO_DATE ('02-01-2017', 'dd-mm-yyyy'));
insert into admin.orders2 values(3,TO_DATE ('02-02-2017', 'dd-mm-yyyy'));

查看自动生成分区

  SELECT table_name, partition_name
    FROM user_tab_partitions
   WHERE table_name IN ('ORDERS2')
ORDER BY table_name, partition_name;

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS2              P201612
ORDERS2              SYS_P121
ORDERS2              SYS_P122


- 删除数据已生成的分区不变

TABLE_NAME           PARTITION_NAME
-------------------- --------------------
ORDERS2              P201612
ORDERS2              SYS_P121
ORDERS2              SYS_P122


- 将原有的range分区表变更为interval分区表

ALTER TABLE admin.orders SET INTERVAL(1000000);
ALTER TABLE admin.orders SET INTERVAL (NUMTODSINTERVAL(1,'DAY')); --NUMTODSINTERVAL常用的单位有 ('day','hour','minute','second')
ALTER TABLE admin.orders SET INTERVAL (numtoyminterval(1,'month')); --numtoyminterval常用的单位有'year','month'


- 将interval分区表转为range分区表

ALTER TABLE admin.orders3 SET INTERVAL();


3.虚拟列分区

以下内容来自https://www.cnblogs.com/moonandstar08/p/5100567.html

(1).只能在堆组织表(普通表)上创建虚拟列
(2).虚拟列不能是LOB或者RAW类型;
(3).虚拟列的值并不是真实存在的,只有用到时,才根据表达式计算出虚拟列的值,磁盘上并不存放。
(4).可把虚拟列当做分区关键字建立分区表,这是oracle 11g的另一新特性--虚拟列分区
创建带有虚拟列的分区表:
   create table test(n1 number, c1 varchar2(80), n2 number generated always as (n1*0.8)) ---创建带有虚拟列的分区
   create table test1(n1 number,
                 c1 varchar2(80),
                 v1 varchar2(2) generated always as (substr(c1,1,1))
                 )
   partition by list (v1)
    (partition v11 values('I'),
     partition v12 values('O'),
     partition v13 values('E'),
     partition v15 values(default)
    );
查询:select * from test1 partition(v11);
(5).可在虚拟列上建立索引
   create index inx_test on test1(v1);
(6).如果在已经创建的表中增加虚拟列时,若没有指定虚拟列的字段类型;
ORACLE会根据 generated always as 后面的表达式计算的结果自动设置该字段的类型
(7).虚拟列的值由ORACLE根据表达式自动计算得出,不可以做UPDATE和INSERT操作, 可以对虚拟列做 DELETE 操作
(8).表达式中的所有列必须在同一张表
(9).表达式不能使用其他虚拟列


4.系统分区表

- 系统自动生成分区,无分区条件

- 数据和分区没有关系

- 不能建立local index

- 插入数据时要指明分区

CREATE TABLE admin.order4
(
   col1   NUMBER,
   name   VARCHAR2 (100)
)
PARTITION BY SYSTEM
(PARTITION p1,
 PARTITION p2,
 PARTITION p3,
 PARTITION p4);


 insert into admin.order4 partition(p2) select col1,name from admin.order4;


5.完全组合分区

(1).范围分区(range)
(2).哈希分区(hash)
(3).列表分区(list)
(4).范围-哈希复合分区(range-hash)
(5).范围-列表复合分区(range-list)
oracle11g 新增
range-range,list-range,list-list,list-hash


您可能感兴趣的文档:

--结束END--

本文标题: ORACLE11G 分区表新特性

本文链接: https://lsjlt.com/news/47142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ORACLE11G 分区表新特性
    1.引用分区表 使子表使用父表的分区条件进行分区,而无需在子表中额外添加用于分区的列,造成数据逆规范化,造成空间浪费等问题。 参考实例: (1).创建主表 CREATE TAB...
    99+
    2024-04-02
  • Oracle11g新特性:引用分区(reference partitioning)
    引用分区(reference partitioning)是Oracle Database 11g Release 1及以上版本的一个新特性。它处理的是父/子对等分区的问题。也就是说,要以某种方式对子表分区,...
    99+
    2024-04-02
  • oracle 11g分区表新特性---interval分区 的坑
    oracle 11g分区表新特性---interval分区 的坑 oracle 11g的范围分区表中新增的interval分区特性,此种范围分区不需要定义MAXVALUE,Oracle会根据分区定义的...
    99+
    2024-04-02
  • Oracle11g新特性注意事项
    在从oracle10g升级到oracle11g后,就需要对oracle11g的新特性进行了解,这些特性可能会对应用及性能产生影响,需要调整。1. Oracle11g密码过期策略oracle11g中默认在de...
    99+
    2024-04-02
  • Oracle 12.2新特性----在线把非分区表转为分区表
    在Oracle12.2版本之前,如果想把一个非分区表转为分区表常用的有这几种方法:1、建好分区表然后insert into select 把数据插入到分区表中;2、使用在线重定义(DBMS_RED...
    99+
    2024-04-02
  • Oracle11g 新特性:优化Rman备份UNDO表空间
    Oracle11gR1的新特性,Rman备份UNDO表空间时排除已经提交的会话对应的数据,提高了Rman备份的效率。官方文档:http://docs.oracle.com/cd/B28359_01/serv...
    99+
    2024-04-02
  • Oracle11g备份恢复新特性有哪些
    小编给大家分享一下Oracle11g备份恢复新特性有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 闪回日志急救还记得 O...
    99+
    2024-04-02
  • Oracle 12c新特性维护表分区Global Index不失效
    1.新特性官方文档说明 ...
    99+
    2024-04-02
  • PostgreSQL新特性分析
    这篇文章主要介绍“PostgreSQL新特性分析”,在日常操作中,相信很多人在PostgreSQL新特性分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PostgreSQL...
    99+
    2024-04-02
  • 分析JavaScript新特性
    本篇内容介绍了“分析JavaScript新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、类的私有变...
    99+
    2024-04-02
  • Oracle 11g 新特性:自动创建分区(Interval Partition)
      分区(Partition)一直是Oracle数据库引以为傲的一项技术,正是分区的存在让Oracle高效的处理海量数据成为可能,在Oracle 11g中,分区技术在易用性和可扩展性上再次得到了增...
    99+
    2024-04-02
  • Java新特性:Lambda表达式
    Java新特性:Lambda表达式 Lambda 表达式(Lambda expression),也可称为闭包(Closure),是 Java(SE)8 中一个重要的新特性。Lambda 表达式允许我们通过表达式来代替功能接口。Lambd...
    99+
    2023-08-17
    java python 开发语言
  • Oracle 12C新特性-RMAN恢复表
    Oracle 12C 新特性 -RMAN 恢复表 oracle 如何恢复单张表数据? 场景一:处理简单,恢复速度快 1 如果表被 delete 、 update 、 ...
    99+
    2024-04-02
  • html5表单新特性是什么
    这篇文章主要为大家展示了“html5表单新特性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“html5表单新特性是什么”这篇文章吧。 ...
    99+
    2024-04-02
  • MySQL 8.0新特性完整列表
    下面简要列出了 MySQL 8.0 中的新功能 -事务数据字典用于存储有关对象信息的事务数据字典。原子数据定义语言原子数据定义语言 (DDL) 语句,用于组合对数据字典、存储引擎操作等进行的更新。安全性增强安全级别得到了提高,DBA(数据库...
    99+
    2023-10-22
  • JDK8新特性实例分析
    这篇“JDK8新特性实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JDK8新特性实...
    99+
    2024-04-02
  • mysql 8.0.17 分区特性测试
    一、下面所有的测试基于mysql 8.0.17版本。 elcome to the MySQL monitor.  Commands en...
    99+
    2024-04-02
  • Oracle11g新增视图查询表空间使用率分析
    本篇内容主要讲解“Oracle11g新增视图查询表空间使用率分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle11g新增视图查询表空间使用率分析”吧...
    99+
    2024-04-02
  • Oracle 11g 新特性:只读表(Read-only)
    Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行DML操作和某些DDL操作。在Oracle11g之前的版本,只能将整个tablespace或...
    99+
    2024-04-02
  • Java8新特性:lambda表达式总结
    一、Lambda 表达式的基础语法 Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符箭头操作符将 La...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作