[引用分割槽表]Oracle 11g新特性之引用分割槽表

路途中的人2012發表於2017-10-09
        引用分割槽表是Oracle11g引入的新特性,在特定場合十分好用,解決了“並非所有表都具有您需要根據其進行分割槽的列”這個問題。
 
       根據Oracle官方文件介紹,引用分割槽表是透過PARTITION BY REFERENCE語句來實現,需要指定引用約束的名稱,該約束將成為應用到該引用分割槽表所使用的約束。這個約束必須啟用和執行。

   和其他分割槽表一樣,你可以制定物件級別的預設屬性,也可以隨意在特定分割槽設定屬性,覆蓋物件級別的屬性。

   下面的sql語句建立了一個範圍分割槽表orders,引用分割槽子表order_items包含了4個分割槽,分別是Q1_2005Q2_2005Q3_2005, Q4_2005,每個分割槽包含的order_items資料都是根據父表關聯列的範圍分割槽來儲存。

點選(此處)摺疊或開啟

  1. CREATE TABLE orders
  2.     ( order_id NUMBER(12),
  3.       order_date TIMESTAMP,
  4.       order_mode VARCHAR2(8),
  5.       customer_id NUMBER(6),
  6.       order_status NUMBER(2),
  7.       order_total NUMBER(8,2),
  8.       sales_rep_id NUMBER(6),
  9.       promotion_id NUMBER(6),
  10.       CONSTRAINT orders_pk PRIMARY KEY(order_id)
  11.     )
  12.   PARTITION BY RANGE(order_date)
  13.     ( PARTITION Q1_2005 VALUES LESS THAN (TO_DATE('01-APR-2005','DD-MON-YYYY')),
  14.       PARTITION Q2_2005 VALUES LESS THAN (TO_DATE('01-JUL-2005','DD-MON-YYYY')),
  15.       PARTITION Q3_2005 VALUES LESS THAN (TO_DATE('01-OCT-2005','DD-MON-YYYY')),
  16.       PARTITION Q4_2005 VALUES LESS THAN (TO_DATE('01-JAN-2006','DD-MON-YYYY'))
  17.     );

  18. CREATE TABLE order_items
  19.     ( order_id NUMBER(12) NOT NULL,
  20.       line_item_id NUMBER(3) NOT NULL,
  21.       product_id NUMBER(6) NOT NULL,
  22.       unit_price NUMBER(8,2),
  23.       quantity NUMBER(8),
  24.       CONSTRAINT order_items_fk
  25.       FOREIGN KEY(order_id) REFERENCES orders(order_id)
  26.     )
  27.     PARTITION BY REFERENCE(order_items_fk);
    在上述sql語句中,引用分割槽子表沒有指定分割槽描述,預設和父表保持一致;如果要指定分割槽描述,則分割槽描述的個數必須和父表的分割槽數保持一致。如果父表是一個複合分割槽表,則子表的分割槽和父表的子分割槽一一對應;否則,子表分割槽和父表的分割槽一一對應。

   需要注意的是,在引用分割槽表中不能指定分割槽的邊界。


       引用分割槽表的分割槽可以單獨命名,如果沒有顯式地制定分割槽名稱,則直接繼承其關聯的父表分割槽名稱,除非父表分割槽名稱和已有名稱衝突。這種情況下,系統將自動生成一個分割槽名稱。由於上述sql語句沒有指定名稱,則子表分割槽和父表分割槽的名稱應該相同。

點選(此處)摺疊或開啟

  1. SQL> select table_name,partition_name from user_tab_partitions;

  2. TABLE_NAME PARTITION_NAME
  3. ------------------------------ ------------------------------
  4. ORDER_ITEMS Q4_2005
  5. ORDER_ITEMS Q3_2005
  6. ORDER_ITEMS Q2_2005
  7. ORDER_ITEMS Q1_2005
  8. ORDERS Q4_2005
  9. ORDERS Q3_2005
  10. ORDERS Q2_2005
  11. ORDERS Q1_2005

  12. 8 rows selected.

  13. SQL>

       如果sql語句沒有顯式指定表空間,則引用分割槽表的分割槽將和父表的相關分割槽放在一起。

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

相關文章