Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1941933
  • 博文数量: 424
  • 博客积分: 1291
  • 博客等级: 中尉
  • 技术积分: 2682
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-13 01:34
个人简介

linux oracle 网络安全 编程

文章分类

全部博文(424)

文章存档

2016年(22)

2015年(53)

2014年(57)

2013年(242)

2012年(50)

分类: Oracle

2013-05-17 04:06:06

Oracle 10g中UNDO数据的作用及UNDO表空间的操作详解


  本文标签:    

  Oracle gUNDO的作用UNDO表的常用是本文我们主要要介绍的内容,UNDO数据也称为(ROLLBACK)数据,它用于确保数据的一致性.当DML操作时,操作前的数据被称为UNDO.UNDO段用于保存事务所数据的旧值,其中着被修改的位置以及修改前数据  。

  UNDO数据的作用:

  1.回退事务

  当执行DML操作修改数据时,UNDO数据被存放到UNDO段,而则被存放到数据段中,如果事务操作存在,旧需要回退事务,以取消事务.假定A执行了UTE p SET sal=0 WHERE empno=7788后发现,应该修改雇员7963的,而不是雇员7788的工资,那么通过执行ROLLBACK语句可以取消事务变化.当执行ROLLBACK时,oracle会将UNDO段的UNDO数据800写回的数据段中.

  2.读一致性

  用户检索数据时,oracle总是使用用户只能看到被提交过的数据(读取提交)或特定点的数据(SELECT语句时间点).这样可以确保数据的一致性.例如,当用户A执行语句 emp SET sal=1000 WHERE empno=7788时,UNDO记录会被存放到回滚段中,而新数据则会存放到EMP段中;假定此时该数据尚未提交,并且用户B执行SELECT sal FROM emp WHERE empno=7788,此时用户B将取得UNDO数据800,而该数据正是在UNDO记录中取得的.

  3.事务

  是例程恢复的一部分,它是由oracle server自动完成的.如果在数据库运行中出现例程失败(如断电,故障,进程故障等),那么当重启oracle server时,后台进程会自动执行例程恢复,执行例程恢复时,oracl会重新做所有未的记录.回退未提交事务.

  4.倒叙(Back Query)

  倒叙查询用于取得特间点的数据库数据,它是新增加的,假定当前时间为上午11:00,某用户在上午10:00执行UPDATE emp SET sal=3500 WHERE empno=7788语句,修改并提交了事务(雇员原工资为3000),为了取得10:00之前的雇员工资,用户可以使用倒叙查询特征.

  使用UNDO

  1.UNDO_MANAGENT

  该用于指定UNDO数据的方式.如果要使用自动管理,必须该参数为,如果使用管理模式,必须设置该参数为MANUAL,使用自动管理模式时,oracle会使用管理undo管理,使用手工管理模式时,oracle会使用回滚undo数据,需要注意,使用自动管理模式时,如果没有初始化参数UNDO_TABLESPA,oracle会自动选择第一个可用的存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用TEM回滚段存放UNDO记录,并在AR中记载警告.

  2.UNDO_TABLESPACE

  该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.

  在(Real licon Cluster)中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个的UNDO表空间.

  3.UNDO_RETENT

  该初始化参数用于控制UNDO数据的最大保留时间,其值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以到的最早时间点.

  建立UNDO表空间

  UNDO表空间专门用于存放UNDO数据,并且在UNDO表空间尚不能建立任何数据(表,,簇)

  1.使用CREATE DATABE命令建立UNDO表空间.

  当使用CREATE DATABASE命令建立数据库时,通过指定UNDO TABLESPACE选项,可以建立UNDO表空间.如下:


				
  1. CREATE DATABASE db01  
  2. …  
  3. UNDO TABLESPACE undotbs_01  
  4. DATAFILE /opt/oracle/oradata/ge01/UNDOTBS1.dbf SIZE 30M; 


  注意:UNDO TABLESPACE 子句不是必须的,如果使用自动UNDO管理模式,并且没有指定该子句,那么建立数据库时会自动名为UNDOTBS1的UNDO表空间.

  2.使用CREATE UNDO TABLESPACE命令建立UNDO表空间.


				
  1. create undo tablespace undotbs2 datafile /opt/oracle/oradata/ge01/UNDOTBS2.dbf size 100m reuse autoextend on next 50m maxsize 5000m; 


  修改UNDO表空间

  使用ALTER TABLESPACE命令修改UNDO表空间.

  当事务用尽了UNDO表空间后,使用ALTER TABLESPACE … ADD DATAFILE增加  。

  当UNDO表空间所在的填满是,使用ALTER TABLESPACE … REE DATAFL 命令数据文件到其他磁盘上  。

  使用ALTER DATABASE … OFFLINE/ONLINE使表空间脱机/联机  。

  当数据库处于AHIVELOG模式时,使用ALTER TABLESPACE …BEGIN BACKUP/END BACKUP命令UNDO表空间.

  切换UNDO表空间

  例程并打开数据库后,同一时刻特定例程只能使用一个UNDO表空间,切换UNDO表空间是指停止例程当前使用的UNDO表空间,并启动其他UNDO表空间,下面以启用undotbs2表空间为例,说明切换UNDO表空间的.

  ALTER SYSTEM SET undo_tablespace=undotbs02;

  在RAC(Real Application Cluster)机构中,不同例程必须使用独立的UNDO表空间,而不能共用同一个UNDO表空间.

  删除UNDO表空间

  当前例程正在使用的UNDO表空间是不能被删除的,如果确定要删除当前例程正在使用的UNDO表空间,应首先切换UNDO表空间.然后删除相应的UNDO表空间.

  DROP TABLESPACE undotbs3;

  1.确定当前例程正在使用的UNDO表空间:Show parameter undo_tablespace

  2.数据库的所有UNDO表空间:SELECT tablespace_name FROM dba_tablespaces WHERE contents=’UNDO’;

  3.显示UNDO表空间信息

  使用自动UNDO管理模式时,需要合理地设置UNDO表空间的尺寸,为例合理规划UNDO表空间尺寸,应在数据库运行的高峰阶段搜集UNDO表空间的统计信息.最终根据该统计信息确定UNDO表空间的尺寸.通过查询视图V%UNDTAT,可以搜集UNDO统计信息.


				
  1. SELECT TO_CHAR(BEGIN_,HH24:MI:SS) BEGIN_TIME,  
  2. TO_CHAR(END_TIME,HH24:MI:SS) END_TIME,UNDOBLKS FROM V$UNDOSTAT; 


  BEGIN_TIME用于起始统计时间,END_TIME用于标识结束统计时间,UNDOBLKS用于标识UNDO数据所占用的数据块个数.oracle每隔10分钟生成一行统计信息.

  4.显示UNDO段统计信息.

  使用自动UNDO管理模式时,oracle会在UNDO表空间上自动建立10个UNDO段,通过查询动态信息视图V$ROLLNAME,可以显示所有联机UNDO段的名称,通过查询动态性能视图V$ROLLLTAT,可以显示UNDO段的统计信息.通过在V$ROLLNAME和V$ROLLLISTAT之间执行查询,可以特定UNDO段的特定信息.


				
  1. SELECT a.name, b.xacts, b.s, b.extents   
  2. FROM v$rollname a, v$rollstat b WHERE a.usn=b.usn; 


  Name用于标识UNDO段的名称,xacts用于标识UNDO段所包含的事务个数,Writes用于标识在undo段上所写入的字节数,extents用于标识UNDO段的区个数  。

  5.显示活动事务信息.

  当执行DML操作时,oracle会将这些操作的旧数据放到UNDO段中,动态性能视图v$session用于显示的详细信息,动态性能视图v$transaction用于显示事务的详细信息,动态性能视图v$rollname用于显示联机UNDO段的名称.通过在这3个动态性能视图之间执行连接查询,可以确定正在执行事务操作的会话,事务所使用的UNDO段,以及事务所占用的UNDO块个数.


				
  1. Col name format a10  
  2. Col name format a10  
  3. SELECT a.username, b.name, c.used_ublk   
  4. FROM v$session a, v$rollname b, v$transaction c   
  5. WHERE a.saddr=c.ses_addr AND b.usn=c.xusn AND a.username=gedb


  6.显示UNDO区信息

  视图dba_undo_extents用于显示UNDO表空间所有区的详细信息.包括UNDO区尺寸和等信息.


				
  1. SELECT extent_id, tes, status   
  2. FROM dba_undo_extents WHERE segment_name’_SYSSMU5$’; 


  其中,extent_id用于标识区编号,bytes用于标识区尺寸,status用于标识区状态(ACTIVE:表示该区处于活动状态,EIRED:标识该区未用).

  V$ROLLSTAT中的常用列

  USN:回滚段标识

  RSSIZE:回滚段默认大小

  XACTS:活动事务数

  在一段时间内增量用到的列

  WRES:回滚段写入数(单位:bytes)

  SHRINKS:回滚段收缩次数

  EXTENDS:回滚段次数

  WRS:回滚段翻转(wrap)次数

  GETS:获取回滚段头次数

  WAITS:回滚段头等待次数

  关于Oracle 中UNDO数据的作用及UNDO表空间的操作的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获

阅读(3189) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~