Большой 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.