【问题标题】:Partition on Exisiting Table with Millions of Record在现有表上进行数百万条记录的分区
【发布时间】:2015-09-11 09:19:30
【问题描述】:

我需要你关于在具有数百万条记录的表上创建分区的建议。

表定义

  1. 公司标识
  2. Type_Of_Data
  3. Emp_id
  4. 目的地
  5. Destination_id

现在这里是单个公司,数据类型和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

我正在考虑创建一个 List - Hash 或 List -List Partition。

任何人都可以提出其他建议以及如何向现有表添加分区会有所帮助

【问题讨论】:

    标签: oracle oracle11g database-partitioning data-partitioning


    【解决方案1】:

    您不能将任何分区添加到现有的“非分区”表。您必须创建一个新表并将数据复制到其中。 查看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 分区。

    【讨论】:

    • 感谢您的回答:您能告诉我如何在此表中添加新分区和子分区吗?
    • 只需添加一个分区ALTER TABLE MY_TABLE ADD PARTITION COMPANY_D_TO_G VALUES ('D','E','F','G');。子分区根据模板的定义自动创建。
    • :我的意思是如果另一个子分区像 EMP_SPOUSE 一样出现,那么我不希望它进入默认子分区,那么我将如何添加它,我问是因为我需要做这个动态
    • ALTER TABLE my_table SET SUBPARTITION TEMPLATE (SUBPARTITION EMP VALUES ('EMP_DATA'), SUBPARTITION EMP_ADDRESS VALUES ('EMP_ADDRESS_DATA'), SUBPARTITION SPOUSE VALUES ('EMP_SPOUSE')).
    【解决方案2】:

    您不能直接对现有的未分区表进行分区。您将需要根据以下分区方法创建临时表/新表:

    • DBMS_REDEFINITION

      1. 创建分区临时表
      2. 开始重新定义过程
      3. 创建约束和索引(依赖)
      4. 完成重新定义过程
    • EXCHANGE PARTITION

      1. 创建分区目标表
      2. 交换分区
      3. SPLIT PARTITION(如果需要将单个大分区拆分为较小的分区)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多