精华内容
下载资源
问答
  • oracle range分区表增加分区

    千次阅读 2017-06-24 17:39:18
    oracle range分区表增加分区

    原文:http://blog.csdn.net/phantomes/article/details/52913687

    这块要分两种情况进行试验,1.没有maxvalue分区。2.有maxvalue分区。
     
    下面分别试验之:
      www.2cto.com  
    A.没有maxvalue的range分区表增加分区。
     
    1.创建分区表:
     
    SQL> CREATE TABLE t_range_part (ID NUMBER)
     
      2  PARTITION BY RANGE(ID)
     
      3  (
     
      4     PARTITION t_range_1 VALUES LESS THAN (10),
     
      5     PARTITION t_range_2 VALUES LESS THAN (20),
     
      6     PARTITION t_range_3 VALUES LESS THAN (30)
     
      7  );
     
    Table created
      www.2cto.com  
    2.查看分区表信息:
     
    SQL> select table_name,partition_name,high_value from dba_tab_partitions where table_name='T_RANGE_PART';
     
    TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE
     
    ------------------------------ ------------------------------ --------------------------------------------------------------------------------
     
    T_RANGE_PART                   T_RANGE_1                      10
     
    T_RANGE_PART                   T_RANGE_2                      20
     
    T_RANGE_PART                   T_RANGE_3                      30
     
    3.添加分区:
     
    SQL> alter table t_range_part add partition t_range_4 values less than (40);
     
    Table altered
     
    4.再次查看分区表信息:
     
    SQL> select table_name,partition_name,high_value from dba_tab_partitions where table_name='T_RANGE_PART';
     
    TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE
     
    ------------------------------ ------------------------------ --------------------------------------------------------------------------------
     
    T_RANGE_PART                   T_RANGE_1                      10
     
    T_RANGE_PART                   T_RANGE_2                      20
     
    T_RANGE_PART                   T_RANGE_3                      30
     
    T_RANGE_PART                   T_RANGE_4                      40
     
    由以上结果可以看出,分区添加成功!
     
    B.有maxvalue分区的分区表增加分区。
     
    1.创建分区表:
     
    SQL> CREATE TABLE t_range_part (ID NUMBER)
     
      2  PARTITION BY RANGE(ID)
     
      3  (
     
      4     PARTITION t_range_1 VALUES LESS THAN (10),
     
      5     PARTITION t_range_2 VALUES LESS THAN (20),
     
      6     PARTITION t_range_3 VALUES LESS THAN (30),
     
      7     PARTITION t_range_max VALUES LESS THAN (MAXVALUE)
     
      8  );
     
    Table created
     
    2.查看分区表信息:
     
    SQL> select table_name,partition_name,high_value from dba_tab_partitions where table_name='T_RANGE_PART';
     
    TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE
     
    ------------------------------ ------------------------------ --------------------------------------------------------------------------------
     
    T_RANGE_PART                   T_RANGE_1                      10
     
    T_RANGE_PART                   T_RANGE_2                      20
     
    T_RANGE_PART                   T_RANGE_3                      30
     
    T_RANGE_PART                   T_RANGE_MAX                    MAXVALUE
     
    3.添加分区:
     
    注意,有了maxvalue,就不能直接add partition,而是需要max分区split。下面分别试验:
     
    SQL> alter table t_range_part add partition t_range_4 values less than (40);
     
    alter table t_range_part add partition t_range_4 values less than (40)
     
    ORA-14074: 分区界限必须调整为高于最后一个分区界限
     
    SQL> alter table t_range_part split partition t_range_max at (40) into (partition t_range_4,partition t_range_max);
     
    Table altered
      www.2cto.com  
    4.查看分区表信息:
     
    SQL> select table_name,partition_name,high_value from dba_tab_partitions where table_name='T_RANGE_PART';
     
    TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE
     
    ------------------------------ ------------------------------ --------------------------------------------------------------------------------
     
    T_RANGE_PART                   T_RANGE_1                      10
     
    T_RANGE_PART                   T_RANGE_2                      20
     
    T_RANGE_PART                   T_RANGE_3                      30
     
    T_RANGE_PART                   T_RANGE_4                      40
     
    T_RANGE_PART                   T_RANGE_MAX                    MAXVALUE
     
    结果看出,添加分区成功。
     
    对于有maxvalue分区的分区表来说,其实切割最后一个分区。

    展开全文
  • Oracle 分区表增加分区

    千次阅读 2013-03-14 17:20:41
    增加表分区适应于所有的分区形式,其语法是alter table tbname add partition. 但是,需要注意对于像list,range这种存在范围值的分区,所要增加分区值必须要大于当前分区中的最大值 (如果当前存在maxvalue或...
    增加表分区适应于所有的分区形式,其语法是alter table tbname add partition.
    但是,需要注意对于像list,range这种存在范围值的分区,所要增加的分区值必须要大于当前分区中的最大值
    (如果当前存在maxvalue或default的分区,add partition会报错,这种情况只能使用split)
    alter table tbname split partition maxvalue分区名 at 分区值 into (partition 增加分区名 tablespace 表空间名称 ,partition maxvalue分区名 tablespace 表空间名称) ;

    过程中有数据改动的分区其local索引和glocal索引都会失效,需要重新编译,
    ALTER INDEX 索引名 REBUILD
    展开全文
  • oracle表分区增加分区

    千次阅读 2019-09-25 05:39:02
    昨天发现车辆轨迹库的表分区用完了,连夜加了分区,我们存轨迹的这张表建分区的时候按日期建只到2012-10-15,分区名从TAB_GPSBUSHIS_P1....TAB_GPSBUSHIS_P999,从2012-10-15开始的数据就默认都存在了TAB_GPSBUSHIS_...

    昨天发现车辆轨迹库的表分区用完了,连夜加了分区,我们存轨迹的这张表建分区的时候按日期建只到2012-10-15,分区名从TAB_GPSBUSHIS_P1....TAB_GPSBUSHIS_P999,从2012-10-15开始的数据就默认都存在了TAB_GPSBUSHIS_P1000,所以现在的任务就是从2012-10-16开始继续建分区。

    为了分区的序号连续性,我先将maxvalue对应的分区改了个名

    alter table tab_gpsbushis rename partition tab_gpsbushis_p1000 to tab_gpsbushis_pmax

     

    增加分区的命令

    alter table tab_gpsbushis add  partition TAB_GPSBUSHIS_P1000 values less than (TO_DATE(' 2012-10-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));

    Woops,报错了  ORA-14074: partition bound must collate higher than that of the last partition

    报这个因为你建了maxvalue的分区,就会报错(我后来把这个分区的数据转移掉了,还是不行,所以我想是不是只要建了maxvalue的分区就不能继续增加分区了)

    于是就google,终于找到热心网友的解决之道,先split,把这里的数据转移掉,我这里的情况是2012-10-15发现分区不够了,所以maxvalue对应的分区只存了2012-10-15的轨迹数据(还有一些不合法的日期的数据),我是这样split的:

    alter table TAB_GPSBUSHIS
    split partition TAB_GPSBUSHIS_PMAX at (TO_DATE(' 2012-10-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    into (partition TAB_GPSBUSHIS_P1000, partition TAB_GPSBUSHIS_PMAX)

    如果你2012-10-20发现的,你应该就这样写了

    alter table TAB_GPSBUSHIS
    split partition TAB_GPSBUSHIS_PMAX at (TO_DATE(' 2012-10-21 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    into (partition TAB_GPSBUSHIS_P1000, partition TAB_GPSBUSHIS_PMAX)

    再查看表属性中的分区就会发现多了TAB_GPSBUSHIS_P1000这个分区,

    查TAB_GPSBUSHIS_PMAX分区下的数据确实就只剩下些非法数据了,就可以全delete掉了

    这时候再执行那个add partition操作还是报同样的错,所以我就干脆把maxvalue对应的分区给drop掉了

    ALTER TABLE tab_gpsbushis DROP PARTITION tab_gpsbushis_pmax ;

    然后再执行add partition操作,ok成功了

    然后就拼命加啊,加啊,加到了2012-12-31,就先加到这吧

     

    最后又把maxvalue对应的分区加上了,

    alter table tab_gpsbushis add partition tab_gpsbushis_pmax values less than (maxvalue).

     

    ok,结束

    转载于:https://www.cnblogs.com/jadic/archive/2012/10/16/2725454.html

    展开全文
  • Oracle 分区表——Range分区

    千次阅读 2017-06-24 17:19:17
    Oracle 分区表——Range分区

    原文地址:http://www.tuicool.com/articles/MzeM7r

    本博文少许理论资料来至DBA技术大牛 http://blog.csdn.net/tianlesoftware/article/details/4717318 ,本着实践式学习,书写以下博文:

    一、什么是分区表

           Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。

           Oracle的分区表可以包括多个分区, 每个分区都是一个独立的段( SEGMENT ),可以存放到不同的表空间中 。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。

     二、什么时候用分区表

    When to Partition a Table 什么时候需要分区表,官网的 2 个建议如下:

    (1)Tables greater than 2GB should always be considered for partitioning.

    (2)Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.

    三、分区表优点

           (1)由于将数据分散到各个分区中,减少了数据损坏的可能性;

           (2)可以对单独的分区进行备份和恢复;

           (3)可以将分区映射到不同的物理磁盘上,来分散IO;

           (4)提高可管理性、可用性和性能。

    四、分区表类型

           (1)范围分区(range)——我们这篇博文的内容;

           (2)哈希分区(hash);

           (3)列表分区(list);

           (4)范围-哈希复合分区(range-hash);

           (5)范围-列表复合分区(range-list)。

    五、Range 分区

    Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。

           如按照时间划分,2010年1月的数据放到a分区,2月的数据放到b分区,在创建的时候,需要指定基于的列,以及分区的范围值。

           在按时间分区时, 如果某些记录暂无法预测范围,可以创建 maxvalue 分区,所有不在指定范围内的记录都会被存储到 maxvalue 所在分区中。

    六、Range分区实例说明

    例子:创建一张表,表有两个字段(ID、TIME),我们完成对TIME列的范围分区,即将1-12月创建成对应的12个分区表,对分区表及分区表数据进行增删查改操作。

    创建分区表:

    创建表同时完成对表进行分区(按月份分区)

    /*创建分区表*/
    create table pdba (id number, time date) partition by range (time)
    (
    	partition p1 values less than (to_date('2013-02-1', 'yyyy-mm-dd')),
    	partition p2 values less than (to_date('2013-03-1', 'yyyy-mm-dd')),
    	partition p3 values less than (to_date('2013-04-1', 'yyyy-mm-dd')),
    	partition p4 values less than (to_date('2013-05-1', 'yyyy-mm-dd')),
    	partition p5 values less than (to_date('2013-06-1', 'yyyy-mm-dd')),
    	partition p6 values less than (to_date('2013-07-1', 'yyyy-mm-dd')),
    	partition p7 values less than (to_date('2013-08-1', 'yyyy-mm-dd')),
    	partition p8 values less than (to_date('2013-09-1', 'yyyy-mm-dd')),
    	partition p9 values less than (to_date('2013-10-1', 'yyyy-mm-dd')),
    	partition p10 values less than (to_date('2013-11-1', 'yyyy-mm-dd')),
    	partition p11 values less than (to_date('2013-12-1', 'yyyy-mm-dd')),
    	partition p12 values less than (to_date('2014-01-1', 'yyyy-mm-dd'))
    	--partition p13 values less than (maxvalue)    --不建议使用
    )

    查询所有分区表,验证分区表是否创建成功。

    select * from ALL_TAB_PARTITIONS a

    结果如下图:


    添加数据:

    为了测试效果,我们添加120万条数据,每月添加10万条数据:

    /*添加数据*/
    declare   
    begin  
              for n in 1..100000 LOOP  
    					-- insert into sale_data select * from sale_data;
    						insert into pdba VALUES(1,to_date('2013-01-05','yyyy-mm-dd'));
    						insert into pdba VALUES(2,to_date('2013-02-05','yyyy-mm-dd'));
    						insert into pdba VALUES(3,to_date('2013-03-05','yyyy-mm-dd'));
    						insert into pdba VALUES(4,to_date('2013-04-05','yyyy-mm-dd'));
    						insert into pdba VALUES(5,to_date('2013-05-05','yyyy-mm-dd'));
    						insert into pdba VALUES(6,to_date('2013-06-05','yyyy-mm-dd'));
    						insert into pdba VALUES(7,to_date('2013-07-05','yyyy-mm-dd'));
    						insert into pdba VALUES(8,to_date('2013-08-05','yyyy-mm-dd'));
    						insert into pdba VALUES(9,to_date('2013-09-05','yyyy-mm-dd'));
    						insert into pdba VALUES(10,to_date('2013-10-05','yyyy-mm-dd'));
    						insert into pdba VALUES(11,to_date('2013-11-05','yyyy-mm-dd'));
    						insert into pdba VALUES(12,to_date('2013-12-05','yyyy-mm-dd'));
         end loop;   
    end;

    测试数据是否添加正确:

    先查看物理表记录:

    /*验证*/
    select count(*) from pdba

    结果如下图:
     

    再随机查看分区表,数据, 比如我们查看12月份的分区表数据,理论应该是10W条。

    /*分区表查询*/
    select count(*) from pdba partition(p12)  --一月份

           

    至此我们创建、验证、并向表中添加数据 完成。

    查询分区表:

    /*分区表查询*/
    select * from pdba partition(p12)  --十二月份

    删除分区表:数据也会被删除

    /*删除分区表*/
    ALTER TABLE pdba DROP PARTITION P12;

    当我们再次查询十二月份的分区表时:
    /*分区表查询*/
    select * from pdba partition(p12)  --十二月份
    结果如下:
     

    而我们物理表中数据也会减少10w条。

    select count(*) from pdba

    结果如下:
     

    增加分区表:

    现在的物理表只有1到11月份的分区表,那我们再次添加12月份的分区表并再次添加10w条数据

    /*增加分区表*/
    ALTER TABLE pdba ADD PARTITION P12 VALUES LESS THAN(TO_DATE('2014-01-01','YYYY-MM-DD'));

    添加数据:

    /*添加数据*/
    declare   
    begin  
              for n in 1..100000 LOOP  
    		insert into pdba VALUES(12,to_date('2013-12-05','yyyy-mm-dd'));
         	  end loop;   
    end;

    再次查询十二月份的分区表验证操作是否成功

    /*分区表查询*/
    select count(*) from pdba partition(p12)  --十二月份

    结果如图:

     

    合并分区表:

    例子:将11月和12月的分区表合并在一起。

    /*合并分区表*/
    ALTER TABLE pdba MERGE PARTITIONS p11, p12 INTO PARTITION p13

    分区表合并后,原分区表空间被释放,原数据均转移到新的表空间下。

    现在查询新的分区表,数据应该为20w条。

    select count(*) from pdba partition(p13)

    结果如图:

     

    分割分区表:

    例子:将p13分区表分割成p11和p12分区表,即将11月和12月数据重新分割开。

    /*一个分区表分割成两个分区表*/
    alter table pdba split Partition p13 at (to_date('2013-12-01','yyyy-mm-dd')) into (Partition p11,Partition p12);

    过程和合并分区表下相反。

    现在p11和p12表空间和数据重新恢复和添加。

    11月和12月各10w条数据

    更改分区表名:

    --更改分区表名 
    alter table pdba rename Partition p11 to p22;

    增删查改分区表的数据:

    操作与物理表几乎相同, 只是操作分区表时在分区表前加入 物理表名称即可。具体如下图:

    --查询分区表数据
    select DISTINCT * from pdba partition(p12)  
    --修改分区表数据
    update pdba partition(p12) p set p.time = to_date('2013-12-08','yyyy-mm-dd'); 
    --增加分区表数据
    insert into pdba partition(p12) p VALUES(1,to_date('2013-12-29','yyyy-mm-dd'));
    --删除分区表数据
    delete from pdba partition(p12) t where t.id = 1

    七、附录:

    显示分区表信息

    显示数据库所有分区表的信息:DBA_PART_TABLES

    显示当前用户可访问的所有分区表信息:ALL_PART_TABLES

    显示当前用户所有分区表的信息:USER_PART_TABLES

    显示表分区信息 显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS

    显示当前用户可访问的所有分区表的详细分区信息:ALL_TAB_PARTITIONS

    显示当前用户所有分区表的详细分区信息:USER_TAB_PARTITIONS

    显示子分区信息 显示数据库所有组合分区表的子分区信息:DBA_TAB_SUBPARTITIONS

    显示当前用户可访问的所有组合分区表的子分区信息:ALL_TAB_SUBPARTITIONS

    显示当前用户所有组合分区表的子分区信息:USER_TAB_SUBPARTITIONS

    显示分区列 显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS

    显示当前用户可访问的所有分区表的分区列信息:ALL_PART_KEY_COLUMNS

    显示当前用户所有分区表的分区列信息:USER_PART_KEY_COLUMNS

    显示子分区列 显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COLUMNS

    显示当前用户可访问的所有分区表的子分区列信息:ALL_SUBPART_KEY_COLUMNS

    显示当前用户所有分区表的子分区列信息:USER_SUBPART_KEY_COLUMNS

    Range分区表基本操作如上,高级操作,如分区表下在分区,建立视图等,未完待续。
    展开全文
  • --创建表分区 按时分秒来自动创建分区的 枚举值:'DAY'|'HOUR'|'MINUTE'|'SECOND'create table dwuser.temp_cjn( id NUMBER, deal_time DATE, name VARCHAR2(255))PARTITION BY RANGE(deal_ti...
  • ORACLE增加了间隔分区功能,可以在数据插入的时候自动添加分区,但是MySQL就不具备这个功能,因为是数据迁移,所以需要提前将ORACLE的表分区在MySQL中进行创建,为了实现这部分功能我采用以下几步过程。 1.1 创建My...
  • oracle表空间表分区详解及oracle表分区查询使用方法 此文从以下几个方面来整理关于分区表的概念及操作: 1.空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的...
  • 一、背景知识 Oralce中的一张数据量达到亿数量级后或是单达到2G大小,查询效率似乎会明显下降。需要通过分区的方式,从行的维度...分区个数需设置成2的幂次列表,类似枚举,需事先知道字段的精确值混合,上述各
  • Oracle分区表分区索引

    千次阅读 2017-08-10 17:06:52
    Oracle分区索引 索引与类似,也可以分区分区索引分为两类: Locally partitioned index(局部分区索引)Globally partitioned index(全局分区索引) 下面就来详细解析一下这两类索引。   一:...
  • 为分区表增加分区的时候报错 查看报错代码 [oracle@backup-recovery misdb]$ oerr ora 14120 14120, 00000, "incompletely specified p...
  • 分享一个自己学习和实践的关于Oracle表自动按月分区知识点,已经在项目上线并且有效的方案。
  • oracle表分区

    2014-07-13 10:09:54
    ORACLE分区是一种处理超大型、索引等的技术。...分区通过将操作分配更小的存储单元,减少了需要进行管理操作的时间,并通过增强的并行处理提高了性能,通过屏蔽故障数据的分区,还增加了可用性
  • oracle分区表分区和查询

    千次阅读 2019-08-22 22:05:42
    此文从以下几个方面来整理关于分区表的概念及操作: 1.空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作. 空间及分区表的概念 空间:是一个或...
  • ORACLE分区表添加新分区

    万次阅读 2014-01-02 14:10:05
    列表分区表要先删掉,边界分区: 1> ALTER TABLE N_F_ORDER DROP PARTITION PDEFAULT; ---删除默认分区    2>ALTER TABLE N_F_ORDER ADD PARTITION p2015 VALUES ('15'); ------添加新分区      3>ALTER ...
  • oracle 表分区 表分区示例

    千次阅读 2008-04-15 15:04:00
    分区方法概述Oracle 提供了一下几种分区方法: 范围分区 列表分区 哈希分区 复合分区 何时应该对表进行分区 图 18-2 列表分区,范围分区,及哈系分区 图 18-2 显示了依据销售区域进行列表分区,以两个月为一区间...
  • Oracle 表分区与索引分区

    千次阅读 2016-04-26 13:06:12
    分区技术简介Oracle是最早支持物理分区的数据库管理系统供应商,表分区的功能是在Oracle 8.0版本推出的。分区功能能够改善应用程序的性能、可管理性和可用性,是数据库管理中一个非常关键的技术。尤其在今天,数据库...
  • oracle自动添加分区表分区

    千次阅读 2017-12-14 18:40:00
    将同时写的一个自动添加分区表的方法粘了过来,一起分享 1、新建一个存储过程去添加分区表分区 create or replace procedureCREATE_BILL_LOGOUT_DEF_PARTION is today varchar2(20); partionsql varchar2(300)...
  • Oracle10G下空间监控,增加下月空间,分区表增加下月表分区!供参考、讨论! http://www.itpub.net/thread-1732395-1-1.html
  • 深入学习Oracle分区表分区索引

    千次阅读 2018-07-09 15:41:11
    转载于:http://www.blogjava.net/rabbit/archive/2013/01/08/393955.html深入学习Oracle分区表分区索引 关于分区表分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:• ...
  • Oracle表增加分区报错“ORA-14760

    千次阅读 2020-06-05 23:29:17
    Oracle表增加分区报错“ORA-14760欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...
  • ORACLE性能优化之表分区 一、概念 表分区一般指分区表,将中的数据在物理上存放到多个“空间”(物理文件上)的这个过程称为表分区。 二、什么时候用? 在构建千兆字节数据系统或超高可用性系统时,当数据...
  • Oracle分区表

    万次阅读 2018-07-08 10:53:25
    分区对应用透明,即对访问数据库的应用而言,逻辑上讲只有一个或一个索引(相当于应用“看到”的只是一个或索引),但在物理上这个或索引可能由数十个物理分区组成。每个分区都是一个独立的对象,可以独自处理...
  • Oracle 分区表

    2013-09-06 20:24:17
    1. 分区表  分区表在逻辑上是一张完整的,与普通完全一样;  分区表在物理上将数据存储在多个空间中(每个空间可包含多个数据文件);   2. 分区表的优点  提高查询速度:可以只查询指定的分区,不用全...
  • -- Create table create table testTable ( tjsj DATE not null )tablespace tablespace1 PARTITION BY RANGE(TJSJ) INTERVAL (NUMTODSINTERVAL(1,'DAY')) store in ( tablespace2) ( PARTIT...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,968
精华内容 17,587
关键字:

oracle给表增加列表分区