暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将range-hash分区交换到另一个range-hash分区表。

askTom 2017-03-23
367

问题描述

嗨,

我想从表A到表B进行分区交换。

以下是一个测试用例,

创建表范围 _ 哈希 _ 测试
(
TRN_DT日期,
Seq _ 无编号,
参考 _ 无变量2(26)
)
按范围划分 (TRN_DT)
按哈希划分的子分区 (REF_NO) 子分区4
(分区Acc_Jan_2017值小于 (TO_DATE('01-feb-2017','dd-MON-yyy');

插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),1,'123');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),2,'12');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),3,'113');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),4,'121');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),5,'124');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),6,'125');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),7,'126');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),8,'127');
插入到RANGE_HASH_TEST值 (TO_DATE('01-01-2017 ','dd-MM-yyy'),9,'128');
提交;


创建表范围 _ 哈希 _ 测试_HIST
(
TRN_DT日期,
Seq _ 无编号,
参考 _ 无变量2(26)
)
按范围划分 (TRN_DT)
按哈希划分的子分区 (REF_NO) 子分区8
(分区Acc_Jan_2017值小于 (TO_DATE('01-feb-2017','dd-MON-yyy');


更改表范围 _ 哈希 _ 测试交换分区ACC_JAN_2017与表范围 _ 哈希 _ 测试 _ hist;

第1行的错误:
ORA-14292: 表的分区类型必须匹配复合分区的分区类型


请指导我以下疑点,
1) 是否可以如上面的测试用例所述将Range-Hash分区移动到另一个分区表?(从一个分区表到另一个分区表)
2) 如果没有,还有其他方法可以这样做吗?
3) 如果是,如何实现相同?


谢谢你的好意指导。
钱丹


专家解答

它们不匹配,因为您试图将具有4个子分区的分区交换为具有8个子分区的分区。我们必须移动所有数据才能做到这一点。

但是,如果表具有相同的子分区结构,则可以分两步进行交换

SQL> create table RANGE_HASH_TEST
  2  (
  3  TRN_DT DATE,
  4  SEQ_NO NUMBER,
  5  REF_NO VARCHAR2(26)
  6  )
  7  PARTITION BY RANGE (TRN_DT)
  8  SUBPARTITION BY HASH (REF_NO) SUBPARTITIONS 4
  9  ( PARTITION Acc_Jan_2017 VALUES LESS THAN (TO_DATE('01-Feb-2017','dd-MON-yyyy')));

Table created.

SQL>
SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),1,'123');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),2,'12');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),3,'113');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),4,'121');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),5,'124');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),6,'125');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),7,'126');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),8,'127');

1 row created.

SQL> INSERT INTO RANGE_HASH_TEST VALUES(TO_DATE('01-01-2017','DD-MM-YYYY'),9,'128');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> create table range_exch
  2  (
  3  TRN_DT DATE,
  4  SEQ_NO NUMBER,
  5  REF_NO VARCHAR2(26)
  6  )
  7  PARTITION BY HASH (REF_NO) PARTITIONS 4;

Table created.

SQL>
SQL> ALTER TABLE RANGE_HASH_TEST EXCHANGE PARTITION ACC_JAN_2017 WITH TABLE range_exch;

Table altered.

SQL>
SQL> create table RANGE_HASH_TEST_HIST
  2  (
  3  TRN_DT DATE,
  4  SEQ_NO NUMBER,
  5  REF_NO VARCHAR2(26)
  6  )
  7  PARTITION BY RANGE (TRN_DT)
  8  SUBPARTITION BY HASH (REF_NO) SUBPARTITIONS 4
  9  ( PARTITION Acc_Jan_2017 VALUES LESS THAN (TO_DATE('01-Feb-2017','dd-MON-yyyy')));

Table created.

SQL> ALTER TABLE RANGE_HASH_TEST_HIST EXCHANGE PARTITION ACC_JAN_2017 WITH TABLE range_exch;

Table altered.

SQL>
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论