问题是这样子的:数据表空间为A,UNDO表空间为B。现在要向A中的一个表中插入大量数据,假如数据总量为1G,那么持续插入的过程中,B的大小是以一种什么样的规律增长的呢?是不是也会增长1G的大小?
另外,能不能对B进行一些设置,让其以尽量慢的速度增长?

解决方案 »

  1.   

    GOOGLE上有篇文章
    http://tonykorn97.itpub.net/post/6414/68749
    貌似可以设置参数
      

  2.   

    如果UNDO表空间采用自动方式管理
    那么,ORACLE本身会以最优化的方式去扩展UNDO表空间,分配方式如下
    1、尽量为每一个事务分配一个UNDO段;
    2、把OFFLINE的段联机,并使用该段;
    3、如果不行则扩展UNDO段;
    4、如果没有空间,则会使用仍有空间的UNDO段;
    如果需要自己控制,需要自己添加UNDO段
      

  3.   

    Oracle数据库在回退、撤销或者改变数据所需要的维护数据库信息的一种手段。这里的数据库信息是指在数据库提交之前的记录的改变等事务信息。Undo 信息主要有以下用途:
    当系统发出rollback信息
    数据库恢复
    提供读一致性当系统发出rollback命令时,undo 信息通过记录的信息将数据库的改变恢复到commit之前的状态。在数据库恢复期间,undo信息被用来从redo log中撤销任何未提交到数据文件的事务。当一个用户在访问数据时,Undo记录通过维护访问数据的前镜像数据来保证当有其他用户改变相同数据时数据库的读一致性。undo里保存的是事务的前镜像。一般我们都是尽可能多的来保存更多undo的信息,已被我们通过这些信息来恢复数据。 比如flashback。 它也会用到undo里面的信息。 而且在插入大量数据的时候,中间肯定会有commit。 一旦commit了,就不能进行rollback。因此在commit之前产生的undo信息就可以覆盖掉。 所以我们会尽可能多的来保存undo里面的信息。 也就没有必要来刻意的限制undo的增长。 
    Oracle undo 回滚段管理
    http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx
    ------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    Q Q 群:62697716 
      

  4.   

    问题1
    UNBO表空间B的增长速度是由对数据表空间A的操作类型决定的
    如果你全都是插入操作 数据量是1G 那么估计UNDO的产生量不会有1G那么大问题2
    你的ORACLE版本应该不会太老吧
    自动还原表空间管理挺方便的 不用自己去手动分配一些回滚段
    只要把还原表空间设置大一些应该就没什么问题了
      

  5.   

    看了楼上的回复,我有些疑问:执行dml操作时,当没有commit的时候,撤销段大小会一直增加吗?如果数据量超过了内存容量,撤销段如果分配
      

  6.   

    如果大量DML不提交,貌似最后系统会报”回滚空间不足“
      

  7.   

    如果你一直不commit 就像楼上说的 当还原表空间空间不足时你的事务无法继续下去会报错
    如果你commit了
    那么oracle会循环使用还原表空间 覆盖以前已经commit了的数据这个还原的机制也不是一两句话说的清除的 
    还有UNDO_RETENTION这个参数你可以去百度一下看看什么意思
      

  8.   

    尽量分批提交,不要过于频繁,但也不要过于少,过少容易出来undo空间不足,过频繁容易出来著名的01555.