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的使用原理可以帮助他们更好地管理数据库事务和优化数据库性能。
- 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。