在程序中不发COMMIT不就可以了吗?Cause: An attempt was made to specify a number not in the allowed range.Action: Use an error number in the range of -20000 to -20999, inclusive

解决方案 »

  1.   

    不发commit估计是楼主所担心的回滚段不够,其实,只要并发操作不频繁的话,commit完了后立即在锁,也可以
      

  2.   

    以前和penitent讨论过时间点的问题,你可以参考一下
    http://expert.csdn.net/Expert/topic/1124/1124590.xml?temp=.7516291我想你可以先lock table,然后select,再commit,最后再从select中取到的数据慢慢备份。
      

  3.   

    这是一个实时系统,用户可能达到50万以上,并发操作不频繁是不可能的。to  xbin999(xbin):
        这位仁兄所说先lock table,然后select,再commit,最后再从select中取到的数据慢慢备份。请问select数据放在哪里?写文件吗?这样效率会不会太低?
      

  4.   

    xbin999(xbin)兄推荐的帖子我看过了,颇有所获。不过正如你所担心的,系统数据量太大了(将近千万级的记录数),很可能会发生快照太旧的情况。要是那样,系统停下来,我也就歇菜了。
      

  5.   

    不需要写文件,我不知你是怎么来实现备份的。我是写c++程序通过OTL来访问的,不过应该类似。相当于游标,你打开游标后,就应该有一个SCN点,此时可以commit释放,之后从游标中取数据,oracle取得的数据都应该是当时的映像。
    对于快照的问题我也不太清楚该如何避免,也许只有开大回滚段。