/* 撤销表空间 */

通过使用撤销技术,能够为Oracle数据库提供以下功能:

* 使用ROLLBACK语句撤销事务

* 进行数据库恢复

* 提供数据的读一致性

Oracle强烈建议DBA在Oracle 9I数据库中应用自动撤销管理方式,任何数据库用户都不能在撤销表空间中创建对象,在撤销表空间中只能保存撤销记录.

SQL> show parameter undo

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO

undo_retention                       integer     10800

undo_suppress_errors                 boolean     FALSE

undo_tablespace                      string      UNDOTBS1

undo_management--auto 自动撤销管理方式(撤销表空间方式)

               --manual 手工撤销管理方式(回退段方式)

undo_retention -- 撤销记录保存的最长时间

创建和管理撤销表空间

1.在创建数据库时建立撤销表空间

create database db01

......

undo tablespace undotbs01

 datafile 'i:/oracle/oradata/undotbs0101.dbf'

....;

2.在数据库建立之后创建撤销表空间

create undo tablespace undotbs02

 datafile 'i:/oracle/oradata/undotbs0201.dbf'

 autoextend on;

(建议将撤销表空间的数据文件增长方式设置为自动增长方式)

修改撤销表空间

用户只能对撤销表空间进行如下操作

* 添加新的数据文件

* 重命名数据文件

* 更改数据文件大小

* 将数据文件切换为联机或脱机状态

alter tablespace undotbs01

  add datafile 'i:/oracle/oradata/undotbs0102.dbf'

  autoextend on

  next 1M

  MAXSIZE UNLIMITED;

alter database

  datafile 'i:/oracle/oradata/undotbs0101.dbf'

  resize 500M;

删除撤销表空间

(只有在撤销表空间没有被数据库使用时才能删除,如果撤销表空间中包含有未决事务的撤销记录,也不能删除表空间)

drop tablespace untotbs01;

drop tablespace untotbs01 include contents and datafiles;

切换撤销表空间(undo_tablespace是一个动态初始化参数)

alter system set undo_tablespace = undotbs02;

如果存在下列情况,上面的切换操作将产生错误:

* 指定的撤销表空间不存在

* 指定的表空间不是一个撤销表空间

* 指定的表空间正在被其它实例使用

在成功的切换撤销表空间后,任何新开始的事务都将在新的撤销表空间中保存撤销记录,但是在旧的撤销表空间中可能还保留

有当前未提交的撤销记录

undo_retention参数:指定撤销记录的保留时间,以秒为单位,是一个动态参数

如:将保留时间设置为30分钟 undo_retention = 1800 

alter system set undo_retention = 600;

注意:撤销记录在撤销表空间中保留的时间并不一定大于UNDO_RETENTION参数说指定的时间,如果在新事务开始时,撤销表

空间已经被写满,新事务将覆盖已提交事务的撤销记录,即使这些撤销记录还未过期.因此,如果为UNDO_RETENTION参数设置了较大的值,那么必须保证撤销表空间具有足够的存储空间.

当oracle无法利用撤销(回退)记录来保证数据的读一致性时,将产生“快照太旧”错误.

这个错误通常发生在执行一个运行时间很长的查询时,由于与查询所需相关的撤销记录已经被覆盖,因此Oracle无法为查询提供正确的读一致性视图.

假设有这样的情况:

用户SCOTT对EMP表进行了更新,但是他还没提交更新事务,EMP表中更新前的数据被保存在SCOTT事务的撤销记录中.

这时,如果有另外一个用户JAKE也开始访问EMP表,Oracle将利用这些撤销记录来提供EMP表中数据的读一致性视图.假设JAKE的查询会持续很长一段时间,Oracle将持续用到这些撤销记录。在这个过程中,SCOTT用户可以提交他的事务,事务提交后,存储在撤销表空间(或回退段)中的SCOTT事务的撤销记录被标记为失效,它可能会被其它事务的撤销记录所覆盖,或者在Oracle缩减回退段时被释放,这时JAKE用户的查询如果还没有结束,可能会产生“快照太旧”错误.

解决办法:

* 在手工撤销管理方式下,DBA必须为运行时间较长的查询指定一个较大的回退段(具有较大的MINEXTENTS和OPTIMAL参数值的回退段).

* 在自动撤销管理方式下,DBA只需要指定一个较大的UNDO_RETENTION参数值,并且保证撤销表空间具有足够的存储空间.

撤销表空间数据字典

v$undostat 包含所有撤销表空间的统计信息,用于对撤销表空间进行监视和调整,DBA可以利用这个视图

  来估算撤销表空间的大小

v$rollstat 在自动撤销管理方式下,可以利用该视图来查询关于撤销表空间的各个撤销段的信息

v$transaction 关于各个事务所使用的撤销段的信息

/* 管理回退段 */

如果为数据库建立多个回退段,Oracle会将事务平均分配给各个回退段,这样能够显著地提高系统地回退处理性能.

创建回退段

create rollback segment rbs_02 tablespace rbstbs

storage(initial 100K

 next 100k

 optimal 5M

 pctincrease 0

 minextents 20

 maxextents 100);

(pctincrease存储参数要为0,将initial和next参数设置为相同的值,这样回退段中所有的区都应当具有相同的大小,optimal参数的值不能小于initial+next*(minextents-1),如果不设置的话,ORACLE将使用NULL做为默认值,为MINEXTENTS参数设置一个较大的值,不要将MAXEXTENTS参数设置为UNLIMITED,可以避免由于出现一个异常事务而导致为回退段分配过多的存储空间)

新建的回退段如果要做为私有回退段使用,可以将它的名称添加到初始化参数ROLLBACK_SEGMENTS中

ROLLBACK_SEGMENTS = (rbs_01,rbs_02)

更改回退段的存储参数

alter rollback segment rbs_02

storage (maxextents 120);

alter rollback segment rbs_02

storage(optimal 8M);

缩减回退段

如果在创建回退段时通过设置OPTIMAL存储参数指定了最优大小,ORACLE会在回退段超过最优大小时自动缩减回退段,DBA也可以手工缩减回退段,回退段

的缩减操作只有在没有活动事务使用该回退段时进行

假设回退段RBS_02的最优大小为5M

alter rollback segment rbs_02 shrink to 5M

显示分配回退段

set transaction use rollback segment large_bs01

(set transaction语句必须是事务的第一条执行语句)

删除回退段(必须先让它脱机,如果回退段处于任何非OFFLINE状态,都不能对它执行删除操作,之后必须在rollback_segment参数中也删除)

drop rollback segment rbs_02

回退段数据字典:

dba_rollback_segs 所有回退段的信息

v$rollname  所有联机回退段的名称

管理回退段的重要工作之一就是设置一个合理的OPTIMAL参数值,DBA可以首先通过查询V$ROLLSTAT视图以获得该回退段的AVEACTIVE字段值,然后将

OPTIMAL的值设置为稍稍高于AVEACTIVE值.

oracle撤销表空间和回滚段的更多相关文章

  1. ORA-01552 非系统表空间不能使用系统回滚段处理

    今天新搭建了一个10g的测试数据库,运行都很正常,但是在打开autotrace功能后执行语句,报错 SQL> set autotrace on SQL> select username,s ...

  2. 如何删除回滚段状态为NEEDS RECOVERY的undo表空间

    环境:RHEL 6.4 + Oracle 11.2.0.4 背景:备份恢复的测试库在一次不完全恢复后,没有来及做有效的全备,又一次数据库故障导致数据库无法正常open. 只能离线部分数据文件打开数据库 ...

  3. Oracle创建、管理撤销表空间

    撤销管理模式: 用户通过设定撤销管理模式(undo mode)就可以灵活地选择使用手动撤销管理(manual undo management)或自动撤销管理(automatic undo manage ...

  4. Oracle 手工清除回滚段的几种方法

    关于回滚段的问题,之前也小整理过一个,参考: Current online Redo 和 Undo 损坏的处理方法 http://blog.csdn.net/tianlesoftware/articl ...

  5. Oracle 回滚段undo

    Undo的作用 数据的回滚 一致性读 表的闪回(事务,查询的闪回..) 失败会话的恢复 回滚rollback操作 SQL> archive log list; ORA-01031: 权限不足 S ...

  6. Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)

    UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据.你听说UNDO也是 ...

  7. Oracle创建新undo表空间最佳实践(包含段检查)

    在处理一则ORA-600 [4194]案例时,参考MOS文档:Step by step to resolve ORA-600 4194 4193 4197 on database crash (文档 ...

  8. oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

    数据文件和日志文件是数据库中最关键的文件.它们是数据存储的地方.每一个数据库至少有一个与之相关的数据文件,通常情况下不仅仅一个,有非常多.数据在数据文件里是怎样组织的?要了解这些内容我们首先必须理解什 ...

  9. [Oracle]关于回滚段的一些转贴摘录

    ORACLE 回滚段 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段 ...

随机推荐

  1. Tomcat解压版配置详解(Tomcat8示例)

    注:请在JDK安装后操作以下内容 1.  下载Tomcat解压缩安装包 http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.45/bin/apac ...

  2. STL—vector空间的动态增长

    vector空间的动态增长     当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间.vect ...

  3. thinkphp分页带数据

    因为用thinkphp做分页时候点击下一页后搜索栏的数据会清空,然后点击下一页后刷新完了就没有内容了,感觉网上查找和我自己研究在不适用ajax做分页的情况下用以下代码就可以实现!!通过把值扔地址栏来进 ...

  4. Easyui+MVC+FullCalendar插件实现日程记录功能

    好久好久好久,,,没有写博客了,,久到账号都忘记了....分享一个干货.... 废话少说,先看看效果图. 要实现这样一个功能,先创建一个用于存储日程的记录表(不要问我为什么都是大写,因为初版在orac ...

  5. 中国(北方)大学生程序设计训练赛(第一周) (D E)

    比赛链接 D题是个二分,每次check复杂度为O(n),类似于xdu_1068,只是一个是求积,一个是求商 #include<bits/stdc++.h> using namespace ...

  6. [bzoj 2243]: [SDOI2011]染色 [树链剖分][线段树]

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ ...

  7. JavaScript系统学习小结——变量、作用域和内存问题

    趁着写完小论文还未彻底消散的学习氛围,开始着重巩固自己JavaScript的基础知识,为秋招做最基本的准备. 变量:Js的变量可能保存两种不同数据类型的值:基本类型值和引用类型值. 基本类型包括:Un ...

  8. MySql 求一段时间范围内的每一天,每一小时,每一分钟

    平常经常会求一段时间内的每一天统计数据,或者每一时点的统计数据.但是mysql本身是没有直接获取时点列表的函数或表.下面是自己用到的一些方法,利用临时变量和一个已存在的比较多数据(这个需要根据实际情况 ...

  9. Eclipse 改变字体大小,设置背景色

    Eclipse背景颜色修改: 操作界面默认颜色为白色.对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些.设置方法如下: 1.打开win ...

  10. node-xlsx

    1.安装 必要组件 npm install node-xlsx -S /*Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator.Generator ...