Oracle 释放过度使用的Undo表空间 故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃; 问题分析:产生问题的原因主要以下两点: 1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况; 2. 有较大事务没有收缩或者没有提交所导制; 说 明:本问题在ORACLE系统管理中属于比较正常的一现象,日常维护多注意对磁盘空间的监控。 备 份: (如果没有在线事务,可以不做,关闭监听) $>exp vas/vas file=/opt/oracle/data_1.dmp,/opt/oracle/data_2.dmp log=/opt/oracle/date.log owner=vas rows=y indexes=y compress=n buffer=65536 feedback=100000 volsize=0 filesize=1000M 解决步骤: 1. 启动SQLPLUS,并用sys登陆到数据库。 #su - oracle $>sqlplus /nolog SQL*Plus: Release 9.2.0.4.0 - Production on Wed Nov 8 13:45:10 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> conn as sysdba; Connected. 2. 查找数据库的UNDO表空间名 #cat $ORACLE_HOME/dbs/initddptest.ora …… *.undo_management=’AUTO’ *.undo_retention=10800 *.undo_tablespace=’UNDOTBS2’ …… 3. 确认UNDO表空间; SQL> select name from v$tablespace; NAME ------------------------------ CWMLITE DRSYS EXAMPLE INDX ODM SYSTEM TOOLS USERS XDB TEMP TESTLIB UNDOTBS2 4. 检查数据库UNDO表空间占用空间情况以及数据文件存放位置; SQL>select file_name,bytes/1024/1024 from dba_data_files 2 where tablespace_name like 'UNDOTBS2'; 5. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。 SQL> select s.username, u.name from v$transaction t,v$rollstat r, 2 v$rollname u,v$session s where s.taddr=t.addr and 3 t.xidusn=r.usn and r.usn=u.usn order by s.username; 6. 检查UNDO Segment状态; SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; 7. 创建新的UNDO表空间,并设置自动扩展参数; SQL> create undo tablespace undotbs1 datafile '/oradata/oradata/ddptest/UNDOTBS1.dbf' size 1000m reuse autoextend on next 800m maxsize unlimited; Tablespace created. 8. 动态更改spfile配置文件; SQL> alter system set undo_tablespace=undotbs1 scope=both; System altered. 9. 等待原UNDO表空间所有UNDO SEGMENT OFFLINE; SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; 10. 再执行看UNDO表空间所有UNDO SEGMENT ONLINE; SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; 11. 删除原有的UNDO表空间; SQL> drop tablespace undotbs2 including contents; Tablespace dropped. 12. 确认删除是否成功; SQL> select name from v$tablespace; NAME ------------------------------ CWMLITE DRSYS EXAMPLE INDX ODM SYSTEM TOOLS USERS XDB TEMP TESTLIB UNDOTBS1 12 rows selected. 13. 在做此步骤前,请到$ORACLE_HOME/dbs/init$ORACLE_SID.ora如下内容是否发生变更: #cat $ORACLE_HOME/dbs/initddptest.ora …… *.undo_management=’AUTO’ *.undo_retention=10800 *.undo_tablespace=’UNDOTBS2’ …… 如果没有发生变更请执行如下语句: SQL> create pfile from spfile; File created. 14. 册除原UNDO表空间的数据文件,其文件名为步骤中执行的结果。 #rm $ORACLE_BASE/oradata/$ORACLE_SID/undotbs02.dbf 附:UNDO表空间介绍 UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到 UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚段比较复杂,所有 oracle database 10g已经完全丢弃用回滚段.并且使用UNDO表空间来管理UNDO数据. UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性.当执行DML操作时,事务操作前的数据被称为UNDO记录.UNDO段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据, UNDO数据的作用. 1,回退事务 当执行DML操作修改数据时,UNDO数据被存放到UNDO段,而新数据则被存放到数据段中,如果事务操作存在问题,旧需要回退事务,以取消事务变 化.假定用户A执行了语句UPDATE emp SET sal=1000 WHERE empno=7788后发现,应该修改雇员7963的工资,而不是雇员7788的工资,那么通过执行ROLLBACK语句可以取消事务变化.当执行 ROLLBACK命令时,oracle会将UNDO段的UNDO数据800写回的数据段中. 2,读一致性 用户检索数据库数据时,oracle总是使用用户只能看到被提交过的数据(读取提交)或特定时间点的数据(SELECT语句时间点).这样可以确保 数据的一致性.例如,当用户A执行语句UPDATE 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时,后台进程SMON会自动执行例程恢复,执行例程恢复时,oracl会重新做所有未应用的记录.回退未提交事务. 4,倒叙查询(FlashBack Query) 倒叙查询用于取得特定时间点的数据库数据,它是9i新增加的特性,假定当前时间为上午11:00,某用户在上午10:00执行UPDATE emp SET sal=3500 WHERE empno=7788语句,修改并提交了事务(雇员原工资为3000),为了取得10:00之前的雇员工资,用户可以使用倒叙查询特征. 使用UNDO参数 1,UNDO_MANAGEMENT 该初始化参数用于指定UNDO数据的管理方式.如果要使用自动管理模式,必须设置该参数为AUTO,如果使用手工管理模式,必须设置该参数为 MANUAL,使用自动管理模式时,oracle会使用undo表空间管理undo管理,使用手工管理模式时,oracle会使用回滚段管理undo数 据, 需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放 UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告. 2,UNDO_TABLESPACE 该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间. 在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间. 3,UNDO_RETENTION 该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点. 建立UNDO表空间, UNDO表空间专门用于存放UNDO数据,并且在UNDO表空间尚不能建立任何数据对象(表,索引,簇) 1,使用CREATE DATABASE命令建立UNDO表空间. 当使用CREATE DATABASE命令建立数据库时,通过指定UNDO TABLESPACE选项,可以建立UNDO表空间.示例如下: CREATE DATABASE db01 … UNDO TABLESPACE undotbs_01 DATAFILE ‘/u01/oracle/rbdb1/undo0101.dbf’ SIZE 30M; 注意:UNDO TABLESPACE 子句不是必须的,如果使用自动UNDO管理模式,并且没有指定该子句,那么建立数据库时会自动生成名为SYS_UNDOTBS的UNDO表空间. 2,使用CREATE UNDO TABLESPACE命令建立UNDO表空间. CREATE UNDO TABLESPACE undotbs3 DATAFILE ‘D:demoundotbs3.dbf’ SIZE 10M; 修改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表空间,下面以启用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 FROMdba_tablespaces WHERE contents=’UNDO’; 3,显示UNDO表空间统计信息. 使用自动UNDO管理模式时,需要合理地设置UNDO表空间的尺寸,为例合理规划UNDO表空间尺寸,应在数据库运行的高峰阶段搜集UNDO表空间 的统计信息.最终根据该统计信息确定UNDO表空间的尺寸.通过查询动态性能视图V%UNDOSTAT,可以搜集UNDO统计信息. SELECT TO_CHAR(BEGIN_TIME,’HH24:MI:SS’) BEGIN_TIME, 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$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段的区个数. 5,显示活动事务信息. 当执行DML操作时,oracle会将这些操作的旧数据放到UNDO段中,动态性能视图v$session用于显示会话的详细信息,动态性能视图v $transaction用于显示事务的详细信息,动态性能视图v$rollname用于显示联机UNDO段的名称.通过在这3个动态性能视图之间执行连 接查询,可以确定正在执行事务操作的会话,事务所使用的UNDO段,以及事务所占用的UNDO块个数. Col username format a10 Col name format a10 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’; 6,显示UNDO区信息 数据字典视图dba_undo_extents用于显示UNDO表空间所有区的详细信息.包括UNDO区尺寸和状态等信息. SELECT extend_id, bytes, status FROM dba_undo_extents WHERE segment_name’_SYSSMU5$’; 其中,extent_id用于标识区编号,bytes用于标识区尺寸,status用于标识区状态(ACTIVE:表示该区处于活动状态,EXPIRED:标识该区未用). ============================================== ORACLE UNDO表空间释放过度占用的空间 环境: OS:Red Hat Enterprise Linux AS release 4 (Nahant) DB:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production 一台Oracle10gR2数据库报出如下错误: ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX 登陆检查,发现是SYSAUX表空间空间用尽,不能扩展,尝试手工扩展SYSAUX表空间: alter database datafile ' ORADG/danaly/datafile/sysaux.266.600173881' resize 800m Tue Nov 29 23:31:38 2005 ORA-1237 signalled during: alter database datafile ' ORADG/danaly/datafile/sysaux.266.600173881' resize 800m... 出现ORA-1237错误,提示空间不足。这时候我才认识到是磁盘空间可能被用完了. 是谁"偷偷的"用了那么多空间呢(本来有几十个G的Free磁盘空间的)? 检查数据库表空间占用空间情况: SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB 2 from dba_data_files group by tablespace_name 3 union all 4 select tablespace_name,sum(bytes)/1024/1024/1024 GB 5 from dba_temp_files group by tablespace_name order by GB; TABLESPACE_NAME GB ------------------------------ ---------- USERS .004882813 UNDOTBS2 .09765625 SYSTEM .478515625 SYSAUX .634765625 WAPCM_TS_VISIT_DETAIL .9765625 HY_DS_DEFAULT 1 MINT_TS_DEFAULT 1 MMS_TS_DATA2 1.375 MMS_IDX_SJH 2 MMS_TS_DEFAULT 2 IVRCN_TS_DATA 2 TABLESPACE_NAME GB ------------------------------ ---------- MMS_TS_DATA1 2 CM_TS_DEFAULT 5 TEMP 20.5498047 UNDOTBS1 27.1582031 15 rows selected. 不幸的发现,UNDO表空间已经扩展至27G,而TEMP表空间也扩展至20G,这2个表空间加起来占用了47G的磁盘空间,导致了空间不足。 显然曾经有大事务占用了大量的UNDO表空间和Temp表空间,Oracle的AUM(Auto Undo Management)从出生以来就经常出现只扩展,不收缩(shrink)的情况(通常我们可以设置足够的UNDO表空间大小,然后取消其自动扩展属性). 现在我们可以采用如下步骤回收UNDO空间: 1.确认文件 SQL> select file_name,bytes/1024/1024 from dba_data_files 2 where tablespace_name like 'UNDOTBS1'; FILE_NAME -------------------------------------------------------------------------------- BYTES/1024/1024 --------------- ORADG/danaly/datafile/undotbs1.265.600173875 27810 2.检查UNDO Segment状态 SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS ---------- ---------- --------------------- ---------------------- ---------- 0 0 .000358582 .000358582 0 2 0 .071517944 .071517944 0 3 0 .13722229 .13722229 0 9 0 .236984253 .236984253 0 10 0 .625144958 .625144958 0 5 1 1.22946167 1.22946167 0 8 0 1.27175903 1.27175903 0 4 1 1.27895355 1.27895355 0 7 0 1.56770325 1.56770325 0 1 0 2.02474976 2.02474976 0 6 0 2.9671936 2.9671936 0 11 rows selected. 3.创建新的UNDO表空间 SQL> create undo tablespace undotbs2; Tablespace created. 4.切换UNDO表空间为新的UNDO表空间 SQL> alter system set undo_tablespace=undotbs2 scope=both; System altered. 此处使用spfile需要注意,以前曾经记录过这样一个案例:Oracle诊断案例-Spfile案例一则 5.等待原UNDO表空间所有UNDO SEGMENT OFFLINE SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS ---------- ---------- --------------- --------------------- ---------------------- ---------- 14 0 ONLINE .000114441 .000114441 0 19 0 ONLINE .000114441 .000114441 0 11 0 ONLINE .000114441 .000114441 0 12 0 ONLINE .000114441 .000114441 0 13 0 ONLINE .000114441 .000114441 0 20 0 ONLINE .000114441 .000114441 0 15 1 ONLINE .000114441 .000114441 0 16 0 ONLINE .000114441 .000114441 0 17 0 ONLINE .000114441 .000114441 0 18 0 ONLINE .000114441 .000114441 0 0 0 ONLINE .000358582 .000358582 0 USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS ---------- ---------- --------------- --------------------- ---------------------- ---------- 6 0 PENDING OFFLINE 2.9671936 2.9671936 0 12 rows selected. 再看: 11:32:11 SQL> / USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS ---------- ---------- --------------- --------------------- ---------------------- ---------- 15 1 ONLINE .000114441 .000114441 0 11 0 ONLINE .000114441 .000114441 0 12 0 ONLINE .000114441 .000114441 0 13 0 ONLINE .000114441 .000114441 0 14 0 ONLINE .000114441 .000114441 0 20 0 ONLINE .000114441 .000114441 0 16 0 ONLINE .000114441 .000114441 0 17 0 ONLINE .000114441 .000114441 0 18 0 ONLINE .000114441 .000114441 0 19 0 ONLINE .000114441 .000114441 0 0 0 ONLINE .000358582 .000358582 0 11 rows selected. Elapsed: 00:00:00.00 6.删除原UNDO表空间 11:34:00 SQL> drop tablespace undotbs1 including contents; Tablespace dropped. Elapsed: 00:00:03.13 7.检查空间情况 由于我使用的ASM管理,可以使用10gR2提供的信工具asmcmd来察看空间占用情况. [oracle@danaly ~]$ export ORACLE_SID= ASM [oracle@danaly ~]$ asmcmd ASMCMD> du Used_MB Mirror_used_MB 21625 21625 ASMCMD> exit 空间已经释放 =================================================== 如何让Oracle释放undo表空间 在日常的数据库维护和数据库编程中经常会遇到犹豫对大数据量做DML操作后是得ORACLE的undo表空间扩展到十几个G或者几十个G 但是这些表空间的所占用磁盘的物理空间又不会被oracle所释放,如果你用的是PC机很可能会遇到磁盘空间不足的问题,经过个人整理经过如下操作可以重构undo表空间,同样temp表空间也可能在你查询大数据或则创建索引的时候无限扩大导致磁盘空间不足,同样可以用如下方式解决此问题: --查看各表空间名称 select name from v$tablespace --查看某个表空间信息 select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1'; --查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。 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状态 select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize; --创建新的UNDO表空间,并设置自动扩展参数; create undo tablespace "UNDOTBS2" datafile '/u07/historylog/HLOG/undotbs02.dbf' size 200M autoextend on next 5120K maxsize unlimited; -- 动态更改spfile配置文件; alter system set undo_tablespace=UNDOTBS2 scope=both; --等待原UNDO表空间所有UNDO SEGMENT OFFLINE; select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinksfrom v$rollstat order by rssize; --再执行看UNDO表空间所有UNDO SEGMENT ONLINE; select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize; -- 删除原有的UNDO表空间; drop tablespace UNDOTBS1 including contents; --确认删除是否成功; select name from v$tablespace; 最后需要在重启数据库或者重启计算机后到存储数据文件的路径下删除数据文件(为什么要手动删除呢:以上步骤只是删除了ORACLE中undo表空间的逻辑关系,即删除了数据文件在数据字典中的关联,不会自动删除项关联的数据文件)。 rm -f /u07/historylog/HLOG/undotbs01.dbf -------last return to UNDOTBS1 create undo tablespace "UNDOTBS1" datafile '/u07/historylog/HLOG/undotbs01.dbf' size 200M autoextend on next 5120K maxsize unlimited; alter system set undo_tablespace=UNDOTBS1 scope=both; drop tablespace UNDOTBS2 including contents; rm -f undotbs02.dbf ======================= SQL> create undo tablespace "UNDOTBS1" datafile '/u07/historylog/HLOG/undotbs01.dbf' size 200M autoextend on next 5120K maxsize unlimited; 2 3 4 5 Tablespace created. SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS ---------- ---------- --------------------- ---------------------- ---------- 11 0 .000114441 .000114441 0 12 0 .000114441 .000114441 0 13 0 .000114441 .000114441 0 15 0 .000114441 .000114441 0 17 0 .000114441 .000114441 0 19 0 .000114441 .000114441 0 20 0 .000114441 .000114441 0 18 0 .000114441 .000114441 0 16 0 .000114441 .000114441 0 14 0 .000114441 .000114441 0 0 0 .000358582 .000358582 0 11 rows selected. SQL> alter system set undo_tablespace=UNDOTBS1 scope=both; System altered. SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 2 from v$rollstat order by rssize; USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS ---------- ---------- --------------------- ---------------------- ---------- 1 0 .000114441 .000114441 0 2 0 .000114441 .000114441 0 3 0 .000114441 .000114441 0 5 0 .000114441 .000114441 0 7 0 .000114441 .000114441 0 9 0 .000114441 .000114441 0 10 0 .000114441 .000114441 0 8 0 .000114441 .000114441 0 6 0 .000114441 .000114441 0 4 0 .000114441 .000114441 0 0 0 .000358582 .000358582 0 11 rows selected. SQL> drop tablespace UNDOTBS2 including contents; Tablespace dropped. SQL> select name from v$tablespace; NAME ------------------------------ SYSTEM UNDOTBS1 SYSAUX TEMP IFSAPP_DATA IFSAPP_INDEX IFSAPP_ARCHIVE_DATA IFSAPP_ARCHIVE_INDEX IFSAPP_LOB IFSAPP_REPORT_DATA IFSAPP_REPORT_INDEX NAME ------------------------------ USERS 12 rows selected. SQL> ! $ ls control01.ctl ifsapp_data.dbf redo1_2.dbf redo3_2.dbf undotbs02.dbf control02.ctl ifsapp_index.dbf redo1_3.dbf redo3_3.dbf users01.dbf control03.ctl ifsapp_lob.dbf redo2_1.dbf sysaux01.dbf control04.ctl ifsapp_report_data.dbf redo2_2.dbf system01.dbf ifsapp_archive_data.dbf ifsapp_report_index.dbf redo2_3.dbf temp01.dbf ifsapp_archive_index.dbf redo1_1.dbf redo3_1.dbf undotbs01.dbf $ rm -f undotbs02.dbf $ du -g 48.60 . $ exit SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 3600 undo_tablespace string UNDOTBS1 SQL>
相关推荐
### 关于Oracle释放过度使用的Undo表空间的知识点 在Oracle数据库管理中,Undo表空间扮演着极其重要的角色。它主要用于存储事务处理过程中产生的Undo记录,这些记录对于事务回滚、一致性读取以及恢复操作至关重要。...
本篇文章主要讲解如何Shrink Undo表空间,释放过度占用的空间,以解决Oracle数据库中的表空间扩展问题。 1. 表空间扩展问题 在Oracle数据库中,表空间的扩展是非常重要的。随着数据的增长,表空间的大小也需要相应...
Oracle 9i数据库引入了一项重要的改进,即自动Undo表空间管理,这极大地简化了数据库管理员对于回退段的管理工作。回退段是Oracle数据库中一个关键的组成部分,它存储了事务对数据进行修改前的原始值,这些信息用于...
完成以上步骤后,所有的撤销数据将会被写入到新的撤销表空间中,而原有的UNDOTBS01.DBF文件将会被清空并释放空间。 #### 查看表空间情况 为了验证操作是否成功以及了解其他表空间的状态,可以使用以下命令来查询...
临时表空间的清理工作由Oracle自动完成,但实际磁盘空间可能不会立即释放,导致表空间增长。临时表空间由临时数据文件组成,不存储永久性对象,因此无需备份,且其操作不记录redo日志,但会产生undo日志。 4. **...
我们将从Shrink Undo表空间开始,介绍如何释放过度占用的空间,并解决UNDO表空间中的问题。 1. Shrink Undo表空间 在ORACLE数据库中,Undo表空间是一个非常重要的组件,它用于存储事务的Undo信息。当Undo表空间变...
8.17 诊断案例之一:释放过度扩展的UNDO空间 8.18 特殊情况的恢复 8.19 诊断案例之二:回滚段损坏的恢复 第9章 等待事件 9.1 等待事件的源起 9.2 从等待发现瓶颈 9.3 Oracle 10g的...
8.17 诊断案例之一:释放过度扩展的UNDO空间 8.18 特殊情况的恢复 8.19 诊断案例之二:回滚段损坏的恢复 第9章 等待事件 9.1 等待事件的源起 9.2 从等待发现瓶颈 9.3 Oracle 10g的...
8.17 诊断案例之一:释放过度扩展的UNDO空间 8.18 特殊情况的恢复 8.19 诊断案例之二:回滚段损坏的恢复 第9章 等待事件 9.1 等待事件的源起 9.2 从等待发现瓶颈 9.3 Oracle 10g的...
当磁盘空间超过90%,应通过调整表空间大小、清理日志文件和UNDO表空间来释放空间。对于CPU占用率,当其长时间处于90%-95%的高点,说明可能存在CPU资源瓶颈。解决方法包括增加CPU、优化SQL语句、减少解析次数以及限制...