Большой Insert с другой базы

Необходимо вставить данные из select из другой базы. Количество записей более 5 млн. Таблицы полностью идентичны. По линке соответственно идет сбой при переполнении буфера. Можно ли передавать данные в цикле небольшими порциями, или же реализовать все через rest modules? Ниже упрощенный пример запроса.

 insert into table1 
 (select * from table2@dblink where code_firme
 CODE_FIRME between 2000 and 2050); 

Ответы (1 шт):

Автор решения: 0xdb

Tак должно работать:

create database link loopback connect to me identified by me using 'localhost/pdb1'
/
create table t1 as 
    select level id, lpad ('A', 4000, 'A') memo from dual connect by level<=10e3
/
create table t2 as select * from t1 where 1=0
/  
insert /*+ append */ into t2
select * from t1@loopback 
where 1=1 -- добавте условия фильтра
/
10,000 rows inserted.

commit;

Если сетевое соединение неустойчивое или имеет ещё какие-либо ограничения, то записывайте данные порциями:

declare n number := 0; 
begin
    loop
        insert /*+ append */ into t2
        select * from t1@loopback 
        where 1=1 -- добавте условия фильтра
        and not exists (select 0 from t2 where id = t1.id)
        and rownum<=1000; -- подберите значение
        exit when sql%rowcount = 0;
        n := n + sql%rowcount; 
        commit;
    end loop;
    dbms_output.put_line (n||' rows inserted.'); 
end;
/
10000 rows inserted.
→ Ссылка