Онлайн разделы

У меня есть таблица с огромными данными, которая находится на производстве на стороне клиента. Я должен сделать онлайн разделение этого означает, что я могу остановить производство, и таблица должна быть разделена. У меня есть сценарий, чтобы сделать это. Но я не знаю, как это сделать онлайн. Есть ли у них какой-нибудь способ, которым я могу добиться этого. Пожалуйста, предложите..

1 ответ

Решение

Выполните следующие шаги,

  1. Создайте временную таблицу в той же структуре, что и основная таблица (например, TABLE_P для 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
    
  2. Создайте индекс для этой таблицы с нужным столбцом.

    create index IX01_TABLE on TABLE_P (COL1) local;         
    
  3. Запустите приведенные ниже скрипты для повторного определения. Заменить на фактическое имя схемы.

    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;
    /
    

Обратите внимание, что это сделает зависимые объекты недействительными в схеме, поэтому будьте готовы к простоям, чтобы очистить этих инвалидов.

Другие вопросы по тегам