Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Перенос данных через DBLink FORALL FOR IS  [new]
iauthor
Member

Откуда:
Сообщений: 19
Доброго времени суток
Есть задача актуализировать тестовую среду. Частный случай - сделать только insert - (то есть если запись по PK существует - ничего с ней не делаем, только вставка пропущенных данных).
Объем предпологаемых данных - от 1 миллиона до 100 миллионов записей.
Используется
merge into table@dblink using (select /*+parallel(4)*/ from table) .... when not matched then insert...

Выполняется долго

Решил использовать
BULK COLLECT INTO LIMIT + FORALL + INSERT INTO table@dblink 

В нем можно обрабатывать исключения - нарушение уникальности - но не взлетело, FORALL не поддерживает DBLINK

Если использовать обычный цикл BULK COLLECT + обычный for с перехватом исключений + commit например каждые 10000 записей - это будет быстрее merge into table@dblink?

Какие еще варианты ускорить переливку данных?

Обычно всю таблицу прогрузить невозможно, приходится грузить лишь необходимые данные по дате, по значениям, по периоду...
13 авг 15, 10:40    [18011709]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
iauthor
Member

Откуда:
Сообщений: 19
iauthor,

Не нашел как редактировать.

Причем ограничение может быть как PK так и UK не связанный с PK...
13 авг 15, 10:44    [18011728]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
рман
Guest
iauthor,

клонировать бд онлайн или из бакапа.
13 авг 15, 11:39    [18012064]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
ora601
Member

Откуда:
Сообщений: 750
iauthor
Доброго времени суток
Есть задача актуализировать тестовую среду. Частный случай - сделать только insert - (то есть если запись по PK существует - ничего с ней не делаем, только вставка пропущенных данных).
Объем предпологаемых данных - от 1 миллиона до 100 миллионов записей.
Используется
merge into table@dblink using (select /*+parallel(4)*/ from table) .... when not matched then insert...

Выполняется долго

Решил использовать
BULK COLLECT INTO LIMIT + FORALL + INSERT INTO table@dblink 

В нем можно обрабатывать исключения - нарушение уникальности - но не взлетело, FORALL не поддерживает DBLINK

Если использовать обычный цикл BULK COLLECT + обычный for с перехватом исключений + commit например каждые 10000 записей - это будет быстрее merge into table@dblink?

Какие еще варианты ускорить переливку данных?

Обычно всю таблицу прогрузить невозможно, приходится грузить лишь необходимые данные по дате, по значениям, по периоду...


Обычный DML всегда быстрее FORALL PL/SQL. Если нужен просто инсерт используйте direct path + parallel select.
13 авг 15, 11:45    [18012101]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
iauthor
Какие еще варианты ускорить переливку данных?

Не забывать про
sqlplus copy

Ну или классика - вывалить данные во flat-file посредством sqlplus и загрузить посредством лодыря/external table
13 авг 15, 12:00    [18012209]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
Nobody1111
Guest
Datapump через dblink в данной постановке вполне справится.

Вполне вероятно, что основной тормоз будет в сетке. Но в принципе, если это будет критично, с этим тоже можно бороться.
13 авг 15, 12:20    [18012348]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
Nobody1111
Вполне вероятно, что основной тормоз будет в сетке. Но в принципе, если это будет критично, с этим тоже можно бороться.

Разумеется.
Например - передатьflat-файлы по мегапроизводительному каналу
*pokerface
13 авг 15, 13:05    [18012702]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
al.netrusov
Member

Откуда:
Сообщений: 42
Если делать FORALL с удаленной базы (т.е. DBLink будет в SELECT, а не в INSERT), то взлетит.
Только скорость все равно не айс.
14 авг 15, 18:34    [18019726]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7127
Если актуализировать только данные, то
impdp tts
14 авг 15, 18:38    [18019753]     Ответить | Цитировать Сообщить модератору
 Re: Перенос данных через DBLink FORALL FOR IS  [new]
iauthor
Member

Откуда:
Сообщений: 19
Всем спасибо за участие
17 авг 15, 09:16    [18026920]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить