问题描述
嗨,
我想从表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) 如果是,如何实现相同?
谢谢你的好意指导。
钱丹
我想从表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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




