Oracle Interval Partition 生產環境-建立表FACT_STORAGE_SHEET為分割槽的過程

fjzcau發表於2015-12-24

  1. #################################################################################
  2. 2015-12-24
  3. 建立表FACT_STORAGE_SHEET為分割槽的過程

  4. 1)備份原表
  5. 09:53:36 SQL> create table FACT_STORAGE_SHEET_20151224 as select * from FACT_STORAGE_SHEET;

  6. 表已建立。

  7. 已用時間: 00: 12: 48.52

  8. 2)建立分割槽中間表 FACT_STORAGE_SHEET_PP

  9. 20141211之前的資料預設在分割槽P0.

  10. drop table FACT_STORAGE_SHEET_PP purge;

  11. CREATE TABLE FACT_STORAGE_SHEET_PP
  12.  ( "ID" NUMBER(11,0),
  13.       "PRODUCT_SKU" NUMBER(11,0) NOT NULL ENABLE,
  14.       "BATCH_ID" NUMBER(11,0),
  15.       "NUMS" NUMBER(11,0),
  16.       "STORAGE_PRICE" NUMBER,
  17.       "SELL_KEY" NUMBER(4,0),
  18.       "DATE_KEY" NUMBER(11,0),
  19.       "BATCH_KEY" CHAR(20),
  20.       "CREATE_TIME" TIMESTAMP (7),
  21.       "PROPERTY_KEY" NUMBER(11,0),
  22.       "RETAIL_PRICE" NUMBER,
  23.       "SUPPLIER_KEY" NUMBER(11,0),
  24.       "AGEING_NUM" NUMBER(11,0),
  25.       "AGEING_KEY" NUMBER(11,0),
  26.       "TIMER" DATE
  27. )
  28. PARTITION BY RANGE (DATE_KEY)
  29. INTERVAL(1)
  30. (
  31.   PARTITION p0 values LESS THAN (20141211)
  32. )
  33. TABLESPACE "TBS_YHBI_RETAIL"
  34. ;

  35. 3)將備份表的資料插入到分割槽表 FACT_STORAGE_SHEET_PP,Oracle會根據分割槽鍵自動建立以SYS_開頭的分割槽。

  36. 14:23:47 SQL> insert into FACT_STORAGE_SHEET_PP select * from FACT_STORAGE_SHEET_20151224;

  37. 已建立 344847585 行。

  38. 已用時間: 01: 54: 50.20

  39. 4)提交
  40. 16:27:17 SQL> commit;

  41. 提交完成。

  42. 已用時間: 00: 00: 00.06


  43. 5)rename原表
  44. 16:49:45 SQL> rename FACT_STORAGE_SHEET to FACT_STORAGE_SHEET_old;

  45. 表已重新命名。

  46. 已用時間: 00: 00: 00.01

  47. 6)將分割槽表 FACT_STORAGE_SHEET_PP 重新命名為生產表 FACT_STORAGE_SHEET
  48. 16:50:04 SQL> rename FACT_STORAGE_SHEET_PP to FACT_STORAGE_SHEET;

  49. 表已重新命名。

  50. 已用時間: 00: 00: 00.26


  51. 7)分割槽重新命名 sh rename_part.sh

  52. sqlplus YHBI_RETAIL/yhbi_retail <<EOF >> rename.log

  53. declare
  54. v_sql varchar(400);
  55. v_table_name user_tab_partitions.table_name%type;
  56. v_partition_name user_tab_partitions.partition_name%type;
  57. v_high_value varchar(200);
  58. v_tmp_partition_name user_tab_partitions.partition_name%type;

  59. cursor cur is
  60. select
  61.   table_name ,
  62.   partition_name ,
  63.   high_value
  64. from user_tab_partitions
  65. where partition_name like 'SYS%' and table_name = 'FACT_STORAGE_SHEET' ;

  66. begin
  67.   open cur;
  68.   loop
  69.     fetch cur into v_table_name,v_partition_name,v_high_value;
  70.     exit when cur%notfound;
  71.     v_tmp_partition_name := to_char(to_date(v_high_value - 1, 'yyyymmdd'),'yyyymmdd');
  72.     v_sql := 'alter table '|| v_table_name ||' rename partition '
  73.     ||v_partition_name
  74.     ||' to P' || v_tmp_partition_name;
  75.     dbms_output.put_line( v_sql );
  76.     execute immediate v_sql;
  77.   end loop;
  78.   close cur;
  79. end;
  80. /
  81. exit
  82. EOF



  83. 8)刪除備份表

  84. 17:35:27 SQL> drop table FACT_STORAGE_SHEET_old purge;

  85. 表已刪除。

  86. 17:32:33 SQL> drop table FACT_STORAGE_SHEET_20151224 purge;

  87. 表已刪除。

  88. ######################################################################
  89. --檢視 表FACT_STORAGE_SHEET的所有分割槽

  90. 17:36:01 SQL> select
  91.   table_name ,
  92.   partition_name ,
  93.   high_value
  94. from user_tab_partitions
  95. where table_name = 'FACT_STORAGE_SHEET' --and partition_name like 'SYS%'
  96. order by 2;


  97. TABLE_NAME PARTITION_NAME HIGH_VALUE
  98. ------------------------------ -------------------- --------------------------------------------------------------------------------
  99. FACT_STORAGE_SHEET P0 20141211
  100. FACT_STORAGE_SHEET P20141211 20141212
  101. FACT_STORAGE_SHEET P20141212 20141213
  102. ...

  103. 注意:
  104. --20141211之前的資料在分割槽P0


  105. --檢視錶fact_storage_sheet中的分割槽P20151222 記錄數,建完分割槽,統計記錄數很快。
  106. 17:35:22 SQL> select count(*) from YHBI_RETAIL.fact_storage_sheet partition(P20151222);

  107.   COUNT(*)
  108. ----------
  109.    1463827

  110. 已用時間: 00: 00: 00.18

  111. 17:35:41 SQL> select count(*) from YHBI_RETAIL.fact_storage_sheet partition(P0);

  112.   COUNT(*)
  113. ----------
  114.    1090011

  115. 已用時間: 00: 00: 00.05


  116. --表fact_storage_sheet分割槽P0的資料:

  117. 17:35:57 SQL> select distinct date_key from fact_storage_sheet partition(P0);

  118.   DATE_KEY
  119. ----------
  120.   20141209
  121.   20141203
  122.   20141202
  123.   20141206
  124.   20141201
  125.   20141205
  126.   20141210
  127.   20141204
  128.   20141207
  129.   20141208

  130. 已選擇10行。

  131. 已用時間: 00: 00: 00.15

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-1960903/,如需轉載,請註明出處,否則將追究法律責任。

相關文章