精华内容
下载资源
问答
  • 达梦数据库分区表的使用

    千次阅读 2020-02-17 22:52:55
    前言 在大型的企业应用或企业级的数据库应用,要处理的数据量通常达到TB级,对于这样的大型表执行全表扫描或者DML操作时,效率是非常低的。 为了提高数据库在大数据量读写操作和...达梦数据库分区表主要包括范围...

    前言

    在大型的企业应用或企业级的数据库应用中,要处理的数据量通常达到TB级,对于这样的大型表执行全表扫描或者DML操作时,效率是非常低的。
    为了提高数据库在大数据量读写操作和查询时的效率,达梦数据库提供了对表和索引进行分区的技术,把表和索引等数据库对象中的数据分割成小的单位,分别存放在一个个单独的段中,用户对表的访问转化为对较小段的访问,以改善大型应用系统的性能。

    达梦数据库分区表主要包括范围分区、哈希分区和列表分区三种方式, 企业可以使用合适的分区方法,如日期(范围)、区域(列表),对大量数据进行分区。由于达梦数据库划分的分区是相互独立且可以存储于不同的存储介质上的,完全可满足企业高可用性、 均衡IO、降低维护成本、提高查询性能的要求。今天我们主要讨论水平分区

    一 创建分区表

    1.创建范围分区表

    create table r_t1 (pid int primary key ,id int)
    partition by range (pid)
    (partition p1 values less than (101),
    partition p2 values less than (201));
    

    在这里插入图片描述

    将1-200的值录入到t_r1中。

    begin
    for i in 1..200 loop
    insert into r_t1 values (i,i+1);
    end loop;
    end;
    

    在这里插入图片描述
    查看表r_t1的类型,显示为分区表。

    select table_name,PARTITIONED from dba_tables where table_name='R_T1';
    

    在这里插入图片描述
    查看分区表的分区,显示为二个分区p1和p2。

    select table_name,partition_name from dba_tab_partitions where table_name='R_T1';
    

    在这里插入图片描述
    查询分区表中的记录数。

    SQL> select count(*) from r_t1 partition (p1);
    

    在这里插入图片描述
    这样一个范围分区就建立好了。

    2.创建列表分区

    create table l_t1 (id int,name varchar(20))
    partition by list (name)
    (partition p1 values  ('湖北'),
    partition p2 values  ('湖南'),
    partition p3 values  ('安徽'));
    

    在这里插入图片描述
    查看分区表的分区,显示为三个分区p1,p2,p3

    SQL>select table_name,partition_name from dba_tab_partitions where table_name='L_T1';
    

    在这里插入图片描述

    3.创建哈希分区

    SQL>CREATE TABLE sales01(sales_id INT, saleman CHAR(20),
    saledate DATETIME, city  CHAR(10))
    PARTITION BY HASH(city)
    (PARTITION p1,
    PARTITION p2,
    PARTITION p3,
    PARTITION p4 );
    

    在这里插入图片描述
    如果不需指定分区表名,可以通过指定哈希分区个数来建立哈希分区表。

    SQL>CREATE TABLE sales02(sales_id int, saleman char(20),
    saledate DATETIME, city  CHAR(10)) PARTITION BYHASH(city)
    PARTITIONS 4;
    

    在这里插入图片描述
    PARTITIONS后的数字表示哈希分区的分区数,STORE IN 子句中指定了哈希分区依 次使用的表空间。使用这种方式建立的哈希分区表分区名是匿名的,DM7 统一使用 DMHASHPART+分区号(从 0 开始)作为分区名。例如,需要查询 sales02第一个分区的数据,可执行以下语句:

    SQL>SELECT* FROM sales02 PARTITION (DMHASHPART1);
    

    在这里插入图片描述

    二 增加分区

    SQL> alter table r_t1 add partition p3 values less than(301);
    

    在这里插入图片描述
    查看分区数,可以看到新增了一个分区p3
    在这里插入图片描述

    三 删除分区

    SQL> alter table r_t1 drop partition p3;
    

    在这里插入图片描述
    可以看到,新增的分区P3被删除了。

    四 合并分区

    Sql> alter table r_t1 merge partitions p1,p2 into partition p1_2;
    

    在这里插入图片描述

    五 拆分分区

    SQL> alter table r_t1 split partition p1_2 at (100) into (partition p1,partition p2);
    

    在这里插入图片描述

    六 水平分区表的限制

    1. 分区列类型必须是数值型、字符型或日期型,不支持BLOB、CLOB、IMAGE、TEXT、 LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、时间间隔类型和用户自定义类型为分区列。
    2. 范围分区和哈希分区的分区键可以多个,最多不超过16列;LIST分区的分区键 必须唯一。
    3. 水平分区表指定主键和唯一约束时,分区键必须都包含在主键和唯一约束中。
    4. 水平分区表不支持临时表。
    5. 不能在水平分区表上建立自引用约束。
    6. 普通环境中,水平分区表的各级分区数的总和上限是 65535;MPP 环境下,水平 分区表的各级分区总数上限取决于INI参数MAX_EP_SITES,上限为2 ^( 16 - log2MAX_EP_SITES)。比如:当MAX_EP_SITES为默认值64时,分区总数上 限为1024。
    7. 不允许对分区子表执行任何DDL操作。
    8. 哈希分区支持重命名、删除约束、设置触发器是否启用的修改操作。
    9. 范围分区支持分区合并、拆分、增加、删除、交换、重命名、删除约束、设置触发 器是否生效操作。
    10. LIST分区支持分区增加、删除、交换、重命名、删除约束、设置触发器是否生效操作。
    11. LIST分区范围值不能为NULL。
    展开全文
  • 着重记录下达梦数据库分区表的用法和注意事项,避免以后踏坑。 一 、 达梦的分区表主要有一下几种方式:范围分区、哈希分区、列表分区、组合分区 1. 范围(range)水平分区:对表的某些列上值的范围进行分区,根据...

    在接受为期5天的达梦数据库DCP培训后,对达梦数据库这个国产品牌又有了一个进一步的认识,达梦数据库在国产数据库领域无论是从工作原理还是使用方法上都是最像Oracle数据库的;着重记录下达梦数据库分区表的用法和注意事项,避免以后踏坑。

    一 、 达梦的分区表主要有一下几种方式: 范围分区、哈希分区、列表分区、组合分区


    1. 范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范 围,决定将该数据存储在哪个分区上;

    2. 哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在 I/O 设备上进行散列分区,使得这些分区大小基本一致;

    3. 列表(list)水平分区:通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。例如,可以对表上的 status 列的值在('A','H','O')放在一个 分区,值在('B','I','P')放在另一个分区,以此类推;

    4. 多级分区表:按上述三种分区方区进行任意组合,将表进行多次分区,称为多级分区表。


    分区表使用注意事项:

    • 分区表建议取消主键,建唯一性本地索引防止数据重复【参考百度】
    • 如果表中一定要主键,则分区范围一定要包含主键列

    a. 分区表将子表分别存放在不同的表空间中,如果分区表有主键,并且主键并未包含在分区范围,则会出现以下情况:

    SQL> create table  test1(id int primary key, c1 int) partition by range (c1)
    (partition p1 values less than (10) tablespace tbs1,
    partition p2 values less than (20) tablespace tbs2,
    partition p3 values less than (30) tablespace tbs3);
    
    
    报错:[-2683]:局部唯一索引必须包含全部分区列

    解决方法:  取消主键,建立本地唯一索引或者直接不设置主键, 如下:

    SQL> create table  test1(id int, c2 int) partition by range (id)
    (partition p1 values less than (10) tablespace tbs1,
    partition p2 values less than (20) tablespace tbs2,
    partition p3 values less than (30) tablespace tbs3);
    警告: 范围分区未包含MAXVALUE,可能无法定位到分区
    操作已执行
    已用时间: 12.357(毫秒). 执行号:204.
    SQL> create unique index uniq_idx_d on test1(id);
    操作已执行
    已用时间: 27.889(毫秒). 执行号:205.

    二、 范围分区表可管理性强,更加灵活;可对分区表进行新增、删除、合并、拆分等操作,但是在拆分分区表的操作中,将拆分的分区表分别放在不同的表空间的功能,还在调试中(留个记录,以便追溯)

    增加一个新的分区:

    SQL> alter table test1 add partition p4 VALUES LESS THAN (maxvalue) STORAGE (on tbs4);
    操作已执行
    已用时间: 24.892(毫秒). 执行号:206.

    删除一个子分区:

    SQL> alter table test1 drop partition p4;
    操作已执行
    已用时间: 20.790(毫秒). 执行号:208.

    分区表合并:

    SQL> alter table test1 merge partitions p1,p2 into partition p_1_2;
    操作已执行
    已用时间: 36.115(毫秒). 执行号:209.
    
    SQL> select table_name , high_value, tablespace_name,partition_name from dba_tab_partitions where  table_name='TEST1';
    
    行号     TABLE_NAME HIGH_VALUE TABLESPACE_NAME PARTITION_NAME
    ---------- ---------- ---------- --------------- --------------
    1          TEST1      MAXVALUE   TBS4            P4
    2          TEST1      20         TBS2            P_1_2
    3          TEST1      30         TBS3            P3

    分区表拆分

    SQL> alter table test1 split partition p_1_2 at (5) into (partition p1 storage(on tbs1),partition p2 storage(on tbs2));
    操作已执行
    已用时间: 48.409(毫秒). 执行号:213.
    SQL> select table_name , high_value, tablespace_name,partition_name from dba_tab_partitions where  table_name='TEST1';
    
    行号     TABLE_NAME HIGH_VALUE TABLESPACE_NAME PARTITION_NAME
    ---------- ---------- ---------- --------------- --------------
    1          TEST1      20         TBS2            P2
    2          TEST1      30         TBS3            P3
    3          TEST1      MAXVALUE   TBS4            P4
    4          TEST1      5          TBS2            P1
    
    已用时间: 15.094(毫秒). 执行号:214.

    三、哈希分区(HASH) : 把数据平均分配到各个子分区,不支持增加,删除,合并,拆分,交换。 

            特点:Hash存数据性能比较好,读取数据性能不高。

    SQL> create table h_test1 (c1 int,c2 int) partition by hash(c1) partitions 8;
    操作已执行
    已用时间: 105.022(毫秒). 执行号:215.
    SQL> select table_name , high_value, tablespace_name,partition_name from dba_tab_partitions where  table_name='H_TEST1';
    
    行号     TABLE_NAME HIGH_VALUE TABLESPACE_NAME PARTITION_NAME
    ---------- ---------- ---------- --------------- --------------
    1          H_TEST1    NULL       MAIN            DMHASHPART7
    2          H_TEST1    NULL       MAIN            DMHASHPART0
    3          H_TEST1    NULL       MAIN            DMHASHPART1
    4          H_TEST1    NULL       MAIN            DMHASHPART2
    5          H_TEST1    NULL       MAIN            DMHASHPART3
    6          H_TEST1    NULL       MAIN            DMHASHPART4
    7          H_TEST1    NULL       MAIN            DMHASHPART5
    8          H_TEST1    NULL       MAIN            DMHASHPART6
    
    8 rows got
    
    已用时间: 19.698(毫秒). 执行号:216.

    四、间隔分区

    SQL> CREATE TABLE  t1_year
    (
      employee_id         NUMBER,
      employee_name       VARCHAR(20),
      birthday            DATE
    )
    PARTITION BY RANGE(birthday)
    INTERVAL (NUMTOYMINTERVAL(1,'year'))
    (
      PARTITION p1 VALUES LESS THAN('2015-01-01'),
      PARTITION p2 VALUES LESS THAN('2016-01-01')
    );
    操作已执行
    已用时间: 18.152(毫秒). 执行号:218.
    
    SQL> select table_name , high_value, tablespace_name,partition_name from dba_tab_partitions where  table_name='T1_YEAR';
    
    行号     TABLE_NAME HIGH_VALUE       TABLESPACE_NAME PARTITION_NAME
    ---------- ---------- ---------------- --------------- --------------
    1          T1_YEAR    DATE'2016-01-01' MAIN            P2
    2          T1_YEAR    DATE'2015-01-01' MAIN            P1
    
    SQL> insert into t1_year values(122,'dddaaaaa','2017-01-03');
    影响行数 1
    
    已用时间: 16.894(毫秒). 执行号:220.
    SQL> commit;
    操作已执行
    
    SQL> select table_name , high_value, tablespace_name,partition_name from dba_tab_partitions where  table_name='T1_YEAR';
    
    行号     TABLE_NAME HIGH_VALUE       TABLESPACE_NAME PARTITION_NAME
    ---------- ---------- ---------------- --------------- --------------
    1          T1_YEAR    DATE'2018-01-01' MAIN            SYS_P1455_1458
    2          T1_YEAR    DATE'2015-01-01' MAIN            P1
    3          T1_YEAR    DATE'2016-01-01' MAIN            P2
    
    已用时间: 18.326(毫秒). 执行号:223.

    五、 总体上,达梦数据库在分区表上功能上、使用习惯上跟Oracle都很相似。基本能满足大部分的应用场景,而且如果从Oracle技术转过来使用达梦数据库的门槛还是很低的,正如官方宣传的那样。

     

    后续再从其他方面就行总结!

     

     

    展开全文
  • 分区表中的数据被存储到多个文件上,减少了I/O负载;对分区对象的查询可以仅搜索自己关心的分区,提高检索速度;如果表的某个分区出现故障,需要修复数据,只修复该分区即可,方便备份和恢复。 DM 提供了水平分区...

    一、创建分区表

    分区表中的数据被存储到多个文件上,减少了I/O负载;对分区对象的查询可以仅搜索自己关心的分区,提高检索速度;如果表的某个分区出现故障,需要修复数据,只修复该分区即可,方便备份和恢复。
    DM 提供了水平分区方式,包括范围、哈希和列表三种方式,用户可以使用合适的分区方法,如日期(范围)、区域(列表),对大量数据进行分区,还可以根据应用需求创建多级分区表。

    创建范围分区表
    范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。

    create table stu_range  
    (  
    sno varchar(10) ,
    sname varchar(20),
    score int
    )
    partition by range(score) (
    partition part1 values less than(60),
    partition part2 values less than(80),
    partition part3 values equ or less than(maxvalue) 
    );
    

    向表中插入测试数据:

    insert into stu_range values('001', '张三', 53);
    insert into stu_range values('002', '李四',57);
    insert into stu_range values('003', '李二',79);
    insert into stu_range values('004', '王五',92);
    

    查询数据:
    在这里插入图片描述
    2. 创建LIST分区表
    如果某个列上的数据无法通过划分范围的方法进行分区,并且该列上的数据是相对固定的一些值,可以考虑使用 LIST 分区。

    CREATE TABLE sales_list(
    sales_id  INT,
    saleman CHAR(20),
    saledate DATETIME,
    city CHAR(10)
    )
    PARTITION BY LIST(city)(
    PARTITION p1 VALUES ('西安', '宝鸡'),
    PARTITION p2 VALUES ('郑州', '洛阳', '三门峡'),
    PARTITION p3 VALUES ('石家庄', '邯郸'),
    PARTITION p4 VALUES ('太原', '大同')
    );
    

    向表中插入测试数据:

    insert into sales_list values(1, '王五', '2020-07-19', '太原');
    insert into sales_list values(2, '张三', '2020-07-20', '西安');
    insert into sales_list values(3, '李二', '2020-07-21', '太原');
    insert into sales_list values(4, '张三', '2020-08-03', '石家庄');
    insert into sales_list values(5, '王五', '2020-09-05', '宝鸡');
    insert into sales_list values(6, '李四', '2020-09-11', '洛阳');
    

    查询数据:
    在这里插入图片描述
    3.创建哈希分区表
    哈希分区提供了一种在指定数量的分区中均等地划分数据的方法,基于分区键的散列值将行映射到分区中。

    CREATE TABLE sales_hash(
    sales_id INT,
    saleman CHAR(20),
    saledate DATE,
    city CHAR(10)
    )
    PARTITION BY HASH(city)(
    PARTITION p1,
    PARTITION p2,
    PARTITION p3,
    PARTITION p4
    );
    

    向表中插入测试数据:

    insert into sales_ hash values(1, '王五', '2020-07-19', '太原');
    insert into sales_ hash values(2, '张三', '2020-07-20', '西安');
    insert into sales_ hash values(3, '李二', '2020-07-21', '太原');
    insert into sales_ hash values(4, '张三', '2020-08-03', '石家庄');
    insert into sales_ hash values(5, '王五', '2020-09-05', '宝鸡');
    insert into sales_ hash values(6, '李四', '2020-09-11', '洛阳');
    

    查询数据:
    在这里插入图片描述
    4.创建多级分区表
    很多情况下,经过一次分区并不能精确地对数据进分类,这时需要多级分区表。

    CREATE TABLE SALES_MUL(
    SALES_ID INT,
    SALEMAN CHAR(20),
    SALEDATE DATETIME,
    CITY CHAR(10)
    )
    PARTITION BY LIST(CITY)
    SUBPARTITION BY RANGE(SALEDATE) SUBPARTITION TEMPLATE(
    SUBPARTITION P11 VALUES LESS THAN ('2020-07-01'),
    SUBPARTITION P12 VALUES LESS THAN ('2020-08-01'),
    SUBPARTITION P13 VALUES LESS THAN ('2020-09-01'),
    SUBPARTITION P14 VALUES EQU OR LESS THAN (MAXVALUE))
    (
    PARTITION P1 VALUES ('北京', '天津')
    (
    SUBPARTITION P11_1 VALUES LESS THAN ('2012-10-01'),
    SUBPARTITION P11_2 VALUES EQU OR LESS THAN (MAXVALUE)
    ),
    PARTITION P2 VALUES ('上海', '南京', '杭州'),
    PARTITION P3 VALUES (DEFAULT)
    );
    

    向表中插入测试数据:

    insert into sales_mul values(1, '王五', '2020-07-19', '太原');
    insert into sales_ mul values(2, '张三', '2020-07-20', '北京');
    insert into sales_ mul values(3, '李二', '2020-07-21', '天津');
    insert into sales_ mul values(4, '张三', '2020-08-03', '上海');
    insert into sales_ mul values(5, '王五', '2020-09-05', '宝鸡');
    insert into sales_ mul values(6, '李四', '2020-09-11', '洛阳');
    

    查询数据:

    在这里插入图片描述

    二、管理分区表

    1.增加分区
    只能对范围分区和 LIST 分区增加分区,不能对哈希分区增加分区。并且增加分区不会影响分区索引,因为分区索引只是局部索引,新增分区仅是新增分区子表,并更新分区主表的分区信息,其他分区并不发生改变。

    ALTER TABLE sales_list ADD PARTITION p5 VALUES ('长沙');
    

    增加分区后,查询该表的所有分区:

    在这里插入图片描述

    2.删除分区
    只能对范围分区和 LIST 分区进行删除分区,哈希分区不支持删除分区。跟增加分区一样,删除分区不会影响分区索引,因为分区索引只是局部索引,删除分区仅是删除分区子表,并更新分区主表的分区信息,其他分区并不发生改变。

    ALTER TABLE sales_list DROP PARTITION p1;
    

    删除分区后,查询该表的所有分区:
    在这里插入图片描述
    3.交换分区
    仅范围分区和 LIST 分区支持交换分区,哈希分区表不支持。并且分区交换要求分区表跟交换表具有相同的结构(相同的表类型、相同的 BRANCH 选项、相同的列结构、相同的索引、相同的分布方式),分区交换但并不会校验数据,如交换表的数据是否符合分区范围等,即不能保证分区交换后的分区上的数据符合分区范围。

    CREATE TABLE sales_p1(
    sales_id  INT,
    saleman CHAR(20),
    saledate DATETIME,
    city CHAR(10)
    );
    ALTER TABLE sales_list EXCHANGE PARTITION p1 WITH TABLE sales_p1;
    

    分区交换后,数交换至结构相同的新建表中:
    在这里插入图片描述
    4.合并分区
    仅范围分区表支持合并分区,并且合并的分区必须是范围相邻的两分区。另外,合并的分区会导致数据的重组和分区索引的重建,因此,合并分区可能会比较耗时,所需时间取决于分区数据量的大小。

    ALTER TABLE stu_range MERGE PARTITIONS part2, part3 into partition p3_4;
    

    合并分区后,查询该表的所有分区:

    在这里插入图片描述

    5.拆分分区
    当一个分区变得太大以至于要用很长时间才能完成备份、恢复或维护操作时,就应考虑做分割分区。

    ALTER TABLE stu_range SPLIT PARTITION p3_4 AT (60) INTO (PARTITION p3, PARTITION p4); 
    

    拆分分区后,查询该表的所有分区:
    在这里插入图片描述
    拆分分区会导致数据的重组和分区索引的重建,因此,拆分分区可能会比较耗时,所需时间取决于分区数据量的大小。

    展开全文
  • 1.1 分区表PARTITION table在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。1.1.1 分区表的建立:某公司的每年产生巨大的销售记录,DBA向公司建议每季度的数据放在一个分区内,以下示范的...
     
    
    

    1.1 分区表PARTITION table

    ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。

    1.1.1 分区表的建立:

    某公司的每年产生巨大的销售记录,DBA向公司建议每季度的数据放在一个分区内,以下示范的是该公司1999年的数据(假设每月产生30M的数据),操作如下:

    范围分区表:

    CREATE TABLE sales

    (invoice_no NUMBER,

    ...

    sale_date DATE NOT NULL )

    PARTITION BY RANGE (sale_date)

    (PARTITION sales1999_q1

    VALUES LESS THAN (TO_DATE(‘1999-04-01’,YYYY-MM-DD)

    TABLESPACE ts_sale1999q1,

    PARTITION sales1999_q2

    VALUES LESS THAN (TO_DATE(‘1999-07-01’,YYYY-MM-DD)

    TABLESPACE ts_sale1999q2,

    PARTITION sales1999_q3

    VALUES LESS THAN (TO_DATE(‘1999-10-01’,YYYY-MM-DD)

    TABLESPACE ts_sale1999q3,

    PARTITION sales1999_q4

    VALUES LESS THAN (TO_DATE(‘2000-01-01’,YYYY-MM-DD)

    TABLESPACE ts_sale1999q4 );

    --values less than (maxvalue)

    列表分区表:

    create table emp (

    empno number(4),

    ename varchar2(30),

    location varchar2(30))

    partition by list (location)

    (partition p1 values ('北京'),

    partition p2 values ('上海','天津','重庆'),

    partition p3 values ('广东','福建')

    partition p0 values (default)

    );

    哈希分区:

    create table emp (

    empno number(4),

    ename varchar2(30),

    sal number)

    partition by hash (empno)

    partitions 8

    store in (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);

    组合分区:

    范围哈希组合分区:

    create table emp (

    empno number(4),

    ename varchar2(30),

    hiredate date)

    partition by range (hiredate)

    subpartition by hash (empno)

    subpartitions 2

    (partition e1 values less than (to_date('20020501','YYYYMMDD')),

    partition e2 values less than (to_date('20021001','YYYYMMDD')),

    partition e3 values less than (maxvalue));

    范围列表组合分区:

    CREATE TABLE customers_part (

    customer_id NUMBER(6),

    cust_first_name VARCHAR2(20),

    cust_last_name VARCHAR2(20),

    nls_territory VARCHAR2(30),

    credit_limit NUMBER(9,2))

    PARTITION BY RANGE (credit_limit)

    SUBPARTITION BY LIST (nls_territory)

    SUBPARTITION TEMPLATE

    (SUBPARTITION east VALUES ('CHINA', 'JAPAN', 'INDIA', 'THAILAND'),

    SUBPARTITION west VALUES ('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'),

    SUBPARTITION other VALUES (DEFAULT))

    (PARTITION p1 VALUES LESS THAN (1000),

    PARTITION p2 VALUES LESS THAN (2500),

    PARTITION p3 VALUES LESS THAN (MAXVALUE));

    create table t1 (id1 number,id2 number)

    partition by range (id1) subpartition by list (id2)

    (partition p11 values less than (11)

    (subpartition subp1 values (1))

    );

    索引分区:

    CREATE INDEX month_ix ON sales(sales_month)
    GLOBAL PARTITION BY RANGE(sales_month)
    (PARTITION pm1_ix VALUES LESS THAN (2)
    PARTITION pm12_ix VALUES LESS THAN (MAXVALUE));

    1.1.2 分区表的维护:

    增加分区:

    ALTER TABLE sales ADD PARTITION sales2000_q1

    VALUES LESS THAN (TO_DATE(‘2000-04-01’,YYYY-MM-DD)

    TABLESPACE ts_sale2000q1;

    如果已有maxvalue分区,不能增加分区,可以采取分裂分区的办法增加分区!

    删除分区:

    ALTER TABLE sales DROP PARTION sales1999_q1;

    截短分区:

    alter table sales truncate partiton sales1999_q2;

    合并分区:

    alter table sales merge partitons sales1999_q2, sales1999_q3 into sales1999_q23;

    alter index ind_t2 rebuild partition p123 parallel 2;

    分裂分区:

    ALTER TABLE sales

    SPLIT PARTITON sales1999_q4

    AT TO_DATE (‘1999-11-01’,YYYY-MM-DD)

    INTO (partition sales1999_q4_p1, partition sales1999_q4_p2) ;

    alter table t2 split partition p123 values (1,2) into (partition p12,partition p3);

    交换分区:

    alter table x exchange partition p0 with table bsvcbusrundatald ;

    访问指定分区:

    select * from sales partition(sales1999_q2)

    EXPORT指定分区:

    exp sales/sales_password tables=sales:sales1999_q1

    file=sales1999_q1.dmp

    IMPORT指定分区:

    imp sales/sales_password FILE =sales1999_q1.dmp

    TABLES = (sales:sales1999_q1) IGNORE=y

    查看分区信息

    user_tab_partitions, user_segments

    注:若分区表跨不同表空间,做导出、导入时目标数据库必须预建这些表空间。分表区各区所在表空间在做导入时目标数据库一定要预建这些表空间!这些表空间不一定是用户的默认表空间,只要存在即可。如果有一个不存在,就会报错!

    默认时,对分区表的许多表维护操作会使全局索引不可用,标记成UNUSABLE。 那么就必须重建整个全局索引或其全部分区。如果已被分区,Oracle 允许在用于维护操作的ALTER TABLE 语句中指定UPDATE GLOBAL INDEXES 来重载这个默认特性,指定这个子句也就告诉Oracle 当它执行维护操作的DDL 语句时更新全局索引,这提供了如下好处:
    1.在操作基础表的同时更新全局索引这就不需要后来单独地重建全局索引;
    2.因为没有被标记成UNUSABLE, 所以全局索引的可用性更高了,甚至正在执行分区的DDL 语句时仍然可用索引来访问表中的其他分区,避免了查询所有失效的全局索引的名字以便重建它们;
    另外在指定UPDATE GLOBAL INDEXES 之前还要考虑如下性能因素:
    1.因为要更新事先被标记成UNUSABLE 的索引,所以分区的DDL 语句要执行更长时间,当然这要与先不更新索引而执行DDL 然后再重建索引所花的时间做个比较,一个适用的规则是如果分区的大小小于表的大小的5% ,则更新索引更快一点;
    2.DROP TRUNCATE 和EXCHANGE 操作也不那么快了,同样这必须与先执行DDL 然后再重建所有全局索引所花的时间做个比较;
    3.要登记对索引的更新并产生重做记录和撤消记录,重建整个索引时可选择NOLOGGING;
    4.重建整个索引产生一个更有效的索引,因为这更利于使用空间,再者重建索引时允许修改存储选项。
    注意分区索引结构表不支持UPDATE GLOBAL INDEXES 子句。

    展开全文
  • 达梦数据库分区表管理 分区表是将大表的数据分成称为分区的许多小的子集,达梦数据库分区表有范围分区、哈希分区、列表分区、间隔分区、组合分区等等多种多样。范围分区:范围分区是对数据表的某个值的范围...
  • mysql数据库表分区

    千次阅读 2018-11-19 13:18:31
     数据库数据越来越大,导致单个表中数据太多。以至于增删改查询速度变慢,而且由于的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。 2、表分区  表分区就是将一个的数据按照一定的规则水平划分...
  • 此文从以下几个方面来整理关于分区表的概念及操作:  1.表空间及分区表的概念  2.表分区的具体作用  3.表分区的优缺点  4.表分区的几种类型及操作方法  5.对表分区的维护性操作. (1.) 表空间及分区表的...
  • oracle数据库表分区

    千次阅读 2012-06-28 20:27:26
    摘要:在大量业务数据处理的项目,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。   在大型的企业应用或企业级的数据库应用,要处理的数据量通常可以达到几十到几百...
  • 达梦数据库分区表实际上是把一张大表,逻辑上拆分成多个小表。分散IO,方便管理 范围分区:分区列一般用数字或日期类型 1、解决分区表超出范围问题 ----创建范围分区表 Create TABLE a_r1(id int,name varchar(20)) ...
  • 1、创建数据库: ...3、创建: create table 表名( id integer, name text, price numeric {精确度较高的小数型,同mysql的decimal} ); 3-1、GP建表指定列级约束 create table 表名( id integer pr...
  • ORACLE数据库表分区

    千次阅读 2013-09-06 17:30:31
    ORACLE数据库表分区 ...1.1 分区表PARTITION table 在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能。 1.1.1 分区表的建立: 某公司的每年产生巨大的销
  • 有个模型:一张非分区表,一个分区表,现在需要不通过insert的方式,将数据添加到分区表中。 http://blog.csdn.net/tianlesoftware/article/details/4717318 ...---------------------
  • 数据库分区及分区优点

    千次阅读 2018-05-29 08:35:11
    此文从以下几个方面来整理关于分区表的概念及操作:   1.表空间及分区表的概念   2.表分区的具体作用   3.表分区的优缺点   4.表分区的几种类型及操作方法   5.对表分区的维护性操作.  (1.) 表空间及分区...
  • 对这种历史数据迁移的操作,较好的办法是该表采用分区表。比如按时间分区后,可以对分区进行迁移。 通过分区交换和表空间传输会很容易完成,而且性能上影响很小。 关于分区表更多内容:...
  • 数据库分区(partition)

    千次阅读 2013-12-03 17:26:22
    数据库分区是一种对表的横向分割,Sqlserver 2005企业版和之后的Sqlserver版本才提供这种技术,这种对表的横向分割不同于2000分割,它对访问用户是透明的,用户并不会感觉的被横向分割了。(2000横向...
  • 分区表作为Oracle三大组件之一,在Oracle数据库中,起着至关重要的作用。
  • 在MySQL,分区是可以交换的,可以将一个分区表中的一个分区和一个普通表的数据互换。 交换分区的实现 1、交换分区的语法 alter table pt exchange partition p with table nt; 解释: 将 分区表pt 的 分区p 和 ...
  • 这些技术看似很高深,其实不难,其核心就是对数据库数据进行划分,将数据放到不同的表、不同数据库中。具体如何划分则需要根据实际业务操作。 讲一讲分区表 分区表是由多个相关的底层表实现,这些底层表也是由句柄...
  • Oracle 分区表

    2013-09-06 20:24:17
    1. 分区表  分区表在逻辑上是一张完整的表,与普通表完全一样;... 提高可用性 :如果表的某个分区出现问题,其他分区中的数据仍然可用;  均衡I/O : 可以把不同的分区映射到不同的磁盘,平衡整体性
  • 数据库分区(分片) DB partition

    千次阅读 2009-04-09 15:49:00
    数据库分区是一种对表的横向分割,Sql server 2005企业版和之后的Sql server版本才提供这种技术,这种对表的横向分割不同于2000分割,它对访问用户是透明的,用户并不会感觉的被横向分割了。(2000...
  • GreenPlum分区表原理

    千次阅读 2018-10-27 19:47:59
    在PostgreSQL,通过一个父表,多个子表来实现分区表。插入数据时,需要手动向子表插入数据,如果向父表插入数据,则直接会被插入到父表。在GPDB,直接向父表插入数据,便可以根据约束直接自动插入到对应的子表...
  • ORACLE分区表、分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那几个内部,然后在...
  • 数据库表设计 数据库表结构设计方法及原则(li)  数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则...如果数据库表中的所有字段值都是不可分解的原子值,就说明该数...
  • ORACLE 分区表简介

    2014-10-15 11:10:37
    ORACLE-分区表 此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作....
  • 通过分区交换实现oracle分区表数据的快速迁移
  • Oracle分区表及分区索引的创建

    万次阅读 多人点赞 2018-07-08 11:21:22
    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:• Range(范围)分区• Hash(哈希)分区• List(列表)分区• 以及组合分区:Range-Hash,Range-List。 对于表而...
  • 将普通转换成分区有4种方法:  1. Export/import method  2. Insert with a subquery method  3. Partition exchange method  4. DBMS_REDEFINITION 具体参考:  How to Partition a Non-partit
  • 关于PosrgreSQL分区表的应用实例~
  • Greenplum分区表

    千次阅读 2020-01-20 14:42:51
    Greenplum中分区表其目的也是用来避免扫描大表的全部内容,而分区表能够提升查询性能。分区是不会更改数据在segments之间的物理分布,而是对大表进行逻辑上的划分。 目前Greenplum只支持range分区和list分区,以及两...
  • 这种方法只是对数据字典分区和表的定义进行了修改,没有数据的修改或复制,...适用于包含大数据量的表转到分区表中的一个分区的操作。尽量在闲时进行操作。 交换分区的操作步骤如下: 1. 创建分区表,假设有2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,237
精华内容 12,094
关键字:

数据库分区表中的交换分区