知识大全 Oracle释放过度使用的Undo表空间

Posted 空间

篇首语:不怕路长,只怕志短。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle释放过度使用的Undo表空间相关的知识,希望对你有一定的参考价值。

Oracle释放过度使用的Undo表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  故障现象 UNDO表空间越来越大 长此下去最终数据因为磁盘空间不足而崩溃

  问题分析 产生问题的原因主要以下两点

   有较大的事务量让Oracle Undo自动扩展 产生过度占用磁盘空间的情况

   有较大事务没有收缩或者没有提交所导制

  说    明 本问题在ORACLE系统管理中属于比较正常的一现象 日常维护多注意对磁盘空间的监控

  备    份 (如果没有在线事务 可以不做 关闭监听)

  $>exp vas/vas file=/opt/oracle/data_ dmp /opt/oracle/data_ dmp log=/opt/oracle/date log wner=vas rows=y indexes=y press=n buffer= feedback= volsize= filesize= M

  解决步骤

   启动SQLPLUS 并用sys登陆到数据库

  #su oracle

  $>sqlplus /nolog

  SQL*Plus: Release Production on Wed Nov : :

  Copyright (c) Oracle Corporation   All rights reserved

  SQL> conn sys/qq @ddptest as sysdba;

  Connected

   查找数据库的UNDO表空间名

  #cat $ORACLE_HOME/dbs/initddptest ora

  ……

  * undo_management= AUTO

  * undo_retention=

  * undo_tablespace= UNDOTBS

  ……

   确认UNDO表空间

  SQL> select name from v$tablespace;

  NAME

  

  CWMLITE

  DRSYS

  EXAMPLE

  INDX

  ODM

  SYSTEM

  TOOLS

  USERS

  XDB

  TEMP

  TESTLIB

  UNDOTBS

   检查数据库UNDO表空间占用空间情况以及数据文件存放位置

  SQL>select file_name bytes/ / from dba_data_files

     where tablespace_name like UNDOTBS ;

   查看回滚段的使用情况 哪个用户正在使用回滚段的资源 如果有用户最好更换时间(特别是生产环境)

  SQL> select s username u name from v$transaction t v$rollstat r

     v$rollname u v$session s where s taddr=t addr and

     t xidusn=r usn and r usn=u usn order by s username;

   检查UNDO Segment状态

  SQL> select usn xacts rssize/ / / hwmsize/ / / shrinks

     from v$rollstat order by rssize;

   创建新的UNDO表空间 并设置自动扩展参数

  SQL> create undo tablespace undotbs datafile /oradata/oradata/ddptest/UNDOTBS dbf size m reuse autoextend on next m maxsize unlimited;

  Tablespace created

   动态更改spfile配置文件

  SQL> alter system set undo_tablespace=undotbs scope=both;

  System altered

   等待原UNDO表空间所有UNDO SEGMENT OFFLINE

  SQL> select usn xacts status rssize/ / / hwmsize/ / / shrinks

   from v$rollstat order by rssize;

   再执行看UNDO表空间所有UNDO SEGMENT ONLINE

  SQL> select usn xacts status rssize/ / / hwmsize/ / / shrinks

   from v$rollstat order by rssize;

   删除原有的UNDO表空间

  SQL> drop tablespace undotbs including contents;

  Tablespace dropped

   确认删除是否成功

  SQL> select name from v$tablespace;

  NAME

  

  CWMLITE

  DRSYS

  EXAMPLE

  INDX

  ODM

  SYSTEM

  TOOLS

  USERS

  XDB

  TEMP

  TESTLIB

  UNDOTBS

   rows selected

   在做此步骤前 请到$ORACLE_HOME/dbs/init$ORACLE_SID ora如下内容是否发生变更

  #cat $ORACLE_HOME/dbs/initddptest ora

  ……

  * undo_management= AUTO

  * undo_retention=

  * undo_tablespace= UNDOTBS

  ……

  如果没有发生变更请执行如下语句

  SQL> create pfile from spfile;

  File created

   册除原UNDO表空间的数据文件 其文件名为步骤中执行的结果

  #rm $ORACLE_BASE/oradata/$ORACLE_SID/undotbs dbf

  附 UNDO表空间介绍

  UNDO表空间用于存放UNDO数据 当执行DML操作(INSERT UPDATE和DELETE)时 oracle会将这些操作的旧数据写入到UNDO段 在oracle i之前 管理UNDO数据时使用(Rollback Segment)完成的 从oracle i开始 管理UNDO数据不仅可以使用回滚段 还可以使用UNDO表空间 因为规划和管理回滚段比较复杂 所有oracle database g已经完全丢弃用回滚段 并且使用UNDO表空间来管理UNDO数据

  UNDO数据也称为回滚(ROLLBACK)数据 它用于确保数据的一致性 当执行DML操作时 事务操作前的数据被称为UNDO记录 UNDO段用于保存事务所修改数据的旧值 其中存储著被修改数据块的位置以及修改前数据

  UNDO数据的作用

   回退事务

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

   读一致性

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

   事务恢复

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

   倒叙查询(FlashBack Query)

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

  使用UNDO参数

   UNDO_MANAGEMENT

  该初始化参数用于指定UNDO数据的管理方式 如果要使用自动管理模式 必须设置该参数为AUTO 如果使用手工管理模式 必须设置该参数为MANUAL 使用自动管理模式时 oracle会使用undo表空间管理undo管理 使用手工管理模式时 oracle会使用回滚段管理undo数据

  需要注意 使用自动管理模式时 如果没有配置初始化参数UNDO_TABLESPACE oracle会自动选择第一个可用的UNDO表空间存放UNDO数据 如果没有可用的UNDO表空间 oracle会使用SYSTEM回滚段存放UNDO记录 并在ALTER文件中记载警告

   UNDO_TABLESPACE

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

  在RAC(Real Application Cluster)结构中 因为一个UNDO表空间不能由多个例程同时使用 所有必须为每个例程配置一个独立的UNDO表空间

   UNDO_RETENTION

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

  建立UNDO表空间

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

   使用CREATE DATABASE命令建立UNDO表空间

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

  CREATE DATABASE db

  …

  UNDO TABLESPACE undotbs_

  DATAFILE /u /oracle/rbdb /undo dbf SIZE M;

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

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

  CREATE UNDO TABLESPACE undotbs

  DATAFILE D:demoundotbs dbf SIZE M;

  修改UNDO表空间

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

  当事务用尽了UNDO表空间后 使用ALTER TABLESPACE … ADD DATAFILE增加数据文件

  当UNDO表空间所在的磁盘填满是 使用ALTER TABLESPACE … RENAME DATAFIEL 命令移动数据文件到其他磁盘上

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

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

  切换UNDO表空间

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

  ALTER SYSTEM SET undo_tablespace=undotbs ;

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

  删除UNDO表空间

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

  DROP TABLESPACE undotbs ;

   确定当前例程正在使用的UNDO表空间

  Show parameter undo_tablespace

   显示数据库的所有UNDO表空间

  SELECT tablespace_name FROMdba_tablespaces WHERE contents= UNDO ;

   显示UNDO表空间统计信息

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

  SELECT TO_CHAR(BEGIN_TIME HH :MI:SS ) BEGIN_TIME

  TO_CHAR(END_TIME HH :MI:SS ) END_TIME

  UNDOBLKS

  FROM V$UNDOSTAT;

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

   显示UNDO段统计信息

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

  SELECT a name b xacts b writes b extents

  FROM v$rollname a v$rollstat b

  WHERE a usn=b usn;

  Name用于标识UNDO段的名称 xacts用于标识UNDO段所包含的活动事务个数

  Writes用于标识在undo段上所写入的字节数 extents用于标识UNDO段的区个数

   显示活动事务信息

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

  Col username format a

  Col name format a

  SELECT a username b name c used_ublk

  FROM v$session a v$rollname b v$transaction c

  WHERE a saddr=c ses_addr AND b usn=c xidusn

  AND a username= SCOTT ;

   显示UNDO区信息

  数据字典视图dba_undo_extents用于显示UNDO表空间所有区的详细信息 包括UNDO区尺寸和状态等信息

  SELECT extend_id bytes status FROM dba_undo_extents

  WHERE segment_name _SYSSMU $ ;

cha138/Article/program/Oracle/201311/17893

相关参考

知识大全 ShrinkUndo表空间,释放过度占用的空间

ShrinkUndo表空间,释放过度占用的空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  环

知识大全 如何估计undo表空间大小

  解释UndoSize=Undo_retention*UPS  最近oraclei频频在exp的时候发生ora才深感oraclei的undo表空间自动管理模式好处  oraclei使用参数undo_

知识大全 解决Oracle下的undo空间过大的问题

解决Oracle下的undo空间过大的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishi

知识大全 Oracle的redo和undo的区别

Oracle的redo和undo的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  redo&

知识大全 oracle压缩表/表空间

  从OracleiR开始ORACLE提供了表/表空间压缩技术以减少磁盘开销节省空间并在某些情况下提高查询性能  表压缩是如何工作的在Orclei第版中表压缩特性通过删除在数据库表中发现的重复数据值来

知识大全 Oracle表、索引修改表空间语句

Oracle表、索引修改表空间语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  表做空间迁移时

知识大全 Oracle] 解析在没有备份的情况下undo损坏怎么办

Oracle]解析在没有备份的情况下undo损坏怎么办  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Oracle创建表空间

Oracle创建表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE中表空间是数据

知识大全 oracle扩展表空间

  扩展可以调整表空间对应的数据文件的大小或者为这个表空间添加数据文件  改变数据文件  SQL>alterdatabasedatafile/home/oracle/oradata/gldb/u

知识大全 ORACLE临时表空间的清理

ORACLE临时表空间的清理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE临时表空