交换分区的操作步骤如下:
1. 创建分区表(包含索引、约束等),假设有2个分区,P1,P2.
2. 创建表A存放P1规则的数据。
3. 创建表B 存放P2规则的数据。
4. 用表A 和P1 分区交换。 把表A的数据放到到P1分区
5. 用表B 和p2 分区交换。 把表B的数据存放到P2分区。
通过原表创建新分区表的表结构
-
create table TEST_2016_05_06_PART_2
-
(
-
owner ,
-
table_name ,
-
tablespace_name ,
-
cluster_name ,
-
iot_name ,
-
status ,
-
pct_free ,
-
pct_used ,
-
ini_trans ,
-
max_trans ,
-
initial_extent ,
-
next_extent ,
-
min_extents ,
-
max_extents ,
-
pct_increase ,
-
freelists ,
-
freelist_groups ,
-
logging ,
-
backed_up ,
-
num_rows ,
-
blocks ,
-
empty_blocks ,
-
avg_space ,
-
chain_cnt ,
-
avg_row_len ,
-
avg_space_freelist_blocks ,
-
num_freelist_blocks ,
-
degree ,
-
instances ,
-
cache ,
-
table_lock ,
-
sample_size ,
-
last_analyzed ,
-
partitioned ,
-
iot_type ,
-
temporary ,
-
secondary ,
-
nested ,
-
buffer_pool ,
-
flash_cache ,
-
cell_flash_cache ,
-
row_movement ,
-
global_stats ,
-
user_stats ,
-
duration ,
-
skip_corrupt ,
-
monitoring ,
-
cluster_owner ,
-
dependencies ,
-
compression ,
-
compress_for ,
-
dropped ,
-
read_only ,
-
segment_created ,
-
result_cache
-
) partition by list(tablespace_name)
-
(
-
partition P_SYSAUX values('SYSAUX') tablespace APMDBS,
-
partition P_TBS_CUS_DMP values('TBS_CUS_DMP') tablespace APMDBS,
-
partition P_MSP values('MSP') tablespace APMDBS,
-
partition P_USERS values('USERS') tablespace APMDBS,
-
partition P_SYSTEM values('SYSTEM') tablespace APMDBS,
-
partition P_TBS_CRM_IITF values('TBS_CRM_IITF') tablespace APMDBS,
-
partition P_APMDBS values('APMDBS') tablespace APMDBS,
-
partition P_OTHERS values (default) tablespace APMDBS
-
) as select * from xjmon.TEST_2016_05_06 where rownum = 0;
创建相关索引 约束等到新的分区表上。
创建符合分区规则的数据到用于转换分区的临时表
-
create table xjmon.A1 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'SYSAUX';
-
create table xjmon.A2 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'TBS_CUS_DMP';
-
create table xjmon.A3 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'MSP';
-
create table xjmon.A4 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'USERS';
-
create table xjmon.A5 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'SYSTEM';
-
create table xjmon.A6 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'TBS_CRM_IITF';
-
create table xjmon.A7 as select * from XJMON.TEST_2016_05_06 where tablespace_name = 'APMDBS';
-
create table xjmon.A8 as select * from XJMON.TEST_2016_05_06 where tablespace_name = null;
转换数据到分区表的指定分区中,经查询数据量保持一致
-
SQL> ALTER TABLE XJMON.TEST_2016_05_06_PART_2 EXCHANGE PARTITION P_SYSAUX WITH TABLE XJMON.A1;
-
-
Table altered.
-
-
Elapsed: 00:00:00.50
-
SQL> select count(*) from XJMON.TEST_2016_05_06_PART_2 PARTITION(P_SYSAUX);
-
-
COUNT(*)
-
----------
-
1390
-
SQL> select count(*) from XJMON.TEST_2016_05_06 where tablespace_name= 'SYSAUX';
-
COUNT(*)
-
----------
-
1390
-
Elapsed: 00:00:00.01
注意:
采用转换分区的方式,仍然需要先把原普通表中复合分区规则的数据查询出,并创建到一张临时表。该方式的原理,与CTS中,先创建分区表结构,然后按照查询出复合单个分区数据并插入到指定分区,这种方式原来相似。
但该方式,有转换分区的优点:转换数据时,基本不涉及IO
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28551528/viewspace-2121212/
,如需转载,请注明出处,否则将追究法律责任。