undo表空间!

sunnyxjl 2009-02-07 08:25:54
undo表空间过小,会对数据库有何影响?
...全文
445 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
timeriver_wang 2009-03-02
  • 打赏
  • 举报
回复
各位大虾 太牛逼了
困扰多时的问题 终于解决了!
rockywu 2009-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hdhai9451 的回复:]
纠正:
回滚段表空间小确实影响速度,但不是排序和统计,而是事务回滚\事务恢复\读一致性等
空间小的时候,对提交比较大的数据数据交换空间不够而会慢,具体参考下面;


回滚段概述
  回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。
  
  回滚段的作用…
[/Quote]
说得十分好.....
Andy__Huang 2009-02-07
  • 打赏
  • 举报
回复
纠正:
回滚段表空间小确实影响速度,但不是排序和统计,而是事务回滚\事务恢复\读一致性等
空间小的时候,对提交比较大的数据数据交换空间不够而会慢,具体参考下面;



回滚段概述
  回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。
  
  回滚段的作用
  事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
  
  事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。

  读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。
xanaduwpz 2009-02-07
  • 打赏
  • 举报
回复
回滚段表空间
  
  i. 回滚段在系统中的作用
  当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
  回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
  
  ii. 回滚段的工作方式
  一个回滚表空间可以被划分成多个回滚段.
  一个回滚段可以保存多个会话的数据.
  回滚段是一个圆形的数据模型
  假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。
Andy__Huang 2009-02-07
  • 打赏
  • 举报
回复
当查询的数据比较大时有影响,undo表空间主要用于统计和排序
空间过小统计和排序会慢好多
又是违规昵称 2009-02-07
  • 打赏
  • 举报
回复
可能引起
ORA-01555 快照过旧
傻儿哥 2009-02-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hdhai9451 的回复:]
读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。
[/Quote]

顶下这段
47522341 2009-02-07
  • 打赏
  • 举报
回复
回滚段存储的是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操作释放需要的回滚空间(当然,如果回滚段允许扩展将不存在这个问题)。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧