RT现在需求是在页面中能进行批量的插入数据,大概在9W条记录左右,数据库是oracle 10g的之前采用事务提交,但是在中途就出现Connection is closed,连接关闭,原因是sql还没有commit之前,数据库连接是处于空闲状态,所以等到一定时间之后,连接就自动关闭了。现在我有个想法:采用分段事务提交,比如说在1000条的时候我就commit一下,让数据库连接处于活动状态,但是这样不知道怎么去回滚事务,比如前面的都已经commit了,在最后1000条记录的时候出错,那么怎么去保证所以的数据都回滚呢?谢谢大家咯
如何回滚啊········

解决方案 »

  1.   

    设置保存点savepoint,回滚时候回滚到制定的保存点
      

  2.   

    savepoint如何设置呢 ?不是很明白  说的详细点吗?····
      

  3.   

    你是在程序你这样控制的么,如果是程序控制,可以直接在程序里通过commit和rollback来控制,比如java。不过要注意,要先设置autocommit为false。
      

  4.   

    那怎么去回滚呢?比如每100条记录就提交一次,那一共有1000条数据,在999条时出现异常,前面commit的数据怎么去回滚啊??
      

  5.   

    先存入临时表,出现异常后临时表清空,如果未出现异常则再从临时表中将数据插入正式表
    9w数据量貌似不算大,提交了就不可以回滚了,或者知道时间的话可以flashback,不过应用程序中不会这样用吧
      

  6.   


    insert into test1 values(11);
    savepoint p1;
    insert into test1 values(22);
    savepoint p2;
    insert into test1 values(33);
    rollback to savepoint p2;--回滚到记录点,只插入11,22
    --rollback;--回滚全部,一条都没有插入
    commit;
      

  7.   


    楼主说已经提交了"比如前面的都已经commit了,在最后1000条记录的时候出错,那么怎么去保证所以的数据都回滚呢?谢谢大家咯"