在存储过程中完成业务逻辑操作后,需要将临时表中的数据
插入到历史表中
insert into table1 select * from table2;在执行到此语句时,就会停下来处于一直执行状态,
以前没有问题,现在table2中大概有五百五十万条记录
现在一天将要插入5万条记录单独执行上述语句很快也就执行完成

解决方案 »

  1.   

    这种问题是典型的资源不足导致的,使用更大的回滚空间和临时空间可以解决。其次修改表格为不产生日志
    SQL> alter table Ytab nologging;设置表为nologging最后可以对于插入的语句进行一些调整。
    sql> insert /*+ append */ into Ytab select * from Ytab2
      

  2.   

    现在table2中大概有五百五十万条记录,..
    估计你的TABLE2的数据是累积数据而不是当天产生的临时数据
    建议:
    1.在INSERT之前先将TABLE1的数据清掉,这样的话就不需要针对TABLE2中的数据每一条都要到TABLE1中检索一次.
    2.执行业务逻辑操作之前先清掉TABLE2的数据,只将新增的数据放入到TABLE2中,这样速度应该提高不少.
      

  3.   

    for (b in (select /*+ first_rows */ rowid,t.* from table2 t) 
    loop
           insert into table1 
           values(b.column1,b.column2,...);
           delete table2
           where rowid = b.rowid;
           commit;
    end loop;
      

  4.   

    一楼说得不错,是资源问题,但是数据库的配置不能因为一张表就改动,最后可以对于插入的语句进行一些调整。 
    sql>   insert   /*+   append   */   into   Ytab   select   *   from   Ytab2
    这条语句我看不懂,能不能在说清楚点。谢谢!!!