Oracle Interval Partition 生產環境-建立表FACT_STORAGE_SHEET為分割槽的過程
-
#################################################################################
-
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部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-1960903/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Interval Partition 自動分割槽表-實驗Oracle
- Oracle查詢Interval partition分割槽表內資料Oracle
- 使用Oracle Database 11g建立Interval分割槽表OracleDatabase
- Oracle分割槽表(Partition Table)Oracle
- INTERVAL分割槽表鎖分割槽操作
- Oracle Interval Partition 預設分割槽重新命名-指令碼Oracle指令碼
- Oracle生產環境建立大的表空間模板Oracle
- 定期truncate 歷史間隔分割槽INTERVAL PARTITION
- 11g分割槽新特性之interval partition
- Oracle 分割槽表的建立Oracle
- oracle partition分割槽_分割槽列為空測試(一)Oracle
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- 【實驗】【PARTITION】RANGE分割槽表截斷表分割槽(Truncate Partition)
- 【實驗】【PARTITION】RANGE分割槽表移動表分割槽(Move Partition)
- Oracle 建立分割槽表Oracle
- 非分割槽錶轉換為分割槽表和partition indexIndex
- 分割槽表PARTITION table
- ORACLE 11g 範圍分割槽錶轉換INTERVAL分割槽表Oracle
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- oracle10g_10.2.0.5_構建生產某表為分割槽及分割槽索引的日誌Oracle索引
- Oracle11g INTERVAL分割槽新增分割槽策略Oracle
- 分割槽表PARTITION table(轉)
- 【實驗】【PARTITION】RANGE分割槽建立
- ORACLE 範圍分割槽 partition-range分割槽Oracle
- 【實驗】【PARTITION】RANGE分割槽表重新命名錶分割槽(Rename Partition)
- Rac 環境中分割槽表建立index hang(row cache lock)Index
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 【實驗】【PARTITION】RANGE分割槽表合併分割槽
- 【實驗】【PARTITION】RANGE分割槽表增加分割槽
- 【實驗】【PARTITION】RANGE分割槽表刪除分割槽
- Oracle 分割槽(partition)技術Oracle
- partition 分割槽表重新命名
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- 實驗】【PARTITION】RANGE分割槽建立【轉】
- oracle reference partition引用分割槽(一)Oracle