0

我需要你對含有數百萬條記錄的表格創建分區的建議。對存在數百萬條記錄的現有表格進行分區

表定義

  1. CompanyId
  2. Type_Of_Data
  3. EMP_ID
  4. 目標
  5. 目的地代號

現在,這裏的一個公司,數據和EMP_ID的類型可以是不同的

COMPANY_ID TYPE_OF_DATA EMP_ID 

A EMP_DATA   A1 
A EMP_DATA   A2 
A EMP_DATA   A3 
A EMP_DATA   A4 
A EMP_ADDRESS_DATA A1 
A EMP_ADDRESS_DATA A2 
A EMP_ADDRESS_DATA A3 
A EMP_ADDRESS_DATA A4 
B EMP_DATA   B1 
B EMP_DATA   B2 
B EMP_DATA   B3 
B EMP_DATA   B4 
B EMP_ADDRESS_DATA B1 
B EMP_ADDRESS_DATA B2 
B EMP_ADDRESS_DATA B3 
B EMP_ADDRESS_DATA B4 

我基本的選擇將會對數據的COMPANY_ID然後類型和emp_id爲

我想創建一個列表 - 哈希或列表 - 列出分區。

有人能想出別的東西,以及如何分區添加到現有的表將有助於

回答

1

不能將分區添加到現有的「非partitionized」表。您必須創建一個新表並將數據複製到該表中。 看看DBMS_REDEFINITION它可以幫助您在沒有任何應用程序停機的情況下執行此操作。

的複合列表,列表分區將是這樣一個:

CREATE TABLE MY_TABLE 
(
COMPANY_ID VARCHAR2(100), 
TYPE_OF_DATA VARCHAR2(100), 
EMP_ID VARCHAR2(10), 
... 
) 
PARTITION BY LIST (COMPANY_ID) 
    SUBPARTITION BY LIST (TYPE_OF_DATA) SUBPARTITION TEMPLATE 
     (
     SUBPARTITION EMP VALUES ('EMP_DATA'), 
     SUBPARTITION EMP_ADDRESS VALUES ('EMP_ADDRESS_DATA'), 
     SUBPARTITION MISCELLANEOUS VALUES (DEFAULT) -- if needed 
     ) 
(
PARTITION COMPANY_A VALUES ('A'), 
PARTITION COMPANY_B VALUES ('B'), 
PARTITION COMPANY_C VALUES ('C'), 
PARTITION COMPANY_OTHER VALUES (DEFAULT) 
); 

如果你可以得到更多的公司在你的餐桌考慮RANGE分區,而不是。

+0

謝謝你答案:你能告訴我如何在這個表中添加一個新的分區和子分區嗎? –

+0

只需添加一個分區'ALTER TABLE MY_TABLE ADD PARTITION COMPANY_D_TO_G VALUES('D','E','F','G');'。子分區按照模板的定義自動創建。 –

+0

:我的意思是,如果另一個子分區出現像EMP_SPOUSE,那麼我不希望它在默認子分區下,那麼我將如何補充說,我問,因爲我需要這樣做動態 –

0

您不能直接對現有的非分區表進行分區。您將需要創建取決於下列方法臨時表/新表分區:

  • DBMS_REDEFINITION

    1. 創建分區臨時表
    2. 開始重新定義過程
    3. 創建約束和索引(依賴關係)
    4. 完成重定義過程
  • EXCHANGE PARTITION

    1. 創建一個分區的目標表
    2. EXCHANGE PARTITION
    3. SPLIT PARTITION(如果需要拆分單個大分區成較小的分區)