Oracle 原理:UNDO表空间
UNDO表空间又称为,回滚表空间,撤销表空间。Undo segment保存在UNDO 表空间,一个数据库可以有多个UNDO表空间,但是在同一时刻中,只能使用同一个UNDO表空间。
一、UNDO表空间的作用和机制
对于DML语句,只要修改了数据块,Oracle就会把原来修改前的数据块保留下来,存储在Undo segment (回滚段),当执行rollback操作时,把原先的数据重新覆盖回来。回滚段存放在UNDO表空间中。UNDO表空间的管理分为手动管理和自动管理。在11g中默认是采用自动管理模式。
UNDO的作用:把原来修改前的数据块保留下来。主要用于 一致性读,回滚事务,实例恢复。
一致性读的例子:用户 A 执行一个SQL查询操作select * from salary_tbl .需要1分钟。此时用户B执行了
update salary_tbl set salary=2000 where salary = 1000; 那么用户A查询的数据 salary 是1000 而不是2000,当前时刻查询的数据。如果UNDO表空间大小不足会把UNDO的空间进行覆盖,此时查询原来的数据就查询不到了,此时报ORA-1555错误:snapshoot too old
数据库coredown后的实例恢复:是在 SMON进程完成前滚并打开数据库以后发生,SMON进程回去查看UNDO SEGMENT第一个数据块中记录的事务表,在数据库宕机时将没有提交也没有回滚的事物全部回滚。
undo_retention :为UNDO块中的属性,决定了undo块中的数据至少保存多少秒。例如一个100秒的查询,undo_retention为50。如果在UNDO空间不足的情况下会优先重置过期的数据。如果没重置则还可以查询,如果重置了数据,那么此时100秒的查询操作就会报ORA-1555错误。
retention garentee : 为UNDO块中的属性,10g开始的新特性。确保 UNDO段中的数据未到 undo_retention 绝不会被覆盖。
所以利用UNDO表空间的优先顺序是: 空undo数据块 >undo_retention 到期的数据块 >未设置retention garentee的数据块 >报错
二、UNDO表空间的相关操作
查询表空间select * from dba_tablespaces. 。 只要字段 CONTENTS的值是UNDO 就是UNDO表空间 ,
查看UNDO表空间管理方式 : >> show parameter undo_management
创建UNDO表空间:
create undo tablespace temp2 tempfile
'D:\ORACLE\ORADATA\ORCL\undo2_01.dbf' size 10m autoextend on;
给表空间分配临时文件: alter tablespace <spacesname> add tempfile '<路径/文件名.dbf>' size [100m] autoextend on ;
查看默认UNDO表空间: show parameter undo
系统默认UNDO表空间切换 alter system set undo_tablespace = '<spacesname>';
启用[取消] retention garentee: alter tablespace <spacename> retention [ [garentee] or [nogarentee] ];
查询 retention garentee 状态: select tablespace_name,a.retention from dba_tablespaces a ;
更改undo_retention : alter system set undo_retention =1000;
查询UNDO 表空间使用情况 : select * from v$undostat ; (UNDOBLKS 使用的数据块 TXNCOUNT 事物数 BEGIN_TIME 和END_TIME UNDO生效时间和结束时间)
三、11g 的UNDO表空间的新特性
RMAN备份恢复UNDO表空间:是一个关于UNDO表空间的备份优化,在11g之前,都是自动把UNDO表空间的所有进行备份。现实的生产环境中,UNDO表空间的历史数据都是十分庞大的,备份用不上的数据不紧占空间,而且影响执行效率。RMAM备份:已经提交数据就不需要再备份了 。
Oracle 原理:UNDO表空间相关推荐
- oracle 10g磁盘管理,Oracle 10g UNDO表空间过大导致磁盘空间不足的解决
在Oracle 10g数据库的应用中,出现了UNDO表空间过大导致磁盘空间不足而崩溃的现象(ORA-30036: unable to extend segment by 8 in undo table ...
- [Oracle]理解undo表空间
[Oracle]理解undo表空间 一.回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中.一个事物只能将它的回退信息保存到一个回退段中, ...
- oracle 10g undo 管理,Oracle 10g undo表空间管理
一.oracle 9i起,有两种undo管理方式:AUM Automatic Undo ManagementMUN Manual Undo Management建议使用 AUM ,下面只讨论AUM 一 ...
- oracle迁移undo表空间,oracle切换undo表空间
Oracle里的回滚表空间在数据库使用一段时间后,undo表空间的dbf文件往往会增长到比较大,这个时候我们需要切换undo表空间 1.新建undo表空间 SQL> create undo ta ...
- oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ...
一.一次更新或者删除大量数据,这些数据需要保存在undo表空间中(直到提交或回滚后这些undo表空间中的数据才允许被覆盖),如果undo表空间不足,就会报ORA-30036错误. 下面是两种解决办法: ...
- Oracle undo 表空间管理
Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...
- 万答#18,MySQL8.0 如何快速回收膨胀的UNDO表空间
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 背 ...
- Oracle undo表空间
一.回滚段的介绍 在Oracle数据库中,当某个事务对数据库进行修改时,Oracle首先将数据库的原始值保存到一个回退段中,一个事务只能将它的信息保存到一个回滚段中,而多个并行事务可以使用同一个回滚段 ...
- Oracle undo表空间爆满的解决
1. 启动SQLPLUS,并用sys登陆到数据库. #su - oracle $>sqlplus / as sysdba 2. 查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间 ...
最新文章
- makefile学习(转载)
- 人工智能和机器学习在治安管理方面意义重大
- php 欺骗提交,欺骗PHP整数
- 宜信创始人唐宁:技术到处都是,关键看怎么用
- 曾经迷茫的起点,多年后终于明白了(续)
- C++使用StringPiece减少string类的拷贝
- Express全系列教程之(五):Express的中间件
- 在Linux系统中,使用useradd命令新建用户后,登录该用户时shell开头为$,不显示用户名和路径,如下:...
- js 自定义getClass函数实现获取dom的class 兼容火狐ie
- 记账系统推荐金蝶精斗云_金蝶精斗云好用的免费的财务做账软件有哪些?
- 深入浅出学大数据(一)大数据发展历程及大数据的简单介绍
- excel常用功能记录(不断更新)
- 用3DMAX制作《滚动的小球》
- vue在开发环境怎么兼容ie_vue 配置兼容ie浏览器
- 推荐系统 AB 测试
- 【毕业设计】46-基于单片机的智能卫浴系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)
- html设置鼠标指针形状为食指,cursor 把鼠标指针的形状弄成一只伸出食指的手
- java计算机毕业设计网上花店源码+系统+mysql数据库+LW文档+部署文件
- 操作系统——可变分区空闲空间管理
- DRAM的一些电压参数VDD VDDQ VPP剖析