目 录CONTENT

文章目录

Oracle的ROLLBACK SEGMENT介绍

暮渔木鱼
2025-02-03 / 0 评论 / 0 点赞 / 1 阅读 / 0 字 / 正在检测是否收录...

Oracle的回滚段(Rollback Segment)是数据库中用于存储事务中未提交数据变化的一个区域,它包含事务开始前的数据副本,以便在事务回滚时可以恢复数据。以下是关于Oracle回滚段的详细信息:

回滚段概述

  • 定义:回滚段是Oracle数据库中用于管理事务回滚和读一致性的关键存储结构。它们保存事务的旧数据,以便在需要时可以撤销未提交的更改。
  • 功能
    • 事务回滚:当事务执行过程中发生错误,需要撤销操作时,回滚段提供所需的数据以恢复到事务开始前的状态。
    • 事务恢复:在数据库发生故障后,回滚段与重做日志(Redo Log)配合,帮助数据库恢复到一致的状态。
    • 读一致性:确保在并发事务中,读操作能够看到事务开始时的数据状态,即使其他事务正在修改数据。

回滚段的使用

  • 自动分配:Oracle数据库会自动为每个会话分配一个或多个回滚段。

  • 手动管理:对于大型或复杂的事务,管理员可能需要手动指定回滚段。可以使用以下语句申请指定的回滚段:

    SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment;
    

    事务将以顺序、循环的方式使用回滚段的区(EXTENTS),当当前区用满后移到下一个区。

回滚段的创建

  • 创建回滚段:使用以下语句创建回滚段:

    CREATE ROLLBACK SEGMENT rbs01
    TABLESPACE rbs
    STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 10
              MAXEXTENTS 500 OPTIMAL 1000K);
    

    建议:- 一般情况下,INITIAL = NEXT

    • 设置 OPTIMAL参数来节约空间的使用
    • 不要设置 MAXEXTENTSUNLIMITED
    • 回滚段应创建在一个特定的回滚段表空间内

回滚段的状态管理

  • 使回滚段在线:创建回滚段后,回滚段是离线的,需要将其在线才能被事务利用:

    ALTER ROLLBACK SEGMENT rbs01 ONLINE;
    

    为了使回滚段在数据库启动时自动在线,可以在数据库的参数文件中列出回滚段的名字:

    ROLLBACK_SEGMENTS = (rbs01, rbs02)
    
  • 修改回滚段的存储参数:可以使用以下语句修改回滚段的存储参数:

    ALTER ROLLBACK SEGMENT rbs01 STORAGE (MAXEXTENTS 1000);
    
  • 回收回滚段的空间:如果指定了回滚段的 OPTIMAL参数,Oracle将自动回收回滚段到 OPTIMAL指定的位置。也可以手动回收回滚段的空间:

    ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 2M;
    
  • 使回滚段离线:为了阻止新的事务使用该回滚段或删除回滚段,可以将其离线:

    ALTER ROLLBACK SEGMENT rbs01 OFFLINE;
    

    如果有事务正在使用该回滚段,运行该命令后,回滚段的状态将是 PENDING OFFLINE。事务结束后,状态将改为 OFFLINE

  • 删除回滚段:当回滚段不再需要或要重建以改变 INITIALNEXTMINEXTENTS参数时,可以将其删除。删除前需要使回滚段离线:

    DROP ROLLBACK SEGMENT rbs01;
    

查询回滚段的信息

  • 查询回滚段的信息:可以使用以下查询语句获取回滚段的详细信息:

    SELECT segment_name, tablespace_name, owner, status FROM dba_rollback_segs;
    
  • 回滚段的统计信息:可以使用以下查询语句获取回滚段的统计信息:

    SELECT n.name, s.extents, s.rssize, s.optsize, s.hwmsize, s.xacts, s.status
    FROM v$rollname n, v$rollstat s
    WHERE n.usn = s.usn;
    
  • 回滚段的当前活动事务:可以使用以下查询语句获取回滚段的当前活动事务:

    SELECT s.username, t.xidusn, t.ubafil, t.ubablk, t.used_ublk
    FROM v$session s, v$transaction t
    WHERE s.saddr = t.ses_addr;
    

回滚段的数量规划

  • OLTP系统:对于OLTP系统,存在大量的小事务处理,一般建议:
    • 每个事务使用一个回滚段
    • 回滚段的数量应根据事务的数量和并发度进行规划
    • 通常建议每个实例分配10-20个回滚段

参数设置

  • ROLLBACK_SEGMENTS参数:该参数用于指定回滚段的列表,用以存储事务的回滚信息。如果未指定此参数,实例将使用公有回滚段,除非 UNDO_MANAGEMENT初始化参数设置为 AUTO,在这种情况下,ROLLBACK_SEGMENTS参数将被忽略,自动撤销管理将被使用。
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区