-
#################################################################################
-
2015-12-24
-
创建表FACT_STORAGE_SHEET为分区的过程
-
-
1)备份原表
-
09:53:36 SQL> create table FACT_STORAGE_SHEET_20151224 as select * from FACT_STORAGE_SHEET;
-
-
表已创建。
-
-
已用时间: 00: 12: 48.52
-
-
2)创建分区中间表 FACT_STORAGE_SHEET_PP
-
-
20141211之前的数据默认在分区P0.
-
-
drop table FACT_STORAGE_SHEET_PP purge;
-
-
CREATE TABLE FACT_STORAGE_SHEET_PP
-
( "ID" NUMBER(11,0),
-
"PRODUCT_SKU" NUMBER(11,0) NOT NULL ENABLE,
-
"BATCH_ID" NUMBER(11,0),
-
"NUMS" NUMBER(11,0),
-
"STORAGE_PRICE" NUMBER,
-
"SELL_KEY" NUMBER(4,0),
-
"DATE_KEY" NUMBER(11,0),
-
"BATCH_KEY" CHAR(20),
-
"CREATE_TIME" TIMESTAMP (7),
-
"PROPERTY_KEY" NUMBER(11,0),
-
"RETAIL_PRICE" NUMBER,
-
"SUPPLIER_KEY" NUMBER(11,0),
-
"AGEING_NUM" NUMBER(11,0),
-
"AGEING_KEY" NUMBER(11,0),
-
"TIMER" DATE
-
)
-
PARTITION BY RANGE (DATE_KEY)
-
INTERVAL(1)
-
(
-
PARTITION p0 values LESS THAN (20141211)
-
)
-
TABLESPACE "TBS_YHBI_RETAIL"
-
;
-
-
3)将备份表的数据插入到分区表 FACT_STORAGE_SHEET_PP,Oracle会根据分区键自动创建以SYS_开头的分区。
-
-
14:23:47 SQL> insert into FACT_STORAGE_SHEET_PP select * from FACT_STORAGE_SHEET_20151224;
-
-
已创建 344847585 行。
-
-
已用时间: 01: 54: 50.20
-
-
4)提交
-
16:27:17 SQL> commit;
-
-
提交完成。
-
-
已用时间: 00: 00: 00.06
-
-
-
5)rename原表
-
16:49:45 SQL> rename FACT_STORAGE_SHEET to FACT_STORAGE_SHEET_old;
-
-
表已重命名。
-
-
已用时间: 00: 00: 00.01
-
-
6)将分区表 FACT_STORAGE_SHEET_PP 重命名为生产表 FACT_STORAGE_SHEET
-
16:50:04 SQL> rename FACT_STORAGE_SHEET_PP to FACT_STORAGE_SHEET;
-
-
表已重命名。
-
-
已用时间: 00: 00: 00.26
-
-
-
7)分区重命名 sh rename_part.sh
-
-
sqlplus YHBI_RETAIL/yhbi_retail <<EOF >> rename.log
-
-
declare
-
v_sql varchar(400);
-
v_table_name user_tab_partitions.table_name%type;
-
v_partition_name user_tab_partitions.partition_name%type;
-
v_high_value varchar(200);
-
v_tmp_partition_name user_tab_partitions.partition_name%type;
-
-
cursor cur is
-
select
-
table_name ,
-
partition_name ,
-
high_value
-
from user_tab_partitions
-
where partition_name like 'SYS%' and table_name = 'FACT_STORAGE_SHEET' ;
-
-
begin
-
open cur;
-
loop
-
fetch cur into v_table_name,v_partition_name,v_high_value;
-
exit when cur%notfound;
-
v_tmp_partition_name := to_char(to_date(v_high_value - 1, 'yyyymmdd'),'yyyymmdd');
-
v_sql := 'alter table '|| v_table_name ||' rename partition '
-
||v_partition_name
-
||' to P' || v_tmp_partition_name;
-
dbms_output.put_line( v_sql );
-
execute immediate v_sql;
-
end loop;
-
close cur;
-
end;
-
/
-
exit
-
EOF
-
-
-
-
8)删除备份表
-
-
17:35:27 SQL> drop table FACT_STORAGE_SHEET_old purge;
-
-
表已删除。
-
-
17:32:33 SQL> drop table FACT_STORAGE_SHEET_20151224 purge;
-
-
表已删除。
-
-
######################################################################
-
--查看 表FACT_STORAGE_SHEET的所有分区
-
-
17:36:01 SQL> select
-
table_name ,
-
partition_name ,
-
high_value
-
from user_tab_partitions
-
where table_name = 'FACT_STORAGE_SHEET' --and partition_name like 'SYS%'
-
order by 2;
-
-
-
TABLE_NAME PARTITION_NAME HIGH_VALUE
-
------------------------------ -------------------- --------------------------------------------------------------------------------
-
FACT_STORAGE_SHEET P0 20141211
-
FACT_STORAGE_SHEET P20141211 20141212
-
FACT_STORAGE_SHEET P20141212 20141213
-
...
-
-
注意:
-
--20141211之前的数据在分区P0
-
-
-
--查看表fact_storage_sheet中的分区P20151222 记录数,建完分区,统计记录数很快。
-
17:35:22 SQL> select count(*) from YHBI_RETAIL.fact_storage_sheet partition(P20151222);
-
-
COUNT(*)
-
----------
-
1463827
-
-
已用时间: 00: 00: 00.18
-
-
17:35:41 SQL> select count(*) from YHBI_RETAIL.fact_storage_sheet partition(P0);
-
-
COUNT(*)
-
----------
-
1090011
-
-
已用时间: 00: 00: 00.05
-
-
-
--表fact_storage_sheet分区P0的数据:
-
-
17:35:57 SQL> select distinct date_key from fact_storage_sheet partition(P0);
-
-
DATE_KEY
-
----------
-
20141209
-
20141203
-
20141202
-
20141206
-
20141201
-
20141205
-
20141210
-
20141204
-
20141207
-
20141208
-
-
已选择10行。
-
-
已用时间: 00: 00: 00.15
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22661144/viewspace-1960903/
,如需转载,请注明出处,否则将追究法律责任。