更新/插入oracle数据库中的1500万条记录

时间:2016-09-26 19:33:44

标签: plsql parallel-processing proc oracle9i

我的项目要求在进行一些验证后在表格中插入1500万条记录,这应该在20分钟内完成。

源表是一个从其他应用程序接收数据的临时表。现在,从此临时表开始,我们必须在验证后将数据插入其中一个基表。当这个过程结束时,我们必须将登台表中的记录插入两个单独的历史表中。

首次插入的时间应为20分钟。 对于接下来的两个插入组合时间应该是20分钟。

同一个数据库中的所有四个表,在同一模式中。 我在案例1中使用Pro * C进行验证,但在第二次插入时有一个plsql包。

任何人都可以帮我提出任何建议,数据库是oracle 9i。另外,20分钟内可以处理的最大记录数是多少?

2 个答案:

答案 0 :(得分:2)

这取决于您需要使用的数据类型。我不知道9i需要花多少时间,我使用11g(廉价笔记本电脑上的免费版),下面的插页(15,000,000个非常简单的行,一个数字列)花费不到20

SQL> create table a ( col number );

Table created.
Elapsed: 00:00:00.02

SQL> insert into a
  2  select u.x + v.y
  3  from            (select level x from dual connect by level <= 15000) u
  4       cross join (select level y from dual connect by level <=  1000) v;

15000000 rows created.    
Elapsed: 00:00:19.46

SQL> commit;

Commit complete.

SQL> select count(*) from a;

  COUNT(*)
----------
  15000000

1 row selected.    
Elapsed: 00:00:01.36

答案 1 :(得分:1)

最后,我们决定使用多线程并行插入两个历史表,这是一个简单的INSERT查询。 对于第二种情况,Pro * C正在逐个处理每个记录,因此,它无法在给定时间内完成。我们仍然实现了最大线程,这些线程无法阻止其他进程以及我们的Pl / SQL部分中的某种程度的并行。

谢谢大家的建议。