数据库存储管理——回滚段管理

回滚段是Oracle中非常重要的逻辑存储结构,用于临时存储数据库还原信息。回滚段中的信息将在数据恢复过程中使用到。
  Oracle以前的版本使用回退段来存储还原,每一个表空间需要创建回滚段,各个表空间对回滚段实现各自的管理,也称为手动还原管理模式。这些回退段的空间管理十分复杂,因此从Oracle 10g开始废弃了这种存储还原的方法,而是用自动还原管理的方式。在自动还原管理模式中,还原数据被保存在还原表空间中。当然也可是使用回滚段来手动管理重做,重做表空间是一种让系统来自动管理回滚段的方式。
  如果当前系统处于自动重做管理模式,则数据库服务器使用表空间来管理重做空间。这是Oracle推荐使用的模式。但是,如果使用手动重做管理模式,则DBA需要创建回滚段,用于临时存储重做信息。回滚段中的信息将在数据库恢复过程中使用到。

回滚段类型

回滚段分系统回滚段和非系统回滚段,其中非系统回滚段又分为PUBLIC回滚段和PRIVATE回滚段。
  系统回滚段用于处理涉及系统的CATALOG的事物(比如大多数的DDL),它位于SYSTEM表空间,由于只有SYSTEM表空间可以随时保持可用, 因此不要把SYSTEM回滚段放在其他的表空间中。所以注意:系统回滚段应放在SYSTEM表空间中,,并且应该永远保持ONLINE状态。
  PUBLIC回滚段对于数据库的所有实例(INSTANCE)都是可用的,除非将其设置为OFFLINE。
  PRIVATE 回滚段是指对于数据库的某个实例是私有的。为了使用PRIVATE回滚段,某个实例应当在其INITsid.ORA的 ROLLBACK_SEGMENTS中标明所有要使用的PRIVATE回滚段,或通过使用 ALTER ROLLBACK SEGMENT 回滚段名 ONLINE来使用某一个回滚段。
  一般来说新建的Oracle数据库的回滚段只有SYSTEM回滚段。

查看回滚段信息

使用视图DBA_SEGMENTS可以查看当前数据库中所有段的信息。回滚段的类型(SEGMENTS_TYPE)值为ROLLBACK。
  使用下面的语句查看所有回滚段的信息。

SELECT SEGMENT_NAME 回滚段名,TABLESPACE_NAME 所在表空间,BYTES 大小 
FROM DBA_SEGMENTS WHERE SEGMENT_TYP E='ROLLBACK';

如果只是查看回滚段的基本信息,还可以使用视图VROLLNAME和视图VROLLSTAT查看回滚段的使用情况。
  视图V$ROLLNAME包含在线回滚段的名称列表,其结构如下表所示。

字段名 数据类型 说明
USN NUMBER 回滚段编号
NAME VARCHAR2(30) 回滚段名称

视图V$ROLLSTAT包含回滚段的统计信息,,其结构如下表所示。

字段名 数据类型 说明
USN NUMBER 回滚段编号
EXTENTS NUMBER 回滚段中包含的区间的数量
RSSIZE NUMBER 回滚段的大小,单位是字节
WRITES NUMBER 向回滚段中写入的字节数
XACTS NUMBER 活动事务的数量
STATUS NUMBER 回滚段的状态
CUREXT NUMBER 当前区间数量
CURBLK NUMBER 当前数据块数量

使用下面的语句查看回滚段的当前工作情况:

SELECT s.USN,n.NAME,s.EXTENTS,s.RSSIZE,s.STATUS
FROM V$ROLLSTAT s,V$ROLLNAME n
WHERE s.USN=n.USN

查看和设置回滚段的管理模式

Oracle可以自动管理回滚段,也可以由用户来手动管理。使用初始化参数UNDO_MANAGEMENT可以设置管理回滚段的方法。可以使用以下命令查看UNDO_MANAGEMENT参数的值:

SHOW PARAMETER UNDO_MANAGEMENT

默认情况下,UNDO_MANAGEMENT参数的值为AUTO,即由系统自动管理回滚段。可以使用ALTER SYSTEM语句修改UNDO_MANAGEMENT参数的值。
【示例】将回滚段管理方式设置为手动管理。

ALTER SYSTEM SET UNDO_MANAGEMENT=MANUAL SCOPE=SPFILE;

创建回滚段

除了使用系统自动创建的SYSTEM回滚段外,用户还可以为不同的表空间创建专用的回滚段。必须将初始化参数UNDO_MANAGEMENT设置为MANUAL后,才能由用户创建回滚段。
  创建回滚段的语句为CREATE ROLLBACK SEEGMENT,它的语法结构如下:

CREATE [PUBLIC] ROLLBACK SEGMENT 回滚段名称
TABLESPACE 所属表空间名称
STORAGE 存储选项

使用PUBLIC关键字可以创建公共回滚段,公共回滚段可以被多个数据库实例访问。

【示例】为表空间OrclTBS01创建回滚段OrclRs01,代码如下:

CREATE ROLLBACK SEGMENT OrclRs01
TABLESPACE UndoTBS1
STORAGE (INITIAL 5M
         NEXT 2M
         MAXEXTENTS UNLIMITED);

UndoTBS1是还原表空间,INITIAL 5M表示回滚段的初始大小为5MB,NEXT 2M表示下次分配给回滚段的大小为2MB,MAXEXTENTS UNLIMITED表示回滚段中可以包含不限制数量的区别。

尽管可以手动创建和管理回滚段,但在通常情况下,建议由Oracle自动对回滚段进行管理。

修改回滚段属性

当回滚段创建完成后,在使用过程中有时会根据需要修改回滚段的属性。将初始化参数UNDO_MANAGEMENT设置为MANUAL后,才能由用户修改回滚段的属性。

1.修改回滚段的在线状态
  回滚段的在线状态可以分为联机和脱机两种。如果暂时不使用某个回滚段,可以将其设置为脱机状态。力图,当需要大量执行插入、修改和删除操作时,Oracle就需要使用大的回滚段(数据频繁变化,需要保存大量回滚数据)。但分配回滚段是Oracle系统自动完成的,为了使事务能够得到大的回滚段,可以将较小的回滚段设置为脱机状态,等事务处理完成后再将其设置为联机状态。
  使用ALTER ROLLBACK SEGMENT语句可以修改回滚段的状态,语法如下:

ALTER ROLLBACK SEGMENT 回滚段名称 回滚段状态

回滚段状态可以使ONLINE和OFFLINE两种,新建回滚段的状态为ONLINE。

2.手动收缩回滚段
  如果在创建回滚段时指定的初始大小(INITIAL参数)过大,可以手动收缩回滚段的大小。语法如下:

ALTER ROLLBACK SEGMENT 回滚段名称 SHRINK TO 回滚段的初始大小

删除回滚段

如果不再需要某些回滚段,可以使用DROP ROLLBACK SEGMENT语句删除它。在删除回滚段之前,首先需要执行下面的语句将回滚段设置为联机状态。

【示例】删除回滚段OrclRd01。

ALTER ROLLBACK SEGMENT OrclRd01 OFFLINE;
DROP ROLLBACK SEGMENT OrclRd01;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一课 表空间的创建管理 (一)表空间概述 一个数据库可以多个表空间一个表空间对应多个数据文件,一个表空间可以包含...
    __神经蛙__阅读 6,355评论 0 0
  • 什么是存储引擎? 存储引擎其实就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为...
    杜大个阅读 13,474评论 0 2
  • 一、基本概念 1.主键、外键、超键、候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为...
    叫我老村长阅读 3,616评论 0 6
  • Undo的作用 数据的回滚 一致性读 表的闪回(事务,查询的闪回..) 失败会话的恢复 回滚rollback操作 ...
    职场亮哥阅读 2,944评论 0 0
  • 协调多用户数据库系统中事务的同时执行被称为并发控制。并发控制的目的是确保多用户数据库环境中事务的可序列化性。为了实...
    ebook_sea阅读 4,771评论 0 0

友情链接更多精彩内容