ORACLE_UNDO表空间的管理总结
Oracle隐藏参数:undo_autotune_
该参数可以在线修改:
[sql]
alter system set “_undo_autotune” = false;
标注一下:
如果undo不回收、resize可能是会报错的、我遇到很多次了、一般都是、重建个undo表空间、然后切换过去、把以前的干掉、通过这种方式来回收空间
from x$ksppi a,x$ksppcv b
where a.indx = b.indx
and a.ksppinm like '%_undo_autotune%'VALUE DESCRIPTION
-------------------- -------- ----------------------------------------
Oracle隐藏参数:_undo_autotune、一个吃力不讨好的活
虽然谈论那些隐藏的参数必定是无意义的、但那些隐藏的参数却是有价值的、我们不得不对那些隐藏的参数"心怀敬意"
AUM下、为什么我的Undo表空间只增长,不回收,现在都40多G了,还在长,是为什么啊?
为什么在系统不是很繁忙的时候会出现undo不够用的情况呢,如果说不够用,那在波峰时段应该问题更加严重才对?
......
有时候DBA会听到诸如上面的一些声音
因为有个参数叫_undo_autotune=true,undo_retention不再适用
Oracle会自行决定_undo_autotune undo_retention,然后试图增大undo tablespace
从10.2版本开始,oracle默认采用自动调整undo retention的方法
关于undo表空间大小设定的讨论
Oracle的undo数据就是事务中那些被更改,可是没有被提交的数据。
undo数据可以用来提供事务回滚,恢复事务或读一致性等特性。
undo表空间就是用来保留undo数据的。
undo表空间的大小取决于以下三方面的因素:1.Oracle初始化参数UNDO_RETENTIONundo_retention值表示一个undo数据块最久能在undo表空间中停留的时间,单位是秒,缺省值为900。
undo表空间资源是循环利用的,在undo_retention时间内,undo数据块的内容是不会被释放掉,即不会被新的undo数据覆盖。
所以设置停留时间越久,undo 表空间就越大。
2.每秒产生的undo数据块工作量很大,业务量大,事务很多时,每秒钟所产生undo数据块的个数越多,需要的undo 表空间越大。
select begin_time, end_time, undoblks from v$undostat;BEGIN_TIME END_TEME UNDOBLKS------------------ ------------------- ----------28-SEP-O8 13:43:02 28-SEP-O8 13:44:18 1928-SEP-O8 13:33:02 28-SEP-O8 13:43:18 147428-SEP-O8 13:23:02 28-SEP-O8 13:33:18 134728-SEP-O8 13:13:02 28-SEP-O8 13:23:18 16 28此语句记录了undo数据块的历史利用情况,每隔10分钟刷一次。
此结果表示记录前40分钟别离用到undo数据块19个、1474个、1347个、1628个;select addr,used_ublk from v$transaction;ADDR USED_UBLK--------- --------------5932F4A0 863此语句可以查看当前事务所需要数据块的个数,此结果表示,当前用户只有一个事务正在执行,此事务需要863个undo数据块。
ORACLE临时表空间总结
ORACLE临时表空间总结临时表空间概念临时表空间⽤来管理数据库排序操作以及⽤于存储临时表、中间排序结果等临时对象,当ORACLE⾥需要⽤到SORT的时候,并且当PGA中sort_area_size⼤⼩不够时,将会把数据放⼊临时表空间⾥进⾏排序。
像数据库中⼀些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会⽤到临时表空间。
当操作完成后,系统会⾃动清理临时表空间中的临时对象,⾃动释放临时段。
这⾥的释放只是标记为空闲、可以重⽤,其实实质占⽤的磁盘空间并没有真正释放。
这也是临时表空间有时会不断增⼤的原因。
临时表空间存储⼤规模排序操作(⼩规模排序操作会直接在RAM⾥完成,⼤规模排序才需要磁盘排序Disk Sort)和散列操作的中间结果.它跟永久表空间不同的地⽅在于它由临时数据⽂件(temporary files)组成的,⽽不是永久数据⽂件(datafiles)。
临时表空间不会存储永久类型的对象,所以它不会也不需要备份。
另外,对临时数据⽂件的操作不产⽣redo⽇志,不过会⽣成undo⽇志。
创建临时表空间或临时表空间添加临时数据⽂件时,即使临时数据⽂件很⼤,添加过程也相当快。
这是因为ORACLE的临时数据⽂件是⼀类特殊的数据⽂件:稀疏⽂件(Sparse File),当临时表空间⽂件创建时,它只会写⼊⽂件头部和最后块信息(only writes to the header and last block of the file)。
它的空间是延后分配的.这就是你创建临时表空间或给临时表空间添加数据⽂件飞快的原因。
另外,临时表空间是NOLOGGING模式以及它不保存永久类型对象,因此即使数据库损毁,做Recovery也不需要恢复Temporary Tablespace。
oracle 工作总结
oracle 工作总结
《Oracle 工作总结》。
在过去的一段时间里,我一直在公司的Oracle团队工作。
在这段时间里,我学到了很多关于Oracle数据库管理和优化的知识,也积累了丰富的工作经验。
在这篇文章中,我将对我的工作进行总结,并分享一些我在Oracle工作中的收获和体会。
首先,我要谈谈我在Oracle数据库管理方面的工作。
在这个岗位上,我负责监控数据库的运行状态,确保数据库的稳定性和安全性。
我学会了如何定期备份数据库,以防止数据丢失。
我还学会了如何优化数据库的性能,通过调整参数和索引来提高数据库的查询效率。
在这个过程中,我遇到了很多问题,但通过不断学习和实践,我逐渐掌握了数据库管理的技巧和方法。
其次,我还要谈谈我在Oracle数据库优化方面的工作。
在这个岗位上,我负责分析数据库的性能问题,并提出优化建议。
我学会了如何通过SQL调优来提高数据库的查询速度,如何通过合理的索引设计来减少数据库的IO负载。
我还学会了如何通过分区表和分区索引来提高数据库的并发处理能力。
通过这些工作,我深入了解了Oracle数据库的优化原理和方法,也提高了自己的技术水平。
总的来说,我的Oracle工作经历让我受益良多。
我不仅学会了数据库管理和优化的技术,也锻炼了自己的分析和解决问题的能力。
我相信,在未来的工作中,我会继续努力学习,不断提高自己的技术水平,为公司的发展贡献自己的力量。
感谢公司给予我这次宝贵的工作机会,我会继续努力,不辜负公司的期望。
Oracle-undo-表空间管理
Oracle-undo-表空间管理Oracle的Undo表空间管理是Oracle数据库中非常重要而又基础的管理工作之一。
因为数据库中的Undo表空间与事务有着紧密的联系,影响着数据库的性能和稳定性。
本文将对Oracle的Undo表空间管理进行详细介绍,包括Undo表空间的概念、作用、管理方法、优化等方面。
一、Undo表空间的概念Undo表空间是用来存储Oracle数据库中操作的回滚信息,主要的作用是进行事务的回滚和恢复。
在Oracle数据库中,事务的ACID属性可以保证数据的完整性和一致性,而Undo表空间就是为了保证事务的ACID属性而存在的。
在Oracle数据库中,Undo表空间分为两种类型:System Undo表空间和User Undo表空间。
系统Undo表空间是由系统自动创建的一个表空间,用于存储系统级的回滚信息,用户不能自己创建或删除该表空间。
而用户Undo表空间则是由用户自己创建的,用来存储用户级别的回滚信息,一个数据库中可以有多个用户Undo表空间。
二、Undo表空间的作用Undo表空间的作用非常重要,它主要用来完成以下几个方面的功能:1. 事务的回滚当某个事务需要回滚时,Oracle会将该事务所做的修改操作写入到Undo表空间中,然后撤销这些操作来回滚事务。
因此Undo表空间的存储能力和速度直接影响着Oracle数据库回滚事务的性能和效率。
2. 数据库恢复当数据库需要恢复时,Oracle会利用Undo表空间中的回滚信息将数据库恢复到特定的时间点。
因此Undo表空间存储的时间范围和存储能力对数据库恢复能力有着直接的影响。
3. MVCC机制在Oracle数据库中,MVCC(多版本并发控制)机制是一种用来实现并发控制的技术,它需要利用Undo表空间中的回滚信息来实现数据的版本控制。
当多个事务同时对一个数据进行操作时,Undo表空间就派上用场了。
三、Undo表空间的管理方法为了更好地管理Undo表空间,我们需要掌握以下几种管理方法:1. 创建Undo表空间在Oracle数据库中,可以通过语句CREATE UNDO TABLESPACE来创建Undo表空间。
UNDO表空间详解
UNDO表空间详解目录UNDO表空间详解 (1)一、描述 (2)二、作用 (3)1. 回退事务 (3)2. 读一致性 (3)3. 事务恢复 (4)4. 倒叙查询(FlashBack Query) (4)三、UNDO参数 (5)1. UNDO_MANAGEMENT (5)2. UNDO_TABLESPACE (5)3. UNDO_RETENTION (5)四、UNDO表空间操作 (6)1. 建立UNDO表空间 (6)2. 修改UNDO表空间 (7)3. 切换UNDO表空间 (7)4. 删除UNDO表空间 (8)五、其他操作(段、区、块) (8)1. UNDO表空间及大小: (8)2. undo段 (9)3. undo段中区的状态: (10)六、统计信息 (11)1. 显示UNDO表空间统计信息 (11)2.显示UNDO段统计信息. (12)3.显示UNDO区信息 (12)4.显示活动事务信息. (13)5. V$ROLLSTAT中的常用列 (13)七、参考文档: (14)附件1: (14)附件2: (22)一、描述undo表空间是Oracle特有的概念,undo表空间中会自动分配undo段,这些undo段用来保存事务中的DML语句的undo信息,也就是来保存数据在被修改之前的值。
在rollback,实例恢复(前滚),一致性读CR块的构造时会使用到undo信息,由于undo的引入,从而Oracle 的select语句实现一致性读时,不需要任何锁。
undo表空间和其它表空间有很多类似的地方:undo数据块也会被读到buffer cache缓存起来,修改时也会产生redo log,数据也会写回到undo表空间的磁盘上。
所以崩溃后,undo块的buffer cache也会恢复过来。
Undo:是基于回滚的,当数据被误修改时,可以从修改的新状态回退到老状态,实现事物回滚,相当于撤销操作。
是回滚,就像倒录音带一样,把走过的路反向再走一遍回到原点。
UNDO表空间详解
Oracle 10g中UN DO数据的作用及UN DO表空间的常用操作是本文我们主要要介绍的内容,UNDO数据也称为回滚(ROLLBA CK)数据,它用于确保数据的一致性.当执行DML操作时,事务操作前的数据被称为U NDO记录.UNDO段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据。
UNDO数据的作用:1.回退事务当执行DML操作修改数据时,UNDO数据被存放到U N DO段,而新数据则被存放到数据段中,如果事务操作存在问题,旧需要回退事务,以取消事务变化.假定用户A执行了语句U P DATE emp SET sal=1000 WHEREempno=7788后发现,应该修改雇员7963的工资,而不是雇员7788的工资,那么通过执行R OLLB ACK语句可以取消事务变化.当执行ROL LBACK命令时,oracle会将UND O段的UN DO数据800写回的数据段中.2.读一致性用户检索数据库数据时,o racle总是使用用户只能看到被提交过的数据(读取提交)或特定时间点的数据(SELECT语句时间点).这样可以确保数据的一致性.例如,当用户A执行语句UPD ATE emp SET sal=1000 WHEREempno=7788时,U NDO记录会被存放到回滚段中,而新数据则会存放到EM P段中;假定此时该数据尚未提交,并且用户B执行SELE CT sal FROM emp WHEREempno=7788,此时用户B将取得UND O数据800,而该数据正是在UNDO记录中取得的.3.事务恢复事务恢复是例程恢复的一部分,它是由ora cle server自动完成的.如果在数据库运行过程中出现例程失败(如断电,内存故障,后台进程故障等),那么当重启oracle server时,后台进程SM ON会自动执行例程恢复,执行例程恢复时,oracl会重新做所有未应用的记录.回退未提交事务.4.倒叙查询(FlashB ack Query)倒叙查询用于取得特定时间点的数据库数据,它是9i新增加的特性,假定当前时间为上午11:00,某用户在上午10:00执行UP DATEemp SET sal=3500 WHEREempno=7788语句,修改并提交了事务(雇员原工资为3000),为了取得10:00之前的雇员工资,用户可以使用倒叙查询特征.使用UNDO参数1.UNDO_M ANAGE MENT该初始化参数用于指定U N DO数据的管理方式.如果要使用自动管理模式,必须设置该参数为AUT O,如果使用手工管理模式,必须设置该参数为MAN UAL,使用自动管理模式时,oracle会使用un do表空间管理und o管理,使用手工管理模式时,oracle会使用回滚段管理un do数据,需要注意,使用自动管理模式时,如果没有配置初始化参数U NDO_TABLE SPACE,oracle会自动选择第一个可用的UNDO表空间存放U NDO数据,如果没有可用的UNDO表空间,oracle会使用SY STEM回滚段存放U N DO记录,并在ALTE R文件中记载警告.2.UNDO_T ABLES PACE该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UN DO管理模式时,通过配置该参数可以指定例程所要使用的UND O表空间.在RAC(Real Applic ation Cluste r)结构中,因为一个UN DO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的U NDO表空间.3.UNDO_R ETENT ION该初始化参数用于控制U N DO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定un do数据的保留时间,从而确定倒叙查询特征(Flashb ack Query)可以查看到的最早时间点.建立UNDO表空间UNDO表空间专门用于存放UND O数据,并且在UND O表空间尚不能建立任何数据对象(表,索引,簇)1.使用CREA TE DATABA SE命令建立UNDO表空间.当使用CRE ATE DATABA SE命令建立数据库时,通过指定UN DO TABLES PACE选项,可以建立UN DO表空间.示例如下:1.CREATE DATABA SE db012.…3.UNDO TABLES PACEundotb s_014.DATAFI LE '/opt/oracle/oradat a/ge01/UNDOTB S1.dbf' SIZE 30M;注意:UNDO TABLES PACE子句不是必须的,如果使用自动U NDO管理模式,并且没有指定该子句,那么建立数据库时会自动生成名为U N DOTB S1的UN DO表空间.2.使用CREA TE UNDO TABLES PACE命令建立UN DO表空间.1.create undo tables paceundotb s2 datafi le '/opt/oracle/oradat a/ge01/UNDOTB S2.dbf' size 100m reuseautoex tendon next 50m maxsiz e 5000m;修改UNDO表空间使用ALTE R TABLES PACE命令修改UN DO表空间.当事务用尽了U NDO表空间后,使用ALTE R TABLES PACE… ADD DATAFI LE增加数据文件。
oracle的undo使用原理
oracle的undo使用原理
Oracle数据库中的Undo使用原理是非常重要的,它涉及到数据库事务的一致性和并发控制。
Undo是Oracle数据库中用来存储事务变化前的数据副本的机制,它可以用来回滚事务,提供一致性读取和支持多版本并发控制。
在Oracle数据库中,当一个事务对数据进行了修改,数据库会首先将修改前的数据保存到Undo表空间中,然后再进行实际的数据修改。
这样做的好处是,如果事务需要回滚,数据库可以通过Undo 中的数据副本将数据恢复到事务开始之前的状态。
这就保证了数据库事务的一致性。
另外,Undo也支持多版本并发控制。
当一个事务对数据进行修改时,其他事务可能还在读取这个数据,这时候就需要保证读取的数据是一致的。
通过Undo中的数据副本,数据库可以提供一致性读取,即使数据正在被修改,读取操作也不会受到影响。
Undo的使用原理也与数据库的回滚段和事务日志密切相关。
当一个事务需要回滚时,数据库会根据Undo中的数据副本和事务日志将数据恢复到原来的状态。
这就保证了数据库的一致性和可靠性。
总之,Oracle数据库中的Undo使用原理是非常重要的,它保证了数据库事务的一致性和并发控制,是数据库系统中不可或缺的一部分。
对于数据库管理员和开发人员来说,了解Undo的使用原理可以帮助他们更好地管理数据库事务和优化数据库性能。
ORACLERAC11G添加以及删除UNDO表空间
ORACLERAC11G添加以及删除UNDO表空间在⽣产环境上,由于闪存盘的容量有限,现在需要将闪存盘⾥⾯的UNDO表空间,替换到⾮闪存的磁盘⾥⾯。
磁盘的使⽤情况如下:表空间使⽤情况如下:RAC两个节点占⽤将近167G的空间。
操作步骤如下:在其他磁盘新建RAC两个节点的undo表空间,然后设置成默认的UNDO表空间,后⾯再新建名称⼀模⼀样的UNDO表空间,切换回来(之所以要切换回⼀样的UNDO表空间,是防⽌某些应⽤程序写死)。
操作如下,RAC两个节点:⼀、新建UNDO表空间节点1:create undo tablespace undo11 datafile '+HDATADG' size 10g autoextend on next 2g;alter system set undo_tablespace='UNDO11' SCOPE=BOTH;节点2:create undo tablespace undo22 datafile '+HDATADG' size 10g autoextend on next 2g;alter system set undo_tablespace='UNDO22' scope=both;⼆、删除原UNDO表空间drop tablespace UNDOTBS1 including contents and datafiles;drop tablespace UNDOTBS2 including contents and datafiles;三、新建原UNDO表空间原名称的UNDO表空间,并切换,以及删除步骤⼆新建的UNDO表空间create undo tablespace UNDOTBS1 datafile '+HDATADG' size 10g autoextend on next 2g; alter tablespace UNDOTBS1 add datafile '+HDATADG' size 10g autoextend on next 2g;create undo tablespace UNDOTBS2 datafile '+HDATADG' size 10g autoextend on next 2g; alter tablespace UNDOTBS2 add datafile '+HDATADG' size 10g autoextend on next 2g;切换回来UNDO表空间:alter system set undo_tablespace='UNDOTBS1' SCOPE=BOTH;alter system set undo_tablespace='UNDOTBS2' scope=both;删除步骤⼆建的UNDO表空间:drop tablespace UNDO11 including contents and datafiles;drop tablespace UNDO22 including contents and datafiles;查看磁盘空间:⽴马闪存磁盘空间变多了。
undo表空间
undo表空间undo表空间是指用于存储数据库中被修改过的数据信息的空间。
在数据库中,undo表空间是非常重要的,它可以用于回滚事务、恢复被删除的数据以及在查询时提供一致性视图等功能。
因此,undo表空间的管理和维护对于保障数据库的安全性和可靠性非常重要。
首先,在创建数据库时就要为其分配足够的undo表空间以保证其正常运行。
在使用过程中,还应该及时监控undo表空间的使用情况,以便防止空间不足导致系统出现故障。
如果undo表空间过小,就需要扩展其大小。
扩展undo表空间的方法有两种:一种是增加undo表空间的数据文件,另一种是增加表空间中的数据文件大小。
在增加undo表空间后,需要使用ALTER TABLESPACE语句来将新的数据文件加入到undo表空间中。
除了扩展undo表空间,还需要进行定期的清理和管理。
undo表空间中存储的历史数据随着时间的推移不断增多,而这些数据可能已经没有作用了。
因此,需要定期清除过期的undo数据。
可以使用命令ALTER SYSTEM来清除undo表空间中旧的undo数据,以释放空间。
此外,对于undo表空间中的未提交事务,也需要及时清理以避免增加其大小。
在进行undo表空间管理时,还需要注意一些其他的问题。
例如,在备份数据库时需要确保undo表空间中的数据也得到备份,以便在恢复数据时协调事务。
此外,在数据库中执行长时间运行的操作时,可能会导致undo表空间无法及时释放,因此需要特别注意。
总之,undo表空间的管理和维护是数据库管理中的重要任务之一。
只有通过定期监控、清理和扩展空间等措施,才能保障数据库的安全性和可靠性,确保其正常运行。
oracle undo_retention 参数
oracle undo_retention 参数详解`undo_retention` 是Oracle 数据库中的一个参数,它指定了UNDO 表空间中回滚段保留Undo 数据的时间长度,以秒为单位。
这个参数的作用是控制UNDO 数据的保留时间,确保长时间运行的事务有足够的时间来完成,从而防止由于UNDO 数据不足而导致的回滚段过期。
以下是`undo_retention` 参数的详细说明:1. undo_retention 值的含义-默认值:`undo_retention` 的默认值是900 秒(15 分钟)。
-取值范围:参数的取值范围是0 到2147483647 秒(约68 年)。
2. 作用和影响-UNDO 表空间的大小:`undo_retention` 的值会影响UNDO 表空间的大小。
长时间运行的事务需要更长的UNDO 数据保留时间,因此需要更大的UNDO 表空间。
-长事务处理:当`undo_retention` 设置得足够长时,可以确保长时间运行的事务有足够的时间来完成,从而防止回滚段过期。
-系统性能:如果`undo_retention` 设置得太长,可能导致UNDO 表空间的资源被占用过多,从而影响系统性能。
3. 设置和调整-动态调整:`undo_retention` 可以通过`ALTER SYSTEM` 或者`ALTER SESSION` 语句动态调整。
例如:```sqlALTER SYSTEM SET UNDO_RETENTION = 1800; --将undo_retention 设置为1800 秒(30 分钟)```-退避策略:当长时间运行的事务发现回滚段空间不足时,系统可能会选择采用退避策略,将`undo_retention` 增加到满足事务需要的水平。
4. 注意事项-表空间大小:确保分配给UNDO 表空间的大小足够满足事务的需要,特别是当`undo_retention` 设置得较大时。
undo表空间使用案例分析(UNDOTBS1使用率100%,enq:US
undo表空间使用案例分析(UNDOTBS1使用率100%,enq:US问题描述:近几天发现Oracle10.2.0.4数据库undo tablespace表空间使用率很高(最高时达到100%),报警系统频繁报障undo tablespace 表空间使用率过高。
TABLESPACE_NAME TOTAL USED FREE PUSE D PFREE----------------- ---------- ---------- ---------- ---------- ----------UNDOTBS1 6141 % %查询所有表空间使用情况(今天发现自己创建的表空间在使用完的情况,这个查询语句或者其它查询语句查不出已经使用完的表空间,只能自己删除掉一些使用该表空间的用户,以便释放自己创建的表空间)SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTE S) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOT TE_MBFROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAMEORDER BY 1;问题分析2.1 业务系统影响undo tablespace表空间使用率达到100%时,没有业务系统用户反映系统出现表空间不能扩展的报错(ORA-30036),但曾经出现过快照过旧报错(ORA-01555)。
深度理解Oracle10g中UNDO_RETENTION参数的使用
每一中数据库都需要有一种管理回滚或者撤销数据的方法。
当一个DML发生以后,在用户还没有提交(COMMIT)改变,用户不希望这种改变继续保持,需要撤销所做的修改,将数据回退到没有发生改变以前,这时就需要使用一种被称为撤销记录的数据。
使用撤销记录,我们可以:1、当使用ROLLBACK语句时回滚事务,撤销DML操作改变的数据2、恢复数据库3、提供读取的一致性4、使用Oracle Flashback Query分析基于先前时间点的数据5、使用Oracle Flashback特性从逻辑故障中恢复数据库Oracle10g中的自动撤销管理(AUM)在Oracle10g中对于回滚段的管理可以通过配置参数而实现自动管理。
为启用撤销空间的自动管理,首先必须在init.ora中或者SPFILE文件中指定自动撤销模式。
其次需要创建一个专用的表空间来存放撤销信息,这保证用户不会在SYSTEM 表空间中保存撤销信息。
此外还需要为撤销选择一个保留时间。
如果需要实现AUM,需要配置以下3个参数:UNDO_MAMAGEMENTUNDO_TABLESPACEUNDO_RETENTION查看初始化参数的设置:SQL> show parameter undo_tablespace;NAME TYPE VALUE------------------------------------ ----------------------------------undo_tablespace string UNDOTBS1SQL> show parameter undo_management;NAME TYPE VALUE------------------------------------ ----------------------------------undo_management string AUTOSQL> show parameter undo_retention;NAME TYPE VALUE------------------------------------ ----------------------------------undo_retention integer 900SQL>初始化参数的描述:Initialization Parameter DescriptionUNDO_MANAGEMENT If AUTO, use automatic undo management. The default is MANUALUNDO_TABLESPACE An optional dynamic parameter specifying the name of an undo tablespace. This parameter should be used only when the database has multiple undo tablespaces and you want to direct the database instance to use a particular undo tablespace.UNDO_RETENTION The UNDO_RETENTION parameter is ignored for a fixed size undo tablespace. The database may overwrite unexpired undo information when tablespace space becomes low.For an undo tablespace with the AUTOEXTEND option enabled, the databaseattempts to honor the minimum retention period specified byUNDO_RETENTION. When space is low, instead of overwriting unexpired undo information, the tablespace auto-extends. If the MAXSIZE clause is specified for an auto-extending undo tablespace, when the maximum size is reached, the database may begin to overwrite unexpired undo information.如果将初始化参数UNDO_MANAGEMENT设置为AUTO,则Oracle10g将启用AUM。
oracle undo表空间回收机制
oracle undo表空间回收机制文档课题:UNDO表空间使用率过高的处理方式. 应用场景:UNDO表空间使用率过高,想必很多数据库管理员都遇到过此问题,接下来了解undo表空间的相关知识. 1、undo块使用情况SQL>select status,sum(bytes/1024/1024) from dba_undo_extents group by status; STATUS SUM(BYTES/1024/1024) --------------------------------------EXPIRED 21.25 UNEXPIRED 10 2、当前undo 空闲SQL> selecttablespace_name,sum(bytes/1024/1024) from dba_free_space wheretablespace_name='UNDOTBS1' group by tablespace_nameTABLESPACE_NAME SUM(BYTES/1024/1024) ----------------------------------------UNDOTBS1 157.75 3、表空间情况SQL>set line 200 SQL>col GRAPH for a50 SQL>col tablespace for a20 SQL> select total.ts tablespace。
total.mb total_mb。
t o_char(trunc(total.mb -nvl(free.mb,0),2),'fm999990.0999') used_MB。
NVL(free.mb,0) free_mb。
DECODE(total.mb,NULL,0,NVL(ROUND((total.mb -free.mb)/(total.mb)*100,2),100)) pct_used。
UNDO 表空间满了的处理方法
表空间已更改。
4、删除原来的UNDO表空间:
SQL> drop tablespace UNDO incl ing contents AND DATAFILES CASCADE CONSTRAINTS ;
表空间已删除。
如果只是drop tablespace UNDO ,则只会在删除控制文件里的记录,并不会物理删除文件。
表已创建。
SQL> begin
2 for i in 1 .. 100000 loop
3 insert into dba val s(i);
4 commit;
5 end loop;
6 end;
7 /
begin
*
第 1 行出现错误:
4 commit;
5 end loop;
6 end;
7 /
PL/SQL 过程已成功完建立新的表空间UNDOTBS2
SQL> CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE ‘F:\backup\undo03.dbf’ size 100M reuse;
二. UNDO 表空间满了的处理方法
2.1 先模拟UNDO 表空间满的情况
SQL> alter system set undo_retention=10800; — 3个小时
系统已更改。
SQL> create undo tablespace undo datafile ‘F:\backup\undo.dbf’ size 1m ;
Oracle Undo和Redo
Oracle UndoUNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作执行前的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的。
从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚段比较复杂,所有oracle database 10g 已经完全丢弃用回滚段,并且使用UNDO表空间来管理UNDO数据。
回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完整性的一段磁盘存储区域。
当一个事务开始的时候,会首先把变化前的数据和变化后的数据先写入日志缓冲区,然后把变化前的数据写入回滚段,最后才在数据缓冲区中修改(日志缓冲区内容在满足一定的条件后可能被写入磁盘,但在事务提交的时候日志必须写入磁盘,而数据缓冲区中的数据依赖于检查点的发生和DBWR进程的活动)。
Rollback是一个代价昂贵的操作,如果一个系统的事务回退率过高,应该检查系统是否正常或者程序设计思路是否存在问题。
查询数据库启动依赖的事务回退率,如果发现太高,一定要引起重视。
--查询回退率的sqlSELECT NAME, VALUE FROM v$sysstat WHERE NAME IN ('user commits','transaction rollbacks');关于回滚段的数据,如果是delete操作,则回滚段将回记录整个行的数据;如果是update,则只记录被修改了的字段的变化前的数据(前映像);如果是insert,则只记录插入记录的rowid。
所以,假如commit,那么回滚段中简单标记该事务已经提交;假如rollback,则操作是delete 的话,把回滚段中的数据重新写回数据块,操作是update的话则把变化前的数据修改回去,操作是insert的话则根据rowid把该记录删除。
undo表空间
undo表空间作为数据库管理系统中重要的一部分,undo表空间在数据库运行中扮演着至关重要的角色。
其主要功能是用于处理各种类型的数据库事务,包括回滚、恢复等操作。
本文将围绕undo表空间展开详细的介绍和分析,从原理、使用、管理等不同角度,为读者提供更加完整的认识和了解。
一、undo表空间原理介绍在数据库中,所有的修改操作都是通过事务完成的。
每个事务的执行过程都会被记录到事务日志中,包括在执行过程中所做的所有修改。
这种记录方式可以帮助保证数据库的一致性和完整性。
但是,在某些情况下,可能需要将已经执行的事务进行回滚或者崩溃的时候进行恢复。
这时候就需要使用到undo表空间。
简单来说,undo表空间就是用来存储执行事务中所做的修改的历史记录。
每个修改都会被记录在undo表空间中,这样在进行回滚操作的时候,就可以通过读取这些历史记录,将数据库的状态恢复到回滚前的状态。
同时,在数据库崩溃之后,也可以通过undo表空间进行恢复操作,使得数据库状态回到崩溃前的状态。
二、undo表空间使用方法在实际使用中,undo表空间主要用于以下两种情况:1. 回滚事务:当某个事务发生错误或者用户感到不满意时,可能需要进行回滚操作,将数据库恢复到之前的状态。
这时,就需要使用undo表空间中记录的历史修改记录来进行回滚。
2. 恢复数据库:在数据库崩溃的时候,可以使用undo表空间来恢复数据库。
具体的,可以使用日志记录中的信息,配合undo表空间中的历史记录,来恢复数据库到崩溃前的状态。
这样可以保证数据库的完整性和一致性。
三、undo表空间管理在数据库管理中,undo表空间的管理也是至关重要的。
主要包括了以下几个方面:1. 分配undo表空间:首先,需要确定数据库中是否需要创建undo表空间。
如果需要的话,需要进行undo表空间的分配。
在分配的时候,需要考虑到数据库的大小、负载和需求等因素,进行合理的分配。
2. 自动管理undo表空间:在执行大量事务的时候,undo表空间可能会被占满,导致运行不良。
undo介绍及具体使用
--undo 的作用oracle 会将数据块上修改之前的数据【前映像】保存在回滚段中,这样当我们需要进行回滚(rollback)的时候就很容易能从回滚段中将之前的数据取出来将数据块上面的数据还原回来(数据回滚、闪回功能、和在数据库意外宕机之后都需要使用undo数据进行回滚操作)一个实例只能有一个undo表空间【RAC每个实例一个】 oracle 绝对禁止一个用户查看另一个用户未提交的事务数据。
--undo表空间满了怎么办?处理方法有两种:1添加undo表空间数据文件2重新创建新的undo表空间替换默认的1查看当前UNDO 表空间(例如现在只有一个undotbs1)SQL> show parameter undo;SQL> select * from dba_data_files where tablespace_name like'UNDOTBS*';2创建新的undo 表空间SQL> create undo tablespace UNDOTBS2 datafile'/oracle/oradata/itpuxdb/untotbs02.dbf' size100m autoextend off extent management local;3用新创建的undotbs2替换默认的undo表空间SQL> alter system set undo_tablespace=undotbs2 scope=both;SQL> show parameter undo4删除原来被替换的undotbs1SQL> drop tablespace UNDOTBS1 including contents and datafiles;注意:在删除的时候如果正在使用的那么写查询当前表空间有哪些事务是仍然在活动的如果不需要的可以手动kill 或者等它做完。
处理方法:SQL> select * from dba_2pc_pending; 查询出来SQL> commit force‘local_tran_id’; 强制提交--ORA-01555快照过旧错误:当我们的事务需要使用undo 来构建的时候,而此时对应的undo已经不存在就会出现ORA-01555原因是SQL 语句执行时间太长,或者undo 表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL 过程中进行一致性读时,SQL执行后修改的前镜像(既UNDO数据) 在UNDO 表空间中已经被覆盖,不能构造一致性读块(CR blocks)。
undo表空间
undo表空间Oracle数据库中的undo表空间是用于维护数据一致性和回滚操作的关键组件之一。
在Oracle中,当进行DML操作(如INSERT、UPDATE和DELETE)时,系统需要记录这些操作产生的“更改记录”,以便在需要时可以回滚这些操作。
这些更改记录被存储在undo表空间中,并且通过undo日志进行备份。
此外,undo表空间还用于支持事务的并发控制。
在Oracle中,多个用户可以同时执行事务,但是这些事务可能会尝试对同一行进行更改。
如果这些更改都被接受,就会导致数据不一致。
因此,Oracle使用并发控制机制来避免这种情况的发生。
undo表空间是这种机制的核心组件之一。
当一个用户对数据进行更改时,Oracle会在undo表空间中记录该更改。
如果另一个用户尝试对同一行进行更改,Oracle会检索undo表空间中记录的原始值,并使用这个值来进行比较和决策。
由于undo表空间是Oracle数据库中的关键组件之一,因此对其进行管理和优化非常重要。
以下是一些掌握undo表空间的重点内容和技巧。
1. undo表空间的创建和管理在Oracle中,可以使用CREATE UNDO TABLESPACE语句来创建undo表空间。
这个语句类似于创建其他类型的表空间的语句,但是需要指定undo日志的文件路径。
例如:CREATE UNDO TABLESPACE undo_data01DATAFILE'/u01/app/oracle/oradata/ORCL/undo_data01.dbf' SIZE100M;在创建undo表空间时,需要注意以下几点:- 通常建议将undo表空间单独存储在硬盘的不同位置,并使用RAID或其他技术来保证数据的安全性和可靠性。
- 可以使用UNDO_RETENTION参数来控制undo数据的保留时间,以避免出现ORA-01555错误。
这个参数的值表示undo数据的保留时间,以秒为单位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
undo表空间的管理:1、undo作用2、undo管理模式3、undo参数4、undo表空间的建立删除作用:事务回退、事务恢复、读一致性、闪回数据读一致性:用户看到的所有数据都是别人已经提交的或者是自己操作过但还没提交的事务恢复、前滚:oracle重启时会恢复到没有commit的状态,系统监控进程读取undo表空间段头查找已提交事务,在日志文件中找到记录,然后实例恢复。
事务回退:用户可以用roolback回滚没有commit的数据闪回(flash back):任何操作都会把数据的操作保存到undo,运用undo表空间的记录,来恢复近期的数据。
9i以后版本才支持管理模式:现在版本一般用自动管理新手最好自动管理show parameter undo_m参数中的undo_management 定义了是否自动管理。
show parameter undo_t查看undo_tablespace参数指定用的是哪个表空间undo表空间中的段分三种:系统段----------系统表空间镜像数据非系统段-----------非系统表空间的镜像数据deferred段---------临时段---任何表空间脱机后,所有变化的数据存入undo临时段,当再次联机时在从undo写入查看段:SQL> select * from v$rollname;USN NAME---------- ------------------------------0 SYSTEM1 _SYSSMU1$2 _SYSSMU2$3 _SYSSMU3$4 _SYSSMU4$5 _SYSSMU5$6 _SYSSMU6$7 _SYSSMU7$8 _SYSSMU8$9 _SYSSMU9$10 _SYSSMU10$其中0为系统段,其他为非系统段,分公有还是私有默认都是公有,oracle中至少要有一个非系统段。
查看文件状态SQL> select status,enabled from v$datafile;查看deferred段select segment_name,segment_type from dba_segments where segment_type like '%defe%' 只有某个表空间脱机时,就会产生deferred段,一旦online后deferred段消失参数:SQL> show parameter undo_NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBS1parameter_undo_tablespaceundo表空间设置,默认存放1个系统段,10个非系统段,还有表空间在offline时system 表空间去生成一个类型为deferred rollback段,online时自动消失。
parameter_undo_retention 单位是秒设置undo保存数据的最多时间,默认是900秒(15分钟);undo表空间的建立删除:在建数据库时:create databaseundo tablespace <> datafile <> size <>;以后建立时:create smallfile|bigfile undo tablespace <> datafile <> size <> <>;例子:create undo tablespace undo datafile '/u01/oracle/undo.dbf' size 10m autoextend on;不过这个表空间没有用删除:undo_tablespace 参数指定的表空间是不能删除的。
要想删除必须先修改undo_tablespace参数;且undo中的保留的段必须脱机,然后才能删除(需要重启);更改undo表空间create undo tablespace undo datafile '/u01/oracle/undo.dbf' size 10m autoextend on;alter system set undo_tablespace =undo;默认时参数文件也已经修改,不需要改参数文件undo大小估算:undo space =(undo_retention *(undo blocks per second * db block size ))+db block_size查询所需参数:undo blocks per second这个值需要查询v$undostat----------undoblksselect sum(undoblks)/sum((end_time-begin_time)*10800) from v$undostat;SUM(UNDOBLKS)/SUM((END_TIME-BEGIN_TIME)*10800)----------------------------------------------.190424863SQL> show parameter undo_reNAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_retention integer 900SQL> show parameter block_sNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_block_size integer 8192最后用着几个值来算。
也可以用下面这一个语句来计算:select (rt*(ups*bl)+bl)/1024/1024/1024 GB from (select value rt from v$parameter where name =’undo_retention’),(select (sum(undoblks)/sum((end_time-begin_time)*10800)) ups from v$undostat),(select value bl from v$parameter where name=’db_block_size’)查看当前undo表空间已分配的大小undo表空间默认的id为2查看区的分配已经分配到哪里select max(block_id) from dba_extents where file_id=2;MAX(BLOCK_ID)-------------2185结果为一个数字然后乘以块的大小SQL> show parameter db_bNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_block_buffers integer 0db_block_checking string FALSEdb_block_checksum string TRUEdb_block_size integer 8192SQL> select 2185*8/1024 from dual;2185*8/1024-----------17.0703125减小undo表空间alter database datafile 2 resize 300m;应大于默认的250m;undo的查询视图:v$rollstat v$rollname dba_segments dba_rollback_segs v$transactionv$rollname:当前正在用的dba_rollback_segs:系统中所有的查询回滚段的增用情况:命中率计算,自动管理不需考虑select ,b.gets,b.waits, (b.waits/b.gets)*100 ratio from v$rollname a,v$rollstat b where n=n;若ratio 有大于2的代表有争用现象,需要增加undo的段,若是自动管理则问题不大。
事务回退只能从point s3但之前的状态,而不能以后的时间,事务提交DML---- ---------人为commitDDL -------------自动结束事务如果执行了insert update delete 后马上执行了DDL DCL 则insert update 和delete也会自动提交事务开始-------------》是在一个会话产生的事务结束-------------》是在当前会话下碰到自动或手工结束事务操作就结束已经存在的事务了闪回数据delete empcommit查询1秒前的数据select * from emp as of timestamp sysdate-1/1400;insert into emp select * from emp as of timestamp sysdate-1/1400;undo备份热备或rman备份alter tablespace undo start backup;alter tablespace undo end backup;介质恢复则日志必须完整undo损坏处理1.系统中有其他的undo则修改为其他undo 把损坏的脱机如果有人正在用undo则此方法不能成功SQL> alter system set undo_tablespace=undo scope=spfile;SQL> alter database datafile 2 offline;startup2.系统中没有其他的undo 则使用隐藏参数,让undo脱机,打开数据库,删除undo建立undo查询隐藏参数:select ksppinm from x$ksppi where ksppinm like '%roll%'KSPPINM--------------------------------------------------------------------------------transactions_per_rollback_segment rollback_segments_rollback_segment_initial_rollback_segment_count_offline_rollback_segments_corrupted_rollback_segments_cleanup_rollback_entries_rollback_stopatfast_start_parallel_rollback_mv_rolling_inv10 rows selected.当其中的_offline_rollback_segments 为true时就可以了SQL> alter system set "_offline_rollback_segments"=true scope=spfile;shutdown immediatestartup mount把undo改为手动SQL> alter system set undo_management=manual scope=spfile;shutdown immediatestartup mount查看数据文件状态:SQL> select name,status,enabled from v$datafile;SQL> select segment_name,status from dba_rollback_segs;SEGMENT_NAME STATUS------------------------------ ----------------SYSTEM ONLINE_SYSSMU1$ NEEDS RECOVERY_SYSSMU2$ NEEDS RECOVERY_SYSSMU3$ NEEDS RECOVERY_SYSSMU4$ NEEDS RECOVERY_SYSSMU5$ NEEDS RECOVERY_SYSSMU6$ NEEDS RECOVERY_SYSSMU7$ NEEDS RECOVERY_SYSSMU8$ NEEDS RECOVERY_SYSSMU9$ NEEDS RECOVERY_SYSSMU10$ NEEDS RECOVERY介质恢复shutdown immediatestartup mount去掉隐藏参数:SQL> alter system reset "_offline_rollback_segments" scope=spfile sid='*';注意:undo要备份undo最好有一个备用的表空间介质恢复media recoverrecover tablespace undo。