Oralce undo表空间管理与应用

本文介绍Oracle数据库中UNDO表空间的作用及其管理方法,包括如何创建、切换及删除UNDO表空间等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近整理服务器磁盘空间,发现undo表空间分配了10G的空间,而实际使用的不到100M,无法resize该表空间,最后只好切换表空间,删除原来的undo表空间解决,顺便整理下关于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表空间作用主要是回退事务、保持读一致性、事务恢复、FlashBack Query。

        在oracle9i以前,回滚段全是手工管理与监控的,创建不好或管理不好的回滚段容易造成性能瓶颈。9i以后,oracle默认采用自动回滚段管理。oracle9i通过下面4个初始化参数来设置自动回滚段管理:
         SQL> show parameter undo;

         NAME                                              TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
       undo_management                       string        AUTO
       undo_retention                                integer     900
       undo_suppress_errors           boolean   FALSE
       undo_tablespace                            string        UNDOTBS1

      undo_management 表示回滚段管理采用的方式,可以是AUTO或Manual,建议采用自动方式。

        undo retenion表示回滚信息在回滚段中保持的时间,默认为秒,但这是一个NO Guarangteed的限制,如果其他事务需要回滚空间,而空间不足时,这些信息仍然被覆盖。oracle10g开始,可以设置undo retenion为0,oracle将启用自动调整来满足最长时间查询的需要,同时,增加了Guarantee控制,可以指定undo表空间是否必须满足undo retenion的限制。

    sql>alter tablespace undotbs1 retention guarantee;
    sql>alter tablespace undotbs1 retention noguarantee;

       如果数据库事务量特别大,可以适当地减少该参数值,避免回滚表空间的过度膨胀,但是过小的值也将导致ora-01555错误的出现并出现Flashback功能的局限。

      undo_suppress_errors表示是否显示某些错误信息,如系统回滚段的操作。

     undo_tablespace表示使用了自动回滚的表空间。一般情况下,建议不要把undo表空间数据文件设置为无限制的自动扩展,主要是防止表空间的过度膨胀。如果undo表空间过度膨胀,而利用率又很低,就需要回收表空间以释放磁盘空间,可以尝试resize,不过大多数情况下应该是无法resize的,这时候就需要切换表空间了,即新建一定大小的undo表空间,删除原来旧的undo表空间。

     确定当前例程正在使用的UNDO表空间
     show parameter undo;

    显示数据库的所有UNDO表空间
    SELECT tablespace_name FROM dba_tablespaces WHERE contents=’UNDO’;

      创建新的undo表空间
      sql>create undo tablespace undotbs2   datafile '{oracle_home}/oradata/sid/undotbs2.dbf ' size 2048M;

     表空间切换
     sql>alter system set undo_tablespace =undotbs2;
     如果使用spfile,可以自动更新文件,如果是pfile,还需要修改参数文件undo_tablespace=‘ undotbs2 ’。

    删除原来的undo表空间
   drop tablespace undotbs1;
   最后直接从OS上删除数据文件,在删除之前需要检查原来的表空间是否还有活动的事务,通过查询dba_rollback_segs,并且v$transaction中没有在undotbs1上的活动事务,保证所有段的状态都是offline。

 

 

 
    

     

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15011739/viewspace-429479/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15011739/viewspace-429479/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值