1.cts -- create table as
原普通表数据如下
-
SQL> select distinct t.tablespace_name,count(*) from xjmon.TEST_2016_05_06 t
-
2 group by t.tablespace_name
-
3 order by 2 desc
-
4 ;
-
TABLESPACE_NAME COUNT(*)
-
------------------------
-
SYSAUX 1390
-
USERS 65
-
SYSTEM 18
-
TBS_CUS_DMP 13
-
MSP 12
-
APMDBS 9
-
TBS_CRM_IITF 1
-
7 rows selected.
改造语法
-
create table TEST_2016_05_06_PART
-
(
-
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 /*+ parallel(2) */ * from xjmon.TEST_2016_05_06
-
;
收集统计信息,通过100%采样率的统计信息,看数据是否准确
-
BEGIN
-
DBMS_STATS.GATHER_TABLE_STATS(OwnName => 'XJMON',
-
tabname => 'TEST_2016_05_06_PART',
-
estimate_percent => 100,
-
method_opt => 'FOR ALL COLUMNS SIZE 1',
-
degree => 8,
-
granularity => 'ALL',
-
cascade=>TRUE
-
);
-
END;
-
/
查看统计信息结果:
SQL> select a.table_owner,a.table_name,a.partition_name,a.partition_position,
2 a.num_rows,a.last_analyzed
3 from dba_tab_partitions a ,dba_segments b
4 where a.table_owner = b.owner and
5 a.table_name = b.segment_name
6 and a.partition_name = b.partition_name
7 and a.table_owner = 'XJMON'
8 and a.table_name= 'TEST_2016_05_06_PART'
9 order by a.num_rows desc
10 ;
TABLE_OWNER TABLE_NAME PARTITION_NAME PARTITION_POSITION NUM_ROWS LAST_ANAL
------------------------------ ------------------------------ ------------------------------ ------------------ ---------- ---------
XJMON TEST_2016_05_06_PART P_SYSAUX 1 1390 29-JUN-16
XJMON TEST_2016_05_06_PART P_USERS 4 65 29-JUN-16
XJMON TEST_2016_05_06_PART P_SYSTEM 5 18 29-JUN-16
XJMON TEST_2016_05_06_PART P_TBS_CUS_DMP 2 13 29-JUN-16
XJMON TEST_2016_05_06_PART P_MSP 3 12 29-JUN-16
XJMON TEST_2016_05_06_PART P_APMDBS 7 9 29-JUN-16
XJMON TEST_2016_05_06_PART P_TBS_CRM_IITF 6 1 29-JUN-16
XJMON TEST_2016_05_06_PART P_OTHERS 8 0 29-JUN-16
-
SQL> select a.table_owner,a.table_name,a.partition_name,a.partition_position,
-
2 a.num_rows,a.last_analyzed
-
3 from dba_tab_partitions a ,dba_segments b
-
4 where a.table_owner = b.owner and
-
5 a.table_name = b.segment_name
-
6 and a.partition_name = b.partition_name
-
7 and a.table_owner = 'XJMON'
-
8 and a.table_name= 'TEST_2016_05_06_PART'
-
9 order by a.num_rows desc
-
10 ;
-
-
TABLE_OWNER TABLE_NAME PARTITION_NAME PARTITION_POSITION NUM_ROWS LAST_ANAL
-
------------------------------ ------------------------------ -------------------
-
XJMON TEST_2016_05_06_PART P_SYSAUX 1 1390 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_USERS 4 65 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_SYSTEM 5 18 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_TBS_CUS_DMP 2 13 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_MSP 3 12 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_APMDBS 7 9 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_TBS_CRM_IITF 6 1 29-JUN-16
-
XJMON TEST_2016_05_06_PART P_OTHERS 8 0 29-JUN-16
经对比前后数据发现,没有数据丢失,分区中存放的数据量与原表DISTINCT时保持一致,并且表数据的总数同样保持一致。
-
SQL> select count(*) from XJMON.TEST_2016_05_06;
-
-
COUNT(*)
-
----------
-
1508
-
-
SQL> select count(*) from XJMON.TEST_2016_05_06_PART;
-
-
COUNT(*)
-
----------
-
1508
创建索引
-
create index xjmon.ind_TEST_PART_TABLESPACES_NAME ON XJMON.TEST_2016_05_06_PART(TABLESPACE_NAME) LOCAL;
注意:
1、使用cts方式改造表,原表上的约束、索引等信息需要在新的分区表上创建。原表的普通索引在新分区表上可以设计为分区索引。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28551528/viewspace-2121208/
,如需转载,请注明出处,否则将追究法律责任。