2017-10-15 208 views
0

是否可以在Oracle中对现有表进行分区而不创建辅助表?Oracle 12c - 如何对现有表进行分区?

或者建议先用所有分区创建第二个表,然后复制第一个表中的所有内容?

我有表 'T1':

CREATE TABLE t1 (
    id INT NOT NULL, 
    accountnumber VARCHAR NOT NULL, 
    yr_qtr INT NOT NULL 
) 

yr_qtr有15倍不同的值。

我想根据yr_qtr这是int分区表't1'(或用yr_qtr分区创建't2')。

+0

你能试试这个: 'ALTER TABLE T1 MODIFY PARTITION BY RANGE(yr_qtr)间隔(1) (PARTITION P1值高于(2)/ *添加量少根据要求(如你所说的15)*/ )ONLINE;' – L30n1d45

+0

也yr_qtr号码会不断增长。所以可能需要某种'自动'分区。目前,这些值是2014年,2014年,2014年,2014年,2014年,2014年,2015年,2015年,2015年,2015年,2016年,2016年,2016年,2016年,2016年,2016年,2017年,2017年,2017年,20173年的预期:20174,20181,20182 ... – Joe

+0

已包含* INTERVAL PARTITION *。如果有的话,也要照顾索引。 – L30n1d45

回答

0
drop table t1; 


CREATE TABLE t1 (
    id INT NOT NULL, 
    accountnumber VARCHAR2(2) NOT NULL, 
    yr_qtr INT NOT NULL 
); 

insert all 
into t1 values(1,'AB',20141) 
into t1 values(2,'CD',20142) 
into t1 values(3,'EF',20143) 
into t1 values(4,'GH',20144) 
into t1 values(5,'IJ',20145) 
select * from dual; 

select * from user_tab_partitions where table_name = 'T1'; 

select * from t1; 

--Creating Partition online 
ALTER TABLE t1 
MODIFY PARTITION BY RANGE (yr_qtr) 
INTERVAL (1) (PARTITION P1 VALUES LESS THAN (20141)) ONLINE; 

select * from t1; 

select * from user_tab_partitions where table_name = 'T1'; 

输出:

Table dropped. 
Table created. 
5 row(s) inserted. 
no data found 
Result Set 5 

ID ACCOUNTNUMBER YR_QTR 
1 AB 20141 
2 CD 20142 
3 EF 20143 
4 GH 20144 
5 IJ 20145 

Download CSV 
5 rows selected. 
Table altered. 
Result Set 6 

ID ACCOUNTNUMBER YR_QTR 
1 AB 20141 
2 CD 20142 
3 EF 20143 
4 GH 20144 
5 IJ 20145 

Download CSV 
5 rows selected. 
Result Set 7 

TABLE_NAME COMPOSITE PARTITION_NAME SUBPARTITION_COUNT HIGH_VALUE HIGH_VALUE_LENGTH PARTITION_POSITION TABLESPACE_NAME PCT_FREE PCT_USED INI_TRANS MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENT MAX_EXTENT MAX_SIZE PCT_INCREASE FREELISTS FREELIST_GROUPS LOGGING COMPRESSION COMPRESS_FOR NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN SAMPLE_SIZE LAST_ANALYZED BUFFER_POOL FLASH_CACHE CELL_FLASH_CACHE GLOBAL_STATS USER_STATS IS_NESTED PARENT_TABLE_PARTITION INTERVAL SEGMENT_CREATED INDEXING READ_ONLY INMEMORY INMEMORY_PRIORITY INMEMORY_DISTRIBUTE INMEMORY_COMPRESSION INMEMORY_DUPLICATE CELLMEMORY INMEMORY_SERVICE INMEMORY_SERVICE_NAME 
T1 NO P1 0 20141 5 1 LIVESQL_USERS 10 - 1 255 65536 1048576 1 2147483645 2147483645 - - - YES DISABLED  - - - - - - - - - DEFAULT DEFAULT DEFAULT NO NO NO - NO YES ON NO DISABLED  - - - - - - - 
T1 NO SYS_P29017 0 20142 5 2 LIVESQL_USERS 10 - 1 255 65536 1048576 1 2147483645 2147483645 - - - YES DISABLED  - - - - - - - - - DEFAULT DEFAULT DEFAULT NO NO NO - YES YES ON NO DISABLED  - - - - - - - 
T1 NO SYS_P29018 0 20143 5 3 LIVESQL_USERS 10 - 1 255 65536 1048576 1 2147483645 2147483645 - - - YES DISABLED  - - - - - - - - - DEFAULT DEFAULT DEFAULT NO NO NO - YES YES ON NO DISABLED  - - - - - - - 
T1 NO SYS_P29019 0 20144 5 4 LIVESQL_USERS 10 - 1 255 65536 1048576 1 2147483645 2147483645 - - - YES DISABLED  - - - - - - - - - DEFAULT DEFAULT DEFAULT NO NO NO - YES YES ON NO DISABLED  - - - - - - - 
T1 NO SYS_P29020 0 20145 5 5 LIVESQL_USERS 10 - 1 255 65536 1048576 1 2147483645 2147483645 - - - YES DISABLED  - - - - - - - - - DEFAULT DEFAULT DEFAULT NO NO NO - YES YES ON NO DISABLED  - - - - - - - 
T1 NO SYS_P29021 0 20146 5 6 LIVESQL_USERS 10 - 1 255 65536 1048576 1 2147483645 2147483645 - - - YES DISABLED  - - - - - - - - - DEFAULT DEFAULT DEFAULT NO NO NO - YES YES ON NO DISABLED  - - - - - - - 

Download CSV 
6 rows selected. 
+0

所有的命令,我一直工作到:'--Creating分区在线 ALTER TABLE T1 修改分区BY RANGE(yr_qtr) 间隔(1)(分区P1值小于(20141))在线;' 不知道为什么..我正在使用Oracle数据库12c企业版版本12.1.0.2.0-64位 – Joe

+0

您可以尝试使用分区名称作为random9801的P1? :P – L30n1d45

+0

'Oracle数据库12c的企业版发行12.2.0.1.0 - 64位生产 PL/SQL发布12.2.0.1.0 - 生产 CORE \t 12.2.0.1.0 \t生产 TNS针对Linux :版本12.2.0.1.0 - 生产 NLSRTL版12.2.0.1.0 - 生产\t – L30n1d45

相关问题