收缩undo表空间

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:       通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB。

      通常情况下,如果undo表空间的处于自动扩展且未指定最大值的情形,对于使用小表空间模式的数据库,undo表空间可能会一再增长,直到达到32GB。或者是在指定了自动扩展及其最大值而月底或年末的批量数据计算导致undo表空间疯狂超范围增长后不再释放。对于这些情形我们需要手动收缩表空间以达到节省空间资源以及数据库管理开销,如rman备份等。本文列出了收缩undo表空间的基本步骤并给出示例。
      有关表空间,undo表空间的文章可参考:
           Oracle 表空间与数据文件
           Oracle 回滚(ROLLBACK)和撤销(UNDO)
           检查及设置合理的undo表空间
  
1、undo表空间收缩的基本步骤
     a、使用较小的尺寸创建一个新的undo表空间
           SQL> create undo tablespace UNDO_RBS1 datafile 'undorbs1.dbf' size <new size>;

     b、设置新的undo表空间为系统undo表空间
           SQL> alter system set undo_tablespace=undo_rbs1;

     c、删除原始的undo表空间及其数据文件
           SQL> drop tablespace undo_rbs0 including contents.

     d、使用原始undo表空间名创建一个新的小尺寸的undo表空间并且且换回系统undo,删除过渡undo表空间(此步骤可选)

 

2、收缩undo表空间示例

--环境
goex_admin@CICCFIX> select * from v$version where rownum<2;

BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

--创建测试表t
goex_admin@CICCFIX> CREATE TABLE t
  2  AS
  3  SELECT rownum AS id,
  4         round(5678+dbms_random.normal*1234) AS n1,
  5         mod(255+trunc(dbms_random.normal*1000),255) AS n2,
  6         dbms_random.string('p',255) AS pad
  7  FROM dual
  8  CONNECT BY level <= 10000
  9  ORDER BY dbms_random.value;

Table created.

--观察当前回滚段的情形,注意第一行为system表空间的撤销段,用于系统表空间的撤销
--其余的为public,也就是说任意用户都可以使用这些基于undo表空间的回滚段
goex_admin@CICCFIX> @rollback_segments

Rollback Name      Tablspace   Init/Next Extents    Min/Max Ex Status              Bytes Extents  Shrinks    Wraps    Opt. Size
------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------
SYS.SYSTEM         SYSTEM      114688 /             1 / 32765  ONLINE            393,216       6        0        0
PUBLIC._SYSSMU10$  UNDOTBS     131072 /             2 / 32765  ONLINE          3,276,800       5       77      209
PUBLIC._SYSSMU21$  UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6       75      229
PUBLIC._SYSSMU22$  UNDOTBS     131072 /             2 / 32765  ONLINE         14,811,136      16      194    1,004
PUBLIC._SYSSMU3$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      133      394
PUBLIC._SYSSMU4$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      115      386
PUBLIC._SYSSMU5$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      123      392
PUBLIC._SYSSMU6$   UNDOTBS     131072 /             2 / 32765  ONLINE          5,373,952       7      119      367
PUBLIC._SYSSMU7$   UNDOTBS     131072 /             2 / 32765  ONLINE          5,373,952       7      106      367
PUBLIC._SYSSMU8$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      121      421
PUBLIC._SYSSMU9$   UNDOTBS     131072 /             2 / 32765  ONLINE         11,665,408      13      114      368

--当前undo表空间的大小
goex_admin@CICCFIX> col file_name format a55
goex_admin@CICCFIX> select tablespace_name,file_name,AUTOEXTENSIBLE,bytes/1024/1024 size_mb
  2  from dba_data_files where tablespace_name like '%UNDO%';

TABLESPACE_NAME                FILE_NAME                                               AUT    SIZE_MB
------------------------------ ------------------------------------------------------- --- ----------
UNDOTBS                        /u02/database/CICCFIX/undo/undotbs1CICCFIX2.dbf         YES 24280.3125

--当前数据库存在的事务,为零值,表示没有未提交的事务
goex_admin@CICCFIX> select count(*) from v$transaction;

  COUNT(*)
----------
         0

--更新测试表以产生大量的undo
goex_admin@CICCFIX> update t set pad=dbms_random.string('l',255);  

10000 rows updated.

--再次观察undo使用情况
--可以看到7号undo段上的extents由7增加到11,其字节数由5,373,952增加到9,568,256,增加了4M多
goex_admin@CICCFIX> @rollback_segments

Rollback Name      Tablspace   Init/Next Extents    Min/Max Ex Status              Bytes Extents  Shrinks    Wraps    Opt. Size
------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------
SYS.SYSTEM         SYSTEM      114688 /             1 / 32765  ONLINE            393,216       6        0        0
PUBLIC._SYSSMU10$  UNDOTBS     131072 /             2 / 32765  ONLINE          3,276,800       5       77      209
PUBLIC._SYSSMU21$  UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6       75      229
PUBLIC._SYSSMU22$  UNDOTBS     131072 /             2 / 32765  ONLINE         14,811,136      16      194    1,004
PUBLIC._SYSSMU3$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      133      394
PUBLIC._SYSSMU4$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      115      386
PUBLIC._SYSSMU5$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      123      392
PUBLIC._SYSSMU6$   UNDOTBS     131072 /             2 / 32765  ONLINE          5,373,952       7      119      367
PUBLIC._SYSSMU7$   UNDOTBS     131072 /             2 / 32765  ONLINE          9,568,256      11      106      371
PUBLIC._SYSSMU8$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      121      421
PUBLIC._SYSSMU9$   UNDOTBS     131072 /             2 / 32765  ONLINE         11,665,408      13      114      368

--也可以看到该事物所使用的块数为527及其undo段号7
goex_admin@CICCFIX> SELECT addr,xidusn,used_ublk FROM v$transaction;

ADDR                 XIDUSN  USED_UBLK
---------------- ---------- ----------
000000009CA69A00          7        527

--Author : Leshami
--Blog   : http://blog.csdn.net/leshami

--下面回滚事务
goex_admin@CICCFIX> rollback;

--再次查看undo信息,其占用的undo段并没有立即释放
goex_admin@CICCFIX> @rollback_segments

Rollback Name      Tablspace   Init/Next Extents    Min/Max Ex Status              Bytes Extents  Shrinks    Wraps    Opt. Size
------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------
SYS.SYSTEM         SYSTEM      114688 /             1 / 32765  ONLINE            393,216       6        0        0
PUBLIC._SYSSMU10$  UNDOTBS     131072 /             2 / 32765  ONLINE          3,276,800       5       77      209
PUBLIC._SYSSMU21$  UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6       75      229
PUBLIC._SYSSMU22$  UNDOTBS     131072 /             2 / 32765  ONLINE         14,811,136      16      194    1,004
PUBLIC._SYSSMU3$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      133      394
PUBLIC._SYSSMU4$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      115      386
PUBLIC._SYSSMU5$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      123      392
PUBLIC._SYSSMU6$   UNDOTBS     131072 /             2 / 32765  ONLINE          5,373,952       7      119      367
PUBLIC._SYSSMU7$   UNDOTBS     131072 /             2 / 32765  ONLINE          9,568,256      11      106      371
PUBLIC._SYSSMU8$   UNDOTBS     131072 /             2 / 32765  ONLINE          4,325,376       6      121      421
PUBLIC._SYSSMU9$   UNDOTBS     131072 /             2 / 32765  ONLINE         11,665,408      13      114      368

--下面我们来先尝试收缩一下undo,收缩到23g,成功
goex_admin@CICCFIX> alter database datafile '/u02/database/CICCFIX/undo/undotbs1CICCFIX2.dbf' resize 23g;

Database altered.

--再次尝试收缩到10g出现错误提示,数据库中不存在事务,而undo表空间得不到释放
goex_admin@CICCFIX> alter database datafile '/u02/database/CICCFIX/undo/undotbs1CICCFIX2.dbf' resize 10g;
alter database datafile '/u02/database/CICCFIX/undo/undotbs1CICCFIX2.dbf' resize 10g
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

--下面新增一个新的undo表空间
goex_admin@CICCFIX> create undo tablespace undotbs2 datafile '/u02/database/CICCFIX/undo/undotbs_CICCFIX.dbf' size 100m autoextend on;

--设置系统undo表空间为新的表空间undotbs2
goex_admin@CICCFIX> alter system set undo_tablespace='UNDOTBS2' scope=both; 

-->注,如果使用了pfile文件启动实例,此处会收到错误提示,可以省略scope参数,直接修改内存中的值,下次重启前需要相应修改pfile中的undo_tablespace

--观察undo段的变化情况,可以看到新的原来的undotbs表空间上的undo段全部处于OFFLINE状态,新的undo表空间为online状态
goex_admin@CICCFIX> @rollback_segments 

Rollback Name      Tablspace   Init/Next Extents    Min/Max Ex Status              Bytes Extents  Shrinks    Wraps    Opt. Size
------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------
SYS.SYSTEM         SYSTEM      114688 /             1 / 32765  ONLINE            393,216       6        0        0
PUBLIC._SYSSMU1$   UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU10$  UNDOTBS     131072 /             2 / 32765  OFFLINE         3,276,800       5
PUBLIC._SYSSMU11$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU12$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU13$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU14$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU15$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU16$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU17$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU18$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU2$   UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU21$  UNDOTBS     131072 /             2 / 32765  OFFLINE         4,325,376       6
PUBLIC._SYSSMU22$  UNDOTBS     131072 /             2 / 32765  OFFLINE        20,054,016      21
PUBLIC._SYSSMU3$   UNDOTBS     131072 /             2 / 32765  OFFLINE         4,325,376       6
PUBLIC._SYSSMU4$   UNDOTBS     131072 /             2 / 32765  OFFLINE         4,325,376       6
PUBLIC._SYSSMU5$   UNDOTBS     131072 /             2 / 32765  OFFLINE         4,325,376       6
PUBLIC._SYSSMU6$   UNDOTBS     131072 /             2 / 32765  OFFLINE         5,373,952       7
PUBLIC._SYSSMU7$   UNDOTBS     131072 /             2 / 32765  OFFLINE         9,568,256      11
PUBLIC._SYSSMU8$   UNDOTBS     131072 /             2 / 32765  OFFLINE         4,325,376       6
PUBLIC._SYSSMU9$   UNDOTBS     131072 /             2 / 32765  OFFLINE        11,665,408      13

--删除之前过大的undo表空间及数据文件
goex_admin@CICCFIX> drop tablespace undotbs including contents and datafiles;

--删除之后,原来undo表空间上的回滚段不复存在。新的undo段为1-2,11-18,总计10个undo段
goex_admin@CICCFIX> @rollback_segments

Rollback Name      Tablspace   Init/Next Extents    Min/Max Ex Status              Bytes Extents  Shrinks    Wraps    Opt. Size
------------------ ----------- -------------------- ---------- -------- ---------------- ------- -------- -------- ------------
SYS.SYSTEM         SYSTEM      114688 /             1 / 32765  ONLINE            393,216       6        0        0
PUBLIC._SYSSMU1$   UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU11$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU12$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU13$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU14$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU15$  UNDOTBS2    131072 /             2 / 32765  ONLINE            196,608       3        0        2
PUBLIC._SYSSMU16$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        1
PUBLIC._SYSSMU17$  UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0
PUBLIC._SYSSMU18$  UNDOTBS2    131072 /             2 / 32765  ONLINE            327,680       5        0        3
PUBLIC._SYSSMU2$   UNDOTBS2    131072 /             2 / 32765  ONLINE            131,072       2        0        0

--下面是收缩之后的结果   
goex_admin@CICCFIX> select tablespace_name,file_name,AUTOEXTENSIBLE,bytes/1024/1024 size_mb
  2  from dba_data_files where tablespace_name like '%UNDO%';

TABLESPACE_NAME                FILE_NAME                                               AUT    SIZE_MB
------------------------------ ------------------------------------------------------- --- ----------
UNDOTBS2                       /u02/database/CICCFIX/undo/undotbs_CICCFIX.dbf          YES        100

3、后记
a、undo表空间的释放通过创建新的过渡表空间且将新创建的设置为系统undo表空间以达到空间释放目的
b、原始undo表空间能否删除,需要看原undo表空间上是否存在事务,如果存在则不能立即删除,需要等到提交或回滚后再删除(或杀掉session)
c、原始undo表空间删除后可能存在空间不能立即返回给OS的情形,可能需要重启数据库等
d、注意修改系统undo表空间时当前使用的参数文件(pfile,spfile)可能引发的下次重启收到undo错误的相关提示

 

Oracle&nbsp;牛鹏社    Oracle DBsupport

更多参考

有关Oracle RAC请参考
     使用crs_setperm修改RAC资源的所有者及权限
     使用crs_profile管理RAC资源配置文件
     RAC 数据库的启动与关闭
     再说 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 连接到指定实例
     Oracle RAC 负载均衡测试(结合服务器端与客户端)
     Oracle RAC 服务器端连接负载均衡(Load Balance)
     Oracle RAC 客户端连接负载均衡(Load Balance)
     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora) 
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora) 
     配置 RAC 负载均衡与故障转移
     CRS-1006 , CRS-0215 故障一例 
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC 
     使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
     配置非默认端口的动态服务注册 
     配置sqlnet.ora限制IP访问Oracle 
     Oracle 监听器日志配置与管理 
     设置 Oracle 监听器密码(LISTENER)
     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
     Oracle 冷备份
     Oracle 热备份
     Oracle 备份恢复概念
     Oracle 实例恢复
     Oracle 基于用户管理恢复的处理
     SYSTEM 表空间管理及备份恢复
     SYSAUX表空间管理及恢复
     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
     RMAN 概述及其体系结构
     RMAN 配置、监控与管理
     RMAN 备份详解
     RMAN 还原与恢复
     RMAN catalog 的创建和使用
     基于catalog 创建RMAN存储脚本
     基于catalog 的RMAN 备份与恢复
     RMAN 备份路径困惑
     使用RMAN实现异机备份恢复(WIN平台)
     使用RMAN迁移文件系统数据库到ASM
     linux 下RMAN备份shell脚本
     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
     Oracle 表空间与数据文件
     Oracle 密码文件
     Oracle 参数文件
     Oracle 联机重做日志文件(ONLINE LOG FILE)
     Oracle 控制文件(CONTROLFILE)
     Oracle 归档日志
     Oracle 回滚(ROLLBACK)和撤销(UNDO)
     Oracle 数据库实例启动关闭过程
     Oracle 10g SGA 的自动化管理
     Oracle 实例和Oracle数据库(Oracle体系结构) 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
关系型数据库 MySQL 数据库
MySQL Innodb Purge简介
前言 为什么MySQL InnoDB需要Purge操作?明确这个问题的答案,首先还得从InnoDB的并发机制开始。为了更好的支持并发,InnoDB的多版本一致性读是采用了基于回滚段的的方式。另外,对于更新和删除操作,InnoDB并不是真正的删除原来的记录,而是设置记录的delete mark为1。
8970 1
|
关系型数据库 MySQL 调度
深入理解MySQL InnoDB线程模型
深入理解MySQL InnoDB线程模型
|
存储 监控 AliSQL
RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化
RDS MySQL使用AliSQL内核,为用户提供了MySQL所有的功能,同时提供了企业级的安全、备份、恢复、监控、性能优化、只读实例、Serverless等高级特性
3622 3
RDS AliSQL 面向 Binlog 的性能优化大揭密(上)—— 极致 IO 优化
|
存储 关系型数据库 MySQL
InnoDB为什么使用自增id作为主键
InnoDB是MySQL数据库中一种常用的存储引擎,它使用自增id作为主键的设计是出于多方面的考虑。
655 0
|
AliSQL 关系型数据库 MySQL
RDS AliSQL 面向 Binlog 的性能优化大揭密(下)——强效瓶颈消除
本篇将继续揭秘AliSQL在binlog高并发性能上做的企业级优化。
RDS AliSQL 面向 Binlog 的性能优化大揭密(下)——强效瓶颈消除
|
存储 资源调度 前端开发
[Nestjs] 实现生成图形验证码以及校验过程
要在 NestJS 中实现图形验证码的校验过程,你可以按照以下步骤进行操作: 1. 安装依赖:首先,使用 npm 或 yarn 安装 svg-captcha 和 cookie-parser,其中 svg-captcha 是用于生成 SVG 格式的验证码图片的库,cookie-parser 是用于处理和解析 Cookie 的库。
756 0
|
算法
操作系统 页面置换算法FIFO与LRU的实现
操作系统 页面置换算法FIFO与LRU的实现
577 0
操作系统 页面置换算法FIFO与LRU的实现
|
分布式计算 资源调度 Hadoop
Hadoop运行环境搭建(开发重点四)在hadoop102安装hadoop、配置hadoop环境变量、测试Hadoop是否安装成功、hadoop重要目录
为什么只在hadoop102上安装hadoop,因为在hadoop102中安装后将hadoop拷贝到hadoop103和hadoop104中、解压hadoop到/opt/module目录下、配置好后需要source一下,重新加载一下内容、在Linux系统下的opt目录中查看软件包是否导入成功、用Xftp传输工具将hadoop导入到opt目录下面的software文件夹下面、系统启动的时候就会加载/etc/profile.d这里面的文件(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapr
468 1
Hadoop运行环境搭建(开发重点四)在hadoop102安装hadoop、配置hadoop环境变量、测试Hadoop是否安装成功、hadoop重要目录
|
SQL 存储 关系型数据库
带你认识MySQL sys schema
MySQL 5.7中引入了一个新的sys schema,sys是一个MySQL自带的系统库,在安装MySQL 5.7以后的版本,使用mysqld进行初始化时,会自动创建sys库。 sys库里面的表、视图、函数、存储过程可以使我们更方便、快捷的了解到MySQL的一些信息,比如哪些语句使用了临时表、哪个SQL没有使用索引、哪个schema中有冗余索引、查找使用全表扫描的SQL、查找用户占用的IO等,sys库里这些视图中的数据,大多是从performance_schema里面获得的。目标是把performance_schema的复杂度降低,让我们更快的了解DB的运行情况。
400 0
带你认识MySQL sys schema
|
Kubernetes 开发者 容器
K8S 集群部署_主机准备_永久关闭主机 swap 分区 | 学习笔记
快速学习 K8S 集群部署_主机准备_永久关闭主机 swap 分区
582 0
K8S 集群部署_主机准备_永久关闭主机 swap 分区 | 学习笔记