Oracle11g 在线分区

Oracle11g 在线分区,oracle11g,partitioning,Oracle11g,Partitioning,我有一个包含大量数据的表,它正在客户端进行生产。我必须对它进行在线分区,这意味着我可以停止生产,并且应该对表进行分区。我有做这件事的剧本。但是我不知道怎么在网上做。是他们的任何方式,我可以做到这一点。请建议..遵循以下步骤 在与主表相同的结构中创建临时表(例如table_p for table),并在所需列上对该临时表进行分区。不要将主表的主键和其他索引添加到此临时表 create table TABLE_P ( COL1 VARCHAR2(35 CHAR) n

我有一个包含大量数据的表,它正在客户端进行生产。我必须对它进行在线分区,这意味着我可以停止生产,并且应该对表进行分区。我有做这件事的剧本。但是我不知道怎么在网上做。是他们的任何方式,我可以做到这一点。请建议..

遵循以下步骤

  • 在与主表相同的结构中创建临时表(例如table_p for table),并在所需列上对该临时表进行分区。不要将主表的主键和其他索引添加到此临时表

    create table TABLE_P
        (
          COL1        VARCHAR2(35 CHAR) not null,
          COL2        VARCHAR2(35 CHAR) not null,
        )
        --add partition (Example taken here is Range partitioning)  from here
         PARTITION BY RANGE (COL1) (
         PARTITION p0 VALUES LESS THAN (5),
         PARTITION p1 VALUES LESS THAN (10),
         PARTITION p2 VALUES LESS THAN (15),
         PARTITION p3 VALUES LESS THAN (MAXVALUE)
        --add partition till here
    
  • 使用所需列创建此表的索引

    create index IX01_TABLE on TABLE_P (COL1) local;         
    
  • 运行以下脚本进行重新定义。替换为实际的架构名称

    begin
    dbms_redefinition.can_redef_table( 'SCHEMA', 'TABLE' );
    end;
    /
    
    begin
    dbms_redefinition.start_redef_table('SCHEMA', 'TABLE','TABLE_P' );
    end;
    /
    
    declare
      error_count pls_integer := 0;
    BEGIN
      dbms_redefinition.copy_table_dependents(uname      => 'SCHEMA',
                                              orig_table => 'TABLE',
                                              int_table  => 'TABLE_P',
                                              num_errors => error_count);
      dbms_output.put_line('errors := ' || to_char(error_count));
    END;
    /
    
    begin
    dbms_redefinition.finish_redef_table('SCHEMA', 'TABLE','TABLE_P');
    end;
    /
    

  • 请注意,这将使从属对象在架构中变得无效,因此请准备一些停机时间来清除这些无效对象。

    谢谢您的回答。我必须进行区间划分,请进行相应修改。这将是很大的帮助。非常感谢。您要我添加的索引(IX01_表)是否与原始表索引相同?否。您不需要将任何索引从原始表添加到临时表。在重新定义期间,它们都会自动添加。