问题描述
嗨,
我使用的是Oracle 11g企业版数据库。我有一个既有的表,同时具有范围分区和散列子分区。当前,在首次创建表时,子分区的数量被设置为64 ,在不久的将来,我可能需要将该数量增加到更高的值(可能是128 )。下面是表定义中指定分区信息的部分:
2个问题:
1)是否可能不指定子分区的数量,而让oracle在遇到新的散列值时动态创建子分区?
2)如果#1不可能,我是否可以将值从64增加到128 ,而不删除现有表,因为该表包含数据?如果是,我需要使用什么命令?
先谢了。
致以亲切的问候,
PP
我使用的是Oracle 11g企业版数据库。我有一个既有的表,同时具有范围分区和散列子分区。当前,在首次创建表时,子分区的数量被设置为64 ,在不久的将来,我可能需要将该数量增加到更高的值(可能是128 )。下面是表定义中指定分区信息的部分:
PARTITION BY RANGE (RECORD_INS_DATE)
INTERVAL (Numtodsinterval(1,'day'))
SUBPARTITION BY HASH(BUSINESS_ID, SOURCE_SYSTEM, DESTINATION_SYSTEM)
SUBPARTITIONS 64
(PARTITION P_FIRST_PART VALUES LESS THAN (TO_DATE('16-DEC-2015','DD-MON-YYYY')))
2个问题:
1)是否可能不指定子分区的数量,而让oracle在遇到新的散列值时动态创建子分区?
2)如果#1不可能,我是否可以将值从64增加到128 ,而不删除现有表,因为该表包含数据?如果是,我需要使用什么命令?
先谢了。
致以亲切的问候,
PP
专家解答
1.指定的分区数决定了有多少哈希值。如果您说64个哈希分区,则只能有64个哈希值。Oracle无法遇到第65个值。
所以没有。
2、可以修改子分区模板。所有新的分区都将有这么多的散列子分区。这只影响新分区。现有分区的子分区数量仍然相同:
如果要向现有分区添加更多的子分区,则需要显式添加它们:
所以没有。
2、可以修改子分区模板。所有新的分区都将有这么多的散列子分区。这只影响新分区。现有分区的子分区数量仍然相同:
SQL> create table t (
2 record_ins_date date, business_id int,
3 source_system int, destination_system int
4 ) partition by range ( record_ins_date )
5 interval ( numtodsinterval ( 1,'day' ) )
6 subpartition by hash (
7 business_id, source_system, destination_system
8 ) subpartitions 64 (
9 partition p_first_part values less than (
10 to_date ( '16-DEC-2015','DD-MON-YYYY' )
11 )
12 ) ;
Table created.
SQL>
SQL> select count(*) from user_tab_subpartitions
2 where table_name = 'T';
COUNT(*)
----------
64
SQL>
SQL> alter table t set subpartition template 128;
Table altered.
SQL>
SQL> /* Existing partition unchanged */
SQL> select count(*) from user_tab_subpartitions
2 where table_name = 'T';
COUNT(*)
----------
64
SQL>
SQL> insert into t values (sysdate, 1, 1, 1);
1 row created.
SQL>
SQL> /* 128 subpartitons for new partition (192-64 = 128)*/
SQL> select count(*) from user_tab_subpartitions
2 where table_name = 'T';
COUNT(*)
----------
192
如果要向现有分区添加更多的子分区,则需要显式添加它们:
SQL> alter table t modify partition p_first_part add subpartition p65;
Table altered.
SQL> alter table t modify partition p_first_part add subpartition p66;
Table altered.
SQL>
SQL> select count(*) from user_tab_subpartitions
2 where table_name = 'T';
COUNT(*)
----------
194
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




