会滚段

[转载]【原创】回滚段的一点理解

(2012-08-22 23:34:38)

转载▼

原文地址:【原创】回滚段的一点理解作者:Ryan

UNDO表空间用于支持事务和数据的一致性。具体说,回退段的四大作用:交易的回退:没有提交的交易可以后悔.交易的恢复:数据库崩溃的时候,将写入磁盘的不正确数据恢复到交易前.读一致性:查询时结果集已经确定.闪回数据:从回退段中构造历史的数据.
   在一个数据库中可以存在多个UNDO表空间,不过任一时刻只能有一个UNDO表空间被激活。如果UNDO表空间设置过小会出现“ORA-01555"错误。

在RAC环境,对UNDO的要求是:1)、所有实例的UNDO_MANAGEMENT必须相同;2)、必须为每个实例指定一个UNDO_TABLESPACE;

管理回滚段方式:1)、手动管理 2)、自动管理(AUM)。两者区别:回滚段的名称由之前的ROLLBACK SEGENTMENT 变成了UNDO SEGMENT。 AUM时不能也不需要执行create/drop rollback segment 或者online/offline segment等操作.但在回滚段损坏,通常还要借助手工管理的方法才能修复。

AUM之后,ORACLE就会:

1)、自动创建1个系统回滚段,这个回滚段放在SYSTEM表空间上,并且名称为SYSTEM;

2)、自动创建N个用户UNDO segment,n是根据参数SESSION的值确定的;这些用户回滚段会自动命名成_SYSSMUn$的格式;每个回滚段都是由PUBLIC所有;不再需要手工维护每个回滚段。

与回滚段相关的视图:

v$rollname和v$rollstat、DBA_ROLLBACK_SEGS、DBA_UNDO_EXTENTS 等;

查看定期集群中所有回滚段信息:

select segment_id,segment_name,owner,tablespace_name,status,instance_num from dba_rollback_segs

order by 1 ;

通过STRING命令得到回滚段的信息:

如果数据库无法打开,无法通过dba_rollback_segs获得ROLLBACK SEGMENT列表,也可以通过STRING命令获得列表

[root]strings system01.dbf |grep _SYSSMU|cut -d $ -f 1 |sort -u

查询当前未提交事务正在使用的回滚段:

select s.username,t.start_time,r.name name,t.ubafil,t.ubablk,log_io,phy_io

from v$transaction t,v$rollname r,v$rollstat rs,v$session s where t.xidusn=r.usn

and  t.ses_addr=s.saddr and rs.usn=r.usn  and s.sid in (select distinct sid from v$mystat);

涉及的相关的隐含参数是_offline_rollback_segments _corrupted_rollback_segments.

在自动UNDO管理模式下,我们有时仍然想手动删除UNDO段。比如某个UNDO段出现了逻辑坏块。
下面首先来看看,直接删除UNDO段能不能成功。

SQL> drop rollback segment "_SYSSMU9$";

  1. drop rollback segment "_SYSSMU9$"
  2. *
  3. ERROR 位于第 1 行:
  4. ORA-30025: 不允许 DROP 段 ‘_SYSSMU9$‘ (在撤消表空间中)

看来是行不通的。那么怎么样才能删除呢?试试下面的办法:

SQL> alter session set "_smu_debug_mode"=4;

  1. 会话已更改。
  2. SQL> drop rollback segment "_SYSSMU9$";
  3. drop rollback segment "_SYSSMU9$"
  4. *
  5. ERROR 位于第 1 行:
  6. ORA-01545: 指定的回退段‘_SYSSMU9$‘不可用

还是不行。下面我们看看UNDO段的状态:

SQL> select segment_name,status from dba_rollback_segs;

  1. SEGMENT_NAME                   STATUS
  2. ------------------------------ ----------
  3. SYSTEM                         ONLINE
  4. _SYSSMU1$                      ONLINE
  5. _SYSSMU2$                      ONLINE
  6. _SYSSMU3$                      ONLINE
  7. _SYSSMU4$                      ONLINE
  8. _SYSSMU5$                      ONLINE
  9. _SYSSMU6$                      ONLINE
  10. _SYSSMU7$                      ONLINE
  11. _SYSSMU8$                      ONLINE
  12. _SYSSMU9$                      ONLINE
  13. _SYSSMU11$                     OFFLINE

发现这个要删除的UNDO状态为ONLINE。下面我们将UNDO段置为OFFLINE状态,再删除:

SQL> alter rollback segment "_SYSSMU9$" offline;

  1. 回退段已变更。
  2. SQL> drop rollback segment "_SYSSMU9$";
  3. 回退段已删除。

可以看到UNDO段已经被删除。这里首先把UNDO段OFFLINE,然后再DROP。值得注意的是,在没有修改”_smu_debug_mode”的情况下,UNDO段是不能OFFLINE的。

总结:
要在UNDO自动管理模式下删除UNDO段,需要三个步骤:

  • 执行alter session set “_smu_debug_mode”=4;
  • 执行 alter rollback segment “undo-segment-name” offline;
  • 执行 drop rollback segment “undo-segment-name” ;
时间: 2024-10-07 03:20:41

会滚段的相关文章

mysql5.6和mysql5.7分配undo回滚段的区别

1.mysql5.7中分为2类:临时表空间回滚段和普通回滚段. 2.mysql5.6中没有区分. As of MySQL 5.7.2, 32 undo logs are reserved for use by temporary tables and are hosted in the temporary table tablespace (ibtmp1). To allocate additional undo logs for data-modifying transactions that

Oracle Undo回滚段深入解析_超越OCP精通Oracle视频课程培训15

oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习oracle数据库UNDO的作用及相关数据字典,UNDO自动管理,DDL与DML操作与UNDO的关系,UNDO表空间满了怎么办?模拟ora-01555,UNDO表空间损坏怎么处理?Undo段头/回滚块/事务槽解析,UNDO回滚段头的深入分析,事务提交前后oracle内部操作?深入分析前镜像及一致性读. 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址: http:

简单了解Oracle的回滚段

因为上一次研究了Oracle的事务一致性,中间查阅资料的时候,看到这个地方与回滚段有关.所以就罗列了以下简单的知识.更为深层次的就不再深挖了,个人感觉对于事务的一致性和隔离级别是开发经理应该了解的,但是回滚段的具体机制应该是DBA的学习范畴了. 回滚段(ROLLBACK SEGMENT)的作用: 回滚段是在事务中间过程中,将修改前的状态记录下来,记录的过程中加上类似时间戳的scn.它的主要作用有两个: 当事务出现错误回滚的时候,原始数据可以从回滚段中找回. 实现读一致性.当读操作读取到某一行,发

查询oracle 数据库中回滚段中一个时间点被修改的表数据并还原表中原来数据

利用下面的SQL就可以查处最近更改的数据. SQL> SELECT ID,NAME,VERSIONS_STARTTIME,VERSIONS_ENDTIME,VERSIONS_OPERATION FROM TEST VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE VERSIONS_STARTTIME IS NOT NULL ORDER BY VERSIONS_STARTTIME DESC; 通过以上小实验可以看出,VERSIONS_ST

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

回滚段概述  回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息. 回滚段的作用  事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值. 事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORA

Undo(回滚段)对应的系统参数

回滚段表空间,为什么叫Undo,而不是rollback?我们对数据库操作理解为do,所以反向操作就是undo,通过对应的undo就可以达到回滚目的. 第一行,undo_management 为AUTO表示自动回滚段管理,空间不够时自动扩展. 第二行,undo_retention 为900表示DML需要记录前镜像,当commit后,回滚段前镜像被打上了可以覆盖重新使用的标记,但要在900秒后才可以. 第三行,UNDOTBS1为回滚段表空间的名字 原文地址:https://www.cnblogs.c

oracle undo回滚段详解

1.Undo是干嘛用的?   在介绍undo之前先说一下另外一个东西 transaction ,翻译成交易或事务.我们在进行一个事务的过程中需要申请许多资源,一个复杂的事务也需要很多步来完成.那么一个复杂的事务是只有两个结果,要么成功,要么失败(相当于从来没发生过). 一个很典型的列子,银行转账,其实其需要两步操作,第一步先将你账户上的钱减去,第二步把被转账户的钱加上,(先减后加,出了问题银行不吃亏.呵呵!)这样就是一个完整的事务.如果执行了一半,你的钱减了,被转账户的钱没加上,这个时候事务就要

数据库逻辑存储结构管理(5)-存储-表空间段区块

查看表空间信息SELECT * FROM V$TABLESPACE 查看表空间数据文件路径信息SELECT * FROM DBA_DATA_FILES; 查看表空间的属性信息SELECT * FROM DBA_TABLESPACES 查看表空间组及其所属的表空间的信息SELECT * FROM DBA_TABLESPACE_GROUPS查看表空间里面的表的组成SELECT SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME FROM DBA_SEGMENTS WH

关于oracle实例恢复的前滚和回滚的理解

关于oracle实例恢复的一些理解,一直都有误区,今天通过查看相关资料和与同学探讨,发觉了自己的错误,探讨结果如下: 实例恢复:当数据库非正常关闭的时候(断电或者shu  abort等等非一致性关闭),当你从新启动数据库的时候,数据库相关进程自动进行实例恢复,无须人工干预. 什么时候需要实例恢复 在shutdown normal or shutdown immediate下,也就是所谓的clean shutdown,checkpoint也会自动触发,并且把SCN纪录写回. 当发生checkpoi