`
jia106329
  • 浏览: 62838 次
  • 性别: Icon_minigender_2
  • 来自: tj
社区版块
存档分类
最新评论

oracle回滚段

阅读更多
http://hi.baidu.com/ipeipei/blog/item/34f84316f7126d4a20a4e950.html
1. 概述
本文主要从回滚段的原理,分配和使用,以及回滚段的相关参数包括初始化参数的设置和回滚段的管理来介绍回滚段。以及回滚段涉及的多种问题。
2. 回滚段工作原理
回滚段是磁盘上的一段存储空间,用来保存数据变化前后的映像来提供一致性读,保证事务完整性。
oracle基于两个原则给事务分配回滚段。首先oracle试图将一个新的事务指派给某个拥有最少活动事务数的回滚段;如果没有单个段能满足这个需求,那么该事务将被指派给某个段来保存undo信息,以便此undo信息能够尽可能长的时间内被用于读一致性视图保留。读一致性保证查询或者返回数据,或者失败。当失败时系统发出ora-01555错误。所以,回滚段中已经提交的事务数据是非常宝贵的。Oracle设法尽可能长的保留回滚段已经提交的数据。
回滚段中的范围以循环的方式被使用。一个事务仅仅使用一个回滚段。当一个范围装满回滚段数据后回滚段就自动使用下一个范围。多个事务可以使用一个范围,但是一个回滚段的数据块只能存放一个事务数据。当回滚段使用完最后一个范围时,当回滚段的第一个范围是不活动的或者不被使用后,回滚段的指针才指向第一个范围。
3. 回滚段的类型
回滚段分系统回滚段和非系统回滚段,其中非系统回滚段又分为PUBLIC回滚段和PRIVATE回滚段.
系统回滚段用于处理涉及系统的CATALOG的事物(比如大多数的DDL), 它位于SYSTEM表空间, 由于只有SYSTEM表空间可以随时保持可用, 因此, 不要把SYSTEM回滚段放在其他的表空间中.
注意:系统回滚段应放在SYSTEM表空间中, 并且应该永远保持ONLINE状态.
PUBLIC回滚段对于数据库的所有实例(INSTANCE)都是可用的, 除非将其设置为OFFLINE。创建后只要online就可用。
PRIVATE回滚段是指对于数据库的某个实例是私有的, 为了使用PRIVATE回滚段, 某个实例应当在其INITsid.ORA的 ROLLBACK_SEGMENTS中标明所有要使用的PRIVATE回滚段, 或通过使用 ALTER ROLLBACK SEGMENT XXX ONLINE来使用某一个回滚段.
注意:在单实例系统中,建议将所有回滚段设为PUBLIC;在多实例系统中(如OPS), 建议将每个实例的PRIVATE回滚段放置到访问比较快的本地设备上。
4. 回滚段的使用
一般情况下,如果对回滚段的大小估计不准确的话,会导致系统产生回滚段不能自动扩展范围的错误。
4.1. 创建回滚段
当创建回滚段时,系统必须要有CREATE ROLLBACK SEGMENT系统权限。
CREATE ROLLBACK SEGMENT RB01  TABLESPACE RBS1
STORAGE (INITIAL integer K|M NEXT integer K|M  MINEXTENTS integer MAXEXTENTS integer OPTIMAL integer K|M );
4.2. 更改ONLINE/OFFLINE状态
ALTER ROLLBACK SEGMENT RB01 ONLINE;
4.3. 更改OPTIMAL参数
ALTER ROLLBACK SEGMENT RB01 STORAGE ( MAXEXTENTS 200 OPTIMAL 2048K );
4.4. 缩小回滚段
ALTER ROLLBACK SEGMENT RB01 SHRINK;
(有OPTIMAL参数时, 缩小到OPTIMAL值; 没有OPTIMAL参数时, 缩小到MINEXTENTS所对应的尺寸) ALTER ROLLBACK SEGMENT RB01 SHRINK TO 2048K;
4.5. 修改INITIAL/NEXT参数
原则上,INITIAL总应该等于NEXT,除了使用SET TRANSACTION USE ROLLBACK SEGMENT XXX的回滚段。由于INITIAL不能直接修改,只能先drop然后创建。
DROP ROLLBACK SEGMENT RB01;
CREATE ROLLBACK SEGMENT RB01 TABLESPACE RBS1
STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 20  MAXEXTENTS 121 OPTIMAL 2000K);
4.6. 在事务中使用特定的回滚段
SET TRANSACTION USE ROLLBACK SEGMENT RB_LARGE1;
4.7. 删除回滚段
DROP ROLLBACK SEGMENT rollback_segment;
5. 重作表空间的使用
在oracle9i中推荐使用重做表空间代替回滚段,当然也可是使用回滚段。重做表空间是一种让系统来自动管理回滚段的方式。在系统里有4个和重做表空间的相关参数:
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_suppress_errors                 boolean     TRUE
undo_tablespace                      string      rbs3
SQL>
当将undo_management设置成AUTO时系统使用重做表空间来管理回滚段,当它被设置成MENUAL时系统使用回滚段。 Undo_tablespace指名系统使用哪一个重做表空间。undo_suppress_errors被设置成true时表示系统创建和使用回滚段时忽略错误。undo_retention是自动管理模式下系统提交后,回滚段的数据保留多长时间,单位是秒。这个参数的设置要看保留的时间和硬盘的空间大小来设定。下面是Undo 表空间大小的设计规范的计算公式:
Undospace = UR * UPS *db_block_size+ 冗余量
UR: 表示在undo中保持的最长时间数(秒),由数据库参数UNDO_RETENTION值决定。
UPS:表示在undo中,每秒产生的数据库块数量。
例如:在数据库中保留2小时的回退数据,假定每秒产生200个数据库块。则Undospace = 2 * 3600 * 200 * 4K = 5.8G
5.1. 创建重做表空间
CREATE UNDO TABLESPACE "RBS2"
DATAFILE '$DATAHOME/RBS2_1.dbf' SIZE 200M REUSE AUTOEXTEND ON
NEXT  1024K MAXSIZE  600M;
5.2. 增加数据文件
ALTER TABLESPACE RBS3 ADD DATAFILE '/export/home2/oradata/openview/rbs3_3.dbf' SIZE 10M AUTOEXTEND ON  NEXT 5M MAXSIZE 300M;
5.3. 修改数据文件
增加数据文件的大小:
ALTER DATABASE DATAFILE '/export/home2/oradata/openview/RBS3_2.dbf' RESIZE 300M;
修改数据文件的扩展类参数
ALTER DATABASE DATAFILE '/export/home2/oradata/openview/RBS3_2.dbf' AUTOEXTEND ON  NEXT 10M MAXSIZE 500M;
6. ORA-01555问题
这个问题是一致性读取时发生的。回滚段是以循环方式使用回滚段中的范围,当前范围被写满后就使用下一个范围。当回滚段的撤销数据不再是活动的,可能是已经提交或者回滚,那么空间就可以重用。当一个长时间运行的查询在事务活动时开始运行,当事务结束时还没有运行完,此时该查询意识到旧数据已经不复存在时,就产生了ORA-01555:snapshot too old的错误。
从数据库应用的角度来讲,产生这个错误的原因有:
大的查询。一般来说,需要DBA找到这个大的查询,如果可以优化的话,尽量提高性能,否则为大的查询所使用的事务建立单独的回滚段,当查询开始时将该段联机,完成后再将该段脱机;或者象oracle建议那样使用更大的回滚段。
过度频繁的提交。可以将单条提交的事务改成成批提交。
或者由于设置了较小的optimal参数。此时可以将这个参数加大。
很显然,回滚段为数据库的管理提供一个挑战的机会。不过在oracle9i中使用自动管理undo表空间来解决回滚段的管理问题,因此这个错误成为了历史。
7. ORA-01552 错误
ORA-01552 cannot use system rollback segment for non-system tablespace。
这个错误说明在系统中没有可用的非系统回滚段。原因如下:
 除了系统回滚段, 未创建其它回滚段
 只创建了PRIVATE回滚段, 但INITsid.ORA的ROLLBACK_SEGMENTS中未列出这些回滚段
 创建了PUBLIC回滚段, 但这些回滚段都处于OFFLINE状态
解决办法,根据上述原因依次解决。

8. 创建回滚段时需要注意的问题
 INITIAL和 NEXT最好一样,除了应用使用指定的回滚段。
 Private回滚段如果需要被其他用户使用,那么需要在INITsid.ora中使用rollback_segments指定。
 MINEXTENTS最小等于2
 OPTIMAL最小应该设置成两个extents大小。
9. 与之相关的性能视图
和undo有关的动态性能视图

 v$undostat        包含undo的统计信息。使用这张视图可以估计系统当前所需的undo大小。
 v$rollstat      undo模式的视图。是undo表空间的undo segments的                                        统计信息
 v$transaction      包含undo segments的信息。
 dba_undo_extents  包含undo表空间中每一个范围的提交时间。
和回滚段相关的性能视图

 DBA_ROLLBACK_GEGS     描述回滚段的信息,包含回滚段的名字和表空间;
 DBA_SEGMENTS           描述回滚段的附加信息;
 V$ROLLNAME         列出在线回滚段的名称
 V$ROLLSTAT               包含回滚段的统计信息
 V$TRANSACTION           包含撤销的统计信息
分享到:
评论

相关推荐

    oracle回滚段使用率过高之解决方法

    Oracle 回滚段使用率过高之解决方法 Oracle 回滚段是一种重要的数据库机制,它用于存放数据修改之前的值,以便在事务回滚或恢复时使用。然而,回滚段使用率过高可能会导致数据库性能下降和空间不足的问题。本文将...

    ORACLE回滚段的概念、用法和规划及问题解决

    ### ORACLE回滚段的概念、用法和规划及问题解决 #### 一、回滚段的概念 在Oracle数据库中,**回滚段(Rollback Segment)**是一种特殊类型的段,用于存储事务处理过程中更改的数据的旧值。这些数据在事务处理期间...

    oracle 回滚段探究

    ### Oracle回滚段探究 #### 一、引言 在Oracle数据库中,回滚段扮演着至关重要的角色,尤其是在确保事务处理的完整性和提供一致性视图方面。本文旨在深入探讨Oracle回滚段的相关知识,包括其作用、原理、分配与...

    Oracle回滚段管理知识.pptx

    Oracle回滚段管理知识 Oracle 回滚段管理是数据库管理系统中的一项重要功能,它用于管理事务的回退和恢复。下面是 Oracle 回滚段管理的知识点总结: 一、回滚段简介 回滚段是 Oracle 数据库中的一种特殊类型的表...

    深入解析oracle的回滚段

    Oracle数据库中的回滚段(Rollback Segments)是存储事务历史的重要组件,它们记录了数据修改前的状态,以确保数据的完整性和一致性。在深入理解回滚段之前,我们需要先明确其基本概念和作用。 回滚段的主要功能...

    oracle回滚段问题

    Oracle回滚段是数据库管理系统中的核心组件,主要负责存储数据修改前的状态,以支持事务的回滚、恢复和读一致性。回滚段是Oracle数据库管理的重要部分,对于DBA来说,理解和有效地管理回滚段至关重要。 回滚段的...

    oracle 回滚段

    Oracle 回滚段 Oracle 回滚段是 Oracle 数据库中的一种重要组件,它用于保存数据库修改前的数据,以便在需要时可以通过 ROLLBACK 命令恢复到修改前的数据。回滚段的设置对数据库的性能产生直接影响,特别是在更新...

    oracle 回滚段灾难恢复

    在Oracle数据库管理中,回滚段(Rollback Segment)是一个重要的组成部分,主要用于存储事务处理的回滚信息。当系统遇到回滚段灾难,如回滚段损坏或异常,导致数据库无法正常启动时,进行有效的灾难恢复是至关重要的...

    Oracle回滚段使用查询代码详解

    Oracle回滚段(Rollback Segments)是数据库管理系统中用于存储事务回滚信息的重要组成部分。在Oracle数据库中,回滚段记录了事务中修改的数据在事务提交前的原始状态,以便在事务回滚或系统异常时能恢复到事务开始...

    Oracle回滚段的概念,用法和规划及问题的解决

    正在看的ORACLE教程是:Oracle回滚段的概念,用法和规划及问题的解决。回滚段管理一直是ORACLE数据库管理的一个难题,本文通过实例介绍ORACLE回滚段的概念,用法和规划及问题的解决。 回滚段概述 回滚段用于存放...

    Oracle数据库回滚段的故障分析与性能优化.pdf

    Oracle数据库回滚段的故障分析与性能优化 回滚段是 Oracle 数据库的重要组成部分,数据库的性能与回滚段息息相关。本文将针对数据库回滚段常见的故障进行系统的分析,结合实例提出相应的解决方案,并对数据库回滚段...

    oracle数据库回滚段专题解析

    ### Oracle数据库回滚段专题解析 #### 回滚段概述 在Oracle数据库中,回滚段(Rollback Segment)是一种非常重要的数据结构,主要用于存储数据修改前的状态信息,即所谓的“前影像”。这一机制对于确保数据库的...

    Oracle回滚表空间数据文件误删除处理

    Oracle回滚表空间数据文件误删除处理是一个严重的问题,因为它涉及到数据库的核心组件——回滚段。回滚段在Oracle数据库中扮演着至关重要的角色,它们记录了事务的修改历史,确保了数据库的一致性,同时也为数据库...

    oracle 事务 回滚 存储过程

    在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...

Global site tag (gtag.js) - Google Analytics