- 论坛徽章:
- 0
|
跪地哭求 oracle中insert大量插入数据的方法!!!
这里oralce要执行的是两个动作。
一个是 返回很大记录数的select
一个是 插入很大记录数的insert
你用一条语句来完成。select 将占据大量内存。你的内存页面就低效地换进换出
而insert 回滚信息会占据大量回滚段.一次提交,对机器的负荷之重可想而之。
应多次提交。
你先建一个临时表。
drop table temp;
create table temp
as select * from b
where gexin_ymd>;'19980101';
DDL语句不占回滚段,对cpu来说,也把select和insert 的负荷分开了,
然后用pl/sql
sql>; declare
sql>; cursor b_cursor is select * from temp;
sql>; b_列名一 char(3); -- 根据你表的结构
sql>; b_列名二 number; -- 列好每一列
sql>; ...
sql>; b_列名n 数据类型;
sql>; begin
sql>; open b_cursor ;
sql>; loop
sql>; fetch b_cursor into b_列名一,b_列名二,...,b_列名n;
sql>; exit when b_cursor%notfound;
sql>; insert into a
sql>; values(b_列名一,b_列名二,...,b_列名n);
sql>; commit; -- 及时提交
sql>; end loop;
sql>; end;
sql>; /
这样一条一条的插入,很平稳。你的机器就全速开进了!!
还有其他的方法:比如把a表先改名,把temp表名该为a
然后exp出来,在把原来的a表名字改回来,
在 imp 刚倒出的表名为a的temp表,加上commit=y 参数。 |
|