2016-12-20 6 views
1

Я пытаюсь найти способ миграции из двух таблиц в одной базе данных. Эта миграция должна быть как можно быстрее, чтобы минимизировать время простоя.Быстрая миграция данных в одной базе данных

Выражаясь на примере позволяет сказать, что у меня есть человек, стол, как так:

person_table -> (идентификатор, имя, адрес)

Таким образом, человек как Id , имя и адрес. Моя система будет содержать миллионы реестров пользователей, и было решено, что таблица людей должна быть разделена. Для этого я создал новую таблицу:

partitioned_person_table -> (номер, имя, адрес, partition_time)

Теперь эта таблица будет содержать дополнительный столбец partition_time. Это ключ раздела для этой таблицы, так как это раздел диапазона (один раздел каждый час).

Наконец, мне нужно найти способ, чтобы переместить всю информацию из person_table к partitioned_person_table с лучшей производительностью.

  • Первое, что я мог бы попробовать это просто создать такое заявление:

    INSERT INTO partitioned_person_table (идентификатор, имя, адрес, partition_time) SELECT, идентификатор, имя, адрес, CURRENT_TIMESTAMP ОТ person_table;

Проблема заключается в том, что, когда речь идет о миллионах реестров это может стать очень медленным (также временное табличное пространство не может быть в состоянии обрабатывать всю эту информацию)

  • Мой второй подход заключается в использовании ОБМЕННАЯ ЧАСТЬ способ. К сожалению, я не могу этого сделать, потому что таблицы содержат разные номера столбцов.

Есть ли какой-либо другой способ, который я могу выполнить с наилучшей производительностью (меньше простоев)?

спасибо.

+0

Вы считали [переопределение онлайн-таблицы] (https://docs.oracle.com/cd/E11882_01/server.112/e25494/tables.htm#ADMIN11667)? –

+0

@AlexPoole благодарим вас за ответ. Я еще не слышал о переопределении Online Table, но вы пытаетесь использовать это, чтобы я мог добавить дополнительные столбцы в таблицу для обмена разделами? –

+1

Насколько велик он сейчас? Вы говорите, что «будут содержать миллионы людей», которые сегодня не говорят, насколько велика. – tbone

ответ

1

Если вы можете жить с государством, что все текущие записи будут располагаться в одном разделе (и Добавленный подходе предполагает, что), вы можете только

1) добавить новый столбец partition_time либо NULL или возможно с metadata default only - требуется 12c

2) переключите таблицу в секционированную таблицу либо с онлайн-переопределением (если у вас нет окна поддержки, где таблица находится в автономном режиме), либо с обменным разделом в противном случае.

+0

Благодарим вас за ответ. Если я следую сетевому переопределению, что произойдет с информацией, которая будет вставлена, когда миграция уже установлена? Будет ли Oracle автоматически проверять, что была вставлена ​​новая информация, и данные также будут перенесены? Благодарю. –

+0

Да, это точно, как работает [DBMS_REDEFINITION] (http://docs.oracle.com/database/121/ARPLS/d_redefi.htm#ARPLS042). Проверьте в документах предварительные условия и как изменения переносятся и распространяются. –