`

Oracle Undo表空间介绍

 
阅读更多

UNDO表空间的作用和管理

概述

UNDO表空间用于存放UNDO数据,当执行DML操作(INSERTUPDATEDELETE)时,oracle会将这些操作的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的。从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间,因为规划和管理回滚段比较复杂,所有oracle database 10g已经完全丢弃用回滚段。并且使用UNDO表空间来管理UNDO数据。

UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性。当执行DML操作时,事务操作前的数据被称为UNDO记录。UNDO段用于保存事务所修改数据的旧值,其中存储着被修改数据块的位置以及修改前数据。

 

UNDO数据的作用

1、回退事务

当执行DML操作修改数据时,UNDO数据被存放到UNDO段,而新数据则被存放到数据段中,如果事务操作存在问题,旧需要回退事务,以取消事务变化。假定用户A执行了语句UPDATE emp SET sal=1000 WHERE empno=7788后发现,应该修改雇员7963的工资,而不是雇员7788的工资,那么通过执行ROLLBACK语句可以取消事务变化。当执行ROLLBACK命令时,oracle会将UNDO段的UNDO数据800写回的数据段中。

2、读一致性

用户检索数据库数据时,oracle总是使用用户只能看到被提交过的数据(读取提交)或特定时间点的数据(SELECT语句时间点)。这样可以确保数据的一致性。例如,当用户A执行语句UPDATE emp SET sal=1000 WHERE empno=7788时,UNDO记录会被存放到回滚段中,而新数据则会存放到EMP段中;假定此时该数据尚未提交,并且用户B执行SELECT sal FROM emp WHERE empno=7788,此时用户B将取得UNDO数据800,而该数据正是在UNDO记录中取得的。

3、事务恢复

事务恢复是例程恢复的一部分,它是由oracle server自动完成的。如果在数据库运行过程中出现例程失败(如断电,内存故障,后台进程故障等),那么当重启oracle server时,后台进程SMON会自动执行例程恢复,执行例程恢复时,oracl会重新做所有未应用的记录。回退未提交事务。

4、倒叙查询(FlashBack Query)

倒叙查询用于取得特定时间点的数据库数据,它是9i新增加的特性,假定当前时间为上午11:00,某用户在上午10:00执行UPDATE emp SET sal=3500 WHERE empno=7788语句,修改并提交了事务(雇员原工资为3000),为了取得10:00之前的雇员工资,用户可以使用倒叙查询特征。

UNDO配置参数

1UNDO_MANAGEMENT

该初始化参数用于指定UNDO数据的管理方式。如果要使用自动管理模式,必须设置该参数为AUTO,如果使用手工管理模式,必须设置该参数为MANUAL,使用自动管理模式时,oracle会使用undo表空间管理undo管理,使用手工管理模式时,oracle会使用回滚段管理undo数据。

需要注意,使用自动管理模式时,如果没有配置初始化参数UNDO_TABLESPACEoracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。

2UNDO_TABLESPACE

该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间。

RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的UNDO表空间。

3UNDO_RETENTION

该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始通过配置该初始化参数,可以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点。

UNDO_RETENTION参数用以控制事务提交以后UNDO信息保留的时间,UNDO信息可以减少ORA-01555错误及一系列的闪回查询操作。该参数以秒为单位,在Oracle 9iR1中初始值为900秒,在Oracle 9iR2增加为10800秒。Oracle 10g后是尽可能的保留长时间,但是这是一个非担保性(NO Guaranteed)限制,也就是说,如果有其他事务需要回滚空间,而空间出现不足时,这些信息仍然会被覆盖,很多时候这是不希望被看到的,除非对undo表空间启用guarantee

 

 

一般存在三种STATUS状态:EXPIREDUNEXPIREDACTIVE ACTIVE表示目前仍活跃的事务相关回滚信息,UNEXPIRED表示虽然事务已经结束但回滚信息保留的时间仍未超过实例参数 UNDO_RETENTION所设定的值,EXPIRED表示回滚信息保留时间已超过UNDO_RETENTION所设定的值。

 

UNDO表空间的维护

1、确定当前例程正在使用的UNDO表空间:

Show parameter undo_tablespace

2、显示数据库的所有UNDO表空间:

SELECT tablespace_name FROM dba_tablespaces WHERE contents='UNDO';

 

开启或关闭撤销保留

<!--[if !supportLists]-->1、   <!--[endif]-->查询撤销表空间保留情况

SQL> select retention from dba_tablespaces where tablespace_name ='UNDOTBS1';

RETENTION

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

NOGUARANTEE

 

<!--[if !supportLists]-->2、   <!--[endif]-->开启撤销信息的保证保留

SQL> alter tablespace UNDOTBS1 retention guarantee;

Tablespace altered.

 

<!--[if !supportLists]-->3、   <!--[endif]-->关闭撤销信息的保证保留

SQL> alter tablespace UNDOTBS1 retention noguarantee;

Tablespace altered.

 

建立UNDO表空间

UNDO表空间专门用于存放UNDO数据,并且在UNDO表空间尚不能建立任何数据对象(表,索引,簇)

1、使用CREATE DATABASE命令建立UNDO表空间

当使用CREATE DATABASE命令建立数据库时,通过指定UNDO TABLESPACE选项,可以建立UNDO表空间。示例如下:

CREATE DATABASE db01

UNDO TABLESPACE undotbs_01

DATAFILE ‘/u01/oracle/rbdb1/undo01.dbf’ SIZE 30M;

注意:UNDO TABLESPACE 子句不是必须的,如果使用自动UNDO管理模式,并且没有指定该子句,那么建立数据库时会自动生成名为SYS_UNDOTBSUNDO表空间。

2、使用CREATE UNDO TABLESPACE命令建立UNDO表空间。

CREATE UNDO TABLESPACE undotbs3

DATAFILE ‘/u01/oracle/rbdb1/undo03.dbf’ SIZE 10M;

修改UNDO表空间

使用ALTER TABLESPACE命令修改UNDO表空间。

当事务用尽了UNDO表空间后,使用ALTER TABLESPACE ADD DATAFILE增加数据文件。

UNDO表空间所在的磁盘填满是,使用ALTER TABLESPACE RENAME DATAFIEL 命令移动数据文件到其他磁盘上。

使用ALTER DATABASE OFFLINE/ONLINE使表空间脱机/联机。

当数据库处于ARCHIVELOG模式时,使用ALTER TABLESPACE BEGIN BACKUP/END BACKUP命令备份UNDO表空间。

切换UNDO表空间

启动例程并打开数据库后,同一时刻特定例程只能使用一个UNDO表空间,切换UNDO表空间是指停止例程当前使用的UNDO表空间,并启动其他UNDO表空间,下面以启用undotbs2表空间为例,说明切换UNDO表空间的方法。

ALTER SYSTEM SET undo_tablespace=undotbs02;

RAC(Real Application Cluster)架构中,不同例程必须使用独立的UNDO表空间,而不能共用同一个UNDO表空间。

删除UNDO表空间

当前例程正在使用的UNDO表空间是不能被删除的,如果确定要删除当前例程正在使用的UNDO表空间,应首先切换UNDO表空间.然后删除相应的UNDO表空间。

DROP TABLESPACE undotbs

分享到:
评论

相关推荐

    脚本-Oracle释放过度使用的Undo表空间

    通过本文档介绍的方法,我们可以有效地管理和优化Oracle数据库中的Undo表空间,避免因过度使用而导致的性能问题。在日常运维中,建议定期检查Undo表空间的使用情况,并根据实际情况采取相应的措施,以确保数据库系统...

    oracle Undo表空间管理

    oracle Undo表空间管理,oracle 学习人员必看的不可缺少的资料。

    oracle 收缩undo表空间

    本文将详细介绍如何通过新建一个Undo表空间并替换原有的Undo表空间来实现其收缩的目的。 #### 二、Undo表空间的重要性 Undo表空间主要用于存储事务处理中的Undo记录。这些记录包含了事务开始前的数据状态,以便在...

    收缩Oracle数据库的undo表空间

    演示如何收缩Oracle数据库的undo表空间

    Oracle中重做undo表空间

    当事务开始时,系统会为事务分配一段undo空间来记录它的更改。当事务提交或回滚时,这些记录的undo信息会根据需要保留一定时间,这个时间段称为UNDO_RETENTION参数定义的保留期。 2. **重做日志与回滚操作** 重做...

    地震前兆Oracle数据库UNDO表空间持续增长修复.pdf

    接着,当日志错误排除后,发现UNDO表空间仍在增长,通过v$transaction视图发现SMON进程(System Monitor进程)在长时间执行事务,消耗大量UNDO空间。尝试通过ALTER SESSION命令结束SMON会话无效,且考虑到数据库安全...

    oracle 9i UNDO表空间数据文件丢失恢复

    本文将详细介绍Oracle 9i环境下UNDO表空间数据文件丢失后的恢复步骤及注意事项。 #### 二、准备工作 1. **登录到Oracle数据库**: - 使用命令`sqlplus /nolog`以非登录方式打开SQL*Plus。 - 输入`connect / as ...

    Oracle的Temp表空间和UNDO表空间的处理

    通过以上介绍可以看出,在Oracle数据库中,正确管理和优化Temp表空间和UNDO表空间是非常重要的,尤其是对于那些执行大量排序、分组操作以及频繁进行事务处理的应用系统来说。合理利用Resize调整大小、替换原有表空间...

    ORACLE的UNDO表空间

    ORACLE的UNDO表空间 ORACLE的UNDO表空间是Oracle数据库中一个非常重要的组件,playing a crucial role in maintaining data consistency and providing a way to undo changes made to the database. 在本节中,...

    数据库undo表空间问题集锦

    在Oracle数据库系统中,"undo表空间"是一个至关重要的组成部分,它主要负责存储事务的回滚(rollback)信息。本文将深入探讨undo表空间的概念、作用、管理以及常见问题的处理,帮助你全面理解并有效地解决数据库undo...

    Oracle临时表空间满的解决步骤

    本文将详细介绍解决 Oracle 临时表空间满的问题的步骤。 第一步:查看当前数据库的默认临时表空间 在解决临时表空间满的问题前,需要先查看当前数据库的默认临时表空间。可以使用以下 SQL 语句来实现: ```sql ...

    oracle undo

    undo 段急剧增大是指 undo 段的空间急剧增加,从而导致 undo 表空间的扩展问题。这种问题的原因是由于事务没有提交,或者是undo_retention 时间设置不当,导致 undo 块不能被重用。 解决 undo 段急剧增大问题的方法...

    undo表空间恢复

    标题和描述均提到了“undo表空间恢复”,这在Oracle数据库管理中是一个关键主题,尤其对于数据恢复和事务处理有着重要影响。以下是对这一知识点的深入解析: ### 一、Undo表空间概述 Undo表空间是Oracle数据库中...

    Oracle 12c中的表空间管理、用户和角色、临时Undo.pdf

    在Oracle 12c数据库中,表空间管理、用户和角色、临时Undo是数据库管理的关键组成部分。以下是对这些内容的详细解释和操作方法: 一、创建表空间 在Oracle 12c中,创建表空间主要涉及到声明一个新的逻辑区域,用于...

    oracle undo详解

    Oracle提供自动Undo管理,通过设置UNDO_MANAGEMENT=AUTO和UNDO_TABLESPACE=UNDOTBS1,数据库将自动处理Undo空间的管理。这样可以减少DBA的维护工作,但仍然需要根据系统负载和事务特性来合理调整Undo表空间的大小,...

    oracle创建表空间用户等

    本文将详细介绍如何在Oracle数据库中创建表空间、创建用户并分配相应的权限,以及如何设置表空间的自增长和修改其大小。 #### 一、创建表空间 表空间是Oracle数据库中的逻辑存储单元,它由一个或多个数据文件组成...

    相克军 ORACLE 讲座 深度剖析UNDO段 笔记.doc

    UNDO表空间用来存放改变前的旧值。里面也有段区块,ORACLE自动建立生成、自动使用UNDO段。 作为高级别的DBA是需要知道ORACLE如何使用UNDO段的。 1 Undo表空间及管理方式 ORACLE开始一个事务的时候,会用到表空间。...

    管理undo表空间全面分析详解

    通过对DML语句与undo的关系、undo的作用及其管理方式的深入探讨,我们可以清楚地认识到undo表空间在Oracle数据库中的重要性。无论是提供一致性读、支持事务回滚还是实例恢复,undo表空间都是保证数据完整性和系统...

    Oracle 9i数据库中自动Undo表空间管理.pdf

    Oracle 9i数据库引入了一项重要的改进,即自动Undo表空间管理,这极大地简化了数据库管理员对于回退段的管理工作。回退段是Oracle数据库中一个关键的组成部分,它存储了事务对数据进行修改前的原始值,这些信息用于...

Global site tag (gtag.js) - Google Analytics