undo表空间过小,会对数据库有何影响?

解决方案 »

  1.   

    当查询的数据比较大时有影响,undo表空间主要用于统计和排序
    空间过小统计和排序会慢好多
      

  2.   

    回滚段表空间
      
      i. 回滚段在系统中的作用
      当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
      回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
      
      ii. 回滚段的工作方式
      一个回滚表空间可以被划分成多个回滚段.
      一个回滚段可以保存多个会话的数据.
      回滚段是一个圆形的数据模型
      假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。
      

  3.   

    纠正:
    回滚段表空间小确实影响速度,但不是排序和统计,而是事务回滚\事务恢复\读一致性等
    空间小的时候,对提交比较大的数据数据交换空间不够而会慢,具体参考下面;回滚段概述 
      回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。 
      
      回滚段的作用 
      事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。 
      
      事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。   读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。 
      

  4.   

    回滚段存储的是dml操作的前映象;oracle执行dml操作的步骤是这样的:
    1,从磁盘文件中将数据读入数据缓冲区;
    2,当一个update或者delete执行的时候,将缓冲区中的数据块先写到回滚段中
    3,然后将缓冲区中的数据块对应记录修改过来(此时数据变成dirty block)
    4,如果这时执行rollback,系统后台进程将会使用回滚段中的数据块替换缓冲区中的数据块;
    5,如果执行的是commit,则oracle会释放对回滚段的占用。
    回滚段的管理方式是循环覆盖的。
    一个表空间中可以有多个回滚段,一个回滚段中允许有多个区。
    一个回滚段对应多个事务,每个事务只能使用一个回滚段。
    假设回滚段1有四个区;
    dml事务a占用了第一个区而一直没有commit;
    事务b占用第四个区,如果b中数据较多,而回滚段又不允许扩展,则事务b需要一直等待a释放第一个区才可以。在这里,如果一个update或者delete语句一直没有执行commit;
    那么事务将会保持对回滚段的持续占用,这时新的update操作执行前,必须等待前面的dml操作释放需要的回滚空间(当然,如果回滚段允许扩展将不存在这个问题)。
      

  5.   

    可能引起
    ORA-01555 快照过旧