undo表空间

Posted Leo_wlCnBlogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了undo表空间相关的知识,希望对你有一定的参考价值。

undo表空间

一、回退段介绍

在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中。一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段。

(1)回退段的作用

回退段主要有4个作用,分别是:事物回滚、数据库恢复、读一致性、闪回查询。

  --事物回滚:当事物执行失败或用户执行回滚操作(rollback)时,Oracle会利用保存在回退段中的信息将数据恢复到原来的值;

  --数据库恢复:当数据库实例运行失败,在数据库重启恢复时,Oracle先利用重做日志文件的信息对数据库进行恢复(包括已提交和未提交的事务),再利用回滚段中的信息回滚未提交的事务;

  --读一致性:当一个用户对数据进行修改时,会预先将其原始值保存到回退段中,这时,如果有其它用户访问该数据,则访问回退段中的信息,使当前用户未提交的修改其他用户无法看到,保证了数据的一致性;

  --闪回查询:通过保留在回退段中的信息,用户可以查询某个数据在过去某个时刻的状态

 

(2)回退段的工作方式

当事务开始时,系统分配给该事物一个回退段,在事务的整个生命周期中,当数据发生改变时,数据的原始值被复制到回退段中。回退段采用循环写的方式进行工作,当事务写满回退段的一个区之后,会接着写入回退段的下一个区,当所有的区都写满后,事务开始循环写入到第一个区或者分配新的区(datafile为autoextend)。回退段归用户sys所有,每个回退段至少包含2个区。

 

二、回退表空间的管理

(1)创建undo表空间

在Oracle 11g中,创建undo tablespace有2种方法,一种是在创建数据库时创建undo tablespace,另一种是使用create undo tablespace来创建undo tablespace。undo tablespace用来保存事务的回退信息,用户不能在其中创建数据库对象。

我们这里介绍如何使用craete undo tablespace 来创建undo表空间。

复制代码
--使用create undo tablespace
CREATE [BIGFILE | SMALLFILE]UNDO TABLESPACE tbs_name
DATAFILE \'path/filename\' SIZE integer [K | M] [REUSE]
[AUTOEXTEND] [OFF | ON] NEXT integer[K | M] MAXSIZE [UNLIMITED | integer [K | M] ]
[EXTENT MANAGEMENT LOCAL] [AUTOALLOCATE]
[RETENTION GUARANTEE | NOGUARANTEE]
复制代码

 

(2)修改undo表空间

可以使用alter tablespace修改undo表空间,允许对undo表空间进行如下操作:

  --添加undo表空间的数据文件;

  --重命名undo表空间的数据文件;

  --将undo表空间的数据文件联机或脱机;

  --启用或禁用保护回退信息在回退段中的保留时间;

例子1、当undo表空间容量不足时,可以考虑增加新的数据文件或改变数据文件的大小

--为undo tablespace添加新的数据文件
alter tablespace undotbs1 add datafile \'/home/app/oracle/oradata/orcl/untbs02.dbf\' size 50M;

--将undo tablespace里面的untbs02.dbf文件扩充为100M
alter database datafile \'/home/app/oracle/oradata/orcl/untbs02.dbf\' resize 100M;

 

(3)删除undo表空间

与普通表空间一样,可以使用drop tablespace来删除undo表空间,但是不能删除当前正在使用的undo表空间。如果在undo表空间中含有任何未提交的事务的回退信息,则不能使用drop tablespace来删除表空间。此外,即使已经使用drop tablespace删除了undo表空间,在该表空间中也可能存在未过期的回退信息,这样导致某些查询所需的回退信息丢失。因此,在删除时应该注意,不要删除这样的undo表空间。

 

(4)切换undo表空间

在数据库运行过程中,可以从一个undo表空间切换到另一个undo表空间,由于初始化参数undo_tablespace是一个动态参数,直接修改即可,无需重启实例,切换方式如下:

ALTER SYSTEM SET UNDO_TABLESPACE = undotbs_name

在以下情况,undo表空间切换会发生错误:

  --指定的undo表空间不存在;

  --指定的表空间不是undo表空间;

  --指定的undo表空间正在被其它实例使用;

在完成undo表空间的切换后,任何新的事物的回退信息都会进入新的undo表空间中,如果旧的undo表空间还存在未提交的事务,则旧的undo表空间进入“挂起脱机状态”,“挂起脱机状态”的undo表空间不能被新的事务使用,也不能删除,当前未提交的事务将继续使用该表空间。当所有事务都提交完成后,旧的undo表空间进入脱机状态。

例子2、切换undo表空间

复制代码
--切换undo表空间
--实验目的:
--   1.学会切换undo表空间
--   2.学会删除undo表空间    
12:40:16 SQL> show parameter undo_tablespace                                        --【窗口1】查看当前undo表空间
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

12:45:59 SQL> insert into dept values(50,\'a\',\'b\');                                  --【窗口1】执行一条insert语句,且不提交
1 row inserted

SQL> alter system set undo_tablespace = UNDOTNS2;                                   --【窗口2】切换undo表空间
System altered
 
SQL> show parameter undo_tablespace;                                                --【窗口2】查看新的表空间
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTNS2


SQL> drop tablespace undotbs1 including contents and datafiles;                     --【窗口2】删除旧的表空间,报错,提示旧的表空间正在使用
ORA-30013: undo tablespace \'UNDOTBS1\' is currently in use

12:53:02 SQL> commit;                                                               --【窗口1】提交事务

SQL> drop tablespace undotbs1 including contents and datafiles;                     --【窗口2】过一段时间之后,成功删除
 
Tablespace dropped
复制代码

 

(5)回退信息保留时间

前面我们讲了回退信息的4个作用,当我们提交了事务之后,回退信息对于事务回滚以及数据库恢复已经不再起作用。但是,对于一个长事务而言,具有读一致性的作用,保证查询到的信息一直是旧的信息。此外,数据库的各种闪回操作的实现也需要回退段中的信息。Oracle根据undo表空间的大小以及事物量的多少自动调整回退信息的保留时间,可通过调整初始化参数undo_retention设置回退信息在回退段中的保留时间:

-- 将回退信息的保留时间设置为1800s

SQL > ALTER SYSTEM SET UNDO_RETENTION = 1800 ;

需要注意的是,undo_retention是Oracle的一个”软设置“,这个”软设置“如何理解呢?例如,当用户将UNDO_RETENTION参数设置为1800s后,Oracle会尽量的将回退信息保存1800s,但是,在这个过程中,如果回退表空间不够用了,新的回退信息依然会将未达到1800s的回退信息覆盖。

为了保证长时间的查询的读一致性以及各种闪回操作,我们也可以指定回退信息必须保留到undo_retention规定的时间,通过启用undo表空间的retention guarantee特性,保证只有过期(已提交且达到undo_retention设定的值)的数据才会被覆盖,即使undo表空间容量已经不足,也不会覆盖未过期的回退信息。

--启用retention_guarantee

SQL > ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;

 

三、查询undo表空间

与undo表空间相关的数据字典如下:

数据字典 解释
v$undostat 包含所有undo表空间的统计信息,用于对undo表空间进行监控和调整。
通过该视图,可以估计当前undo表空间的大小,Oracle利用该视图完成对回退信息的自动管理,该视图数据是有最近4天内,每10分钟产生一条统计记录构成的。
v$rollstat 包含undo表空间中回退段的性能统计信息
v$transaction 包含事务所使用的回退段信息
dba_undo_extents 包含undo表空间中区的大小与状态信息
dba_hist_undostat 包含v$undostat的快照,主要是4天前的统计信息

例子3、查询undo表空间中回退信息的当前状态

复制代码
SQL> select tablespace_name,segment_name,extent_id,status from dba_undo_extents;
 
TABLESPACE_NAME                SEGMENT_NAME                    EXTENT_ID STATUS
------------------------------ ------------------------------ ---------- ---------
UNDOTBS3                       _SYSSMU10_968665341$                    0 UNEXPIRED
UNDOTBS3                       _SYSSMU10_968665341$                    1 EXPIRED
UNDOTBS3                       _SYSSMU9_3484649867$                    0 UNEXPIRED
UNDOTBS3                       _SYSSMU9_3484649867$                    1 EXPIRED
...                            ...                                  ...  ...
复制代码

undo表空间中区的状态一共有3种:EXPIRED、UNEXPIRED、ACTIVE。

--EXPIRED:表示该回退信息对应的事务已经提交,保存时间超过保留区;

--UNEXPIRED:表示该回退信息对应的事务已经提交,保存时间没有超过保留区;

--ACTIVE:表示回退信息对应的事务还没有提交,该区还在使用;

 

随笔分类 - Oracle

这里记录我的Oracle学习日记
摘要: 在Toad中发现undo表空间undotbs1使用量已经达到100%,但是奇怪的是数据库并没有hang住,依然可以正常运转 通过Oracle提供的EM查看undotbs1表空间的使用,也达到了78.8 在上一篇文章中,我们介绍了undo表空间中区的3种状态:ACTIVE、EXPIRED、UNEXPIRED。在对其概念理解后,个人认为在未设置undo表空间retention guarantee的...阅读全文
posted @ 2017-10-01 18:08 gegeman 阅读(12) | 评论 (0) 编辑
 
摘要: 一、回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中。一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段。 (1)回退段的作用 回退段主要有4个作用,分别是:事物回滚、数据库恢复、读一致性、闪回查询。 --事物回滚:当事物执行失败或用户执行回滚操作(rollback)时,Oracle会利用保存在回退段...阅读全文
posted @ 2017-10-01 16:22 gegeman 阅读(88) | 评论 (0) 编辑
 
摘要: 环境: OS:HP-UNIX 数据库:11.2.0.4 双机RAC (一)现象 在清理Oracle日志的时候,发现在$ORACLE_HOME/log/{instance_id}/client下面存在大量的clsc*.log。经过观察,发现每隔5分钟产生2个日志,具体如下: 查看日志数量,发现已经有很阅读全文
posted @ 2017-09-25 20:40 gegeman 阅读(13) | 评论 (0) 编辑
 
摘要: (一)约束的概念 在Oracle中,可以通过设置约束来防止无效数据进入表中。Oracle一共有5种约束: 主键约束(primary key) 外键约束(foreign key) 唯一性约束(unique) 非空约束(not null) 检查约束(check) (1)主键约束 --主键约束可以定义在一列或多列上,值具有唯一性、非空性; --在一个表上只能定义一个主键约束; --Oracle...阅读全文
posted @ 2017-07-23 19:50 gegeman 阅读(99) | 评论 (0) 编辑
 
摘要: (一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线。在表的使用过程中,随着数据的不断增多(insert),HWM不断向数据段未使用部分方向移动,而在删除数据(delete)的过程中,HWM并不会向反方向移动,即使删除全部数据,HWM依然不会改变。但是如果使用了truncate命令,则表的HWM会被重置为0...阅读全文
posted @ 2017-07-16 13:08 gegeman 阅读(119) | 评论 (0) 编辑
 
摘要: 本文介绍通过Toad、EM及SQL语句来处理数据库产生的锁。在这之前需要对v$lock和v$session这两个数据字典有一定的了解。 (一)使用Toad处理锁 (1)使用Toad的session browser查看锁情况 这里对每一个字段进行解释: 栏位名称 说明 SID session ID,每一个session都会产生一个sid,用于标识会话 User 产生锁的数据库用户 Lo...阅读全文
posted @ 2017-05-30 12:39 gegeman 阅读(273) | 评论 (0) 编辑
 
摘要: 目录 + 1.数据库安全控制策略概述 + 2.用户管理 + 3.资源限制与口令管理 + 4.权限管理 + 5.角色管理 + 6.审计 + 1.数据库安全控制策略概述 + 2.用户管理 + 3.资源限制与口令管理 + 4.权限管理 + 5.角色管理 + 6.审计 1.数据库安全控制策略概述 安全性是评阅读全文
posted @ 2017-05-28 14:44 gegeman 阅读(409) | 评论 (0) 编辑
 
摘要: v$lock列出了数据库当前拥有的锁及未完成的锁请求。 自当前模式被授予的时间 Table 8-1 Values for the TYPE Column: System Types System TypeDescriptionSystem TypeDescription AE Edition enq阅读全文
posted @ 2017-05-21 22:28 gegeman 阅读(29) | 评论 (0) 编辑
 
摘要: (1)v$session v$session视图记录了当前连接到数据库的session信息 注:COMMAND:表明当前session正在执行的sql命令类型。 (2)v$session_wait v$session_wait记录了当前或最近等待的session信息,其列信息与v$session相差阅读全文
posted @ 2017-05-20 11:12 gegeman 阅读(22) | 评论 (0) 编辑
 
摘要: 标题:Renaming or Deleting the Alert Log While an Oracle Instance is Up & Running (文档 ID 74966.1)阅读全文
posted @ 2017-05-11 14:25 gegeman 阅读(31) | 评论 (0) 编辑
 
摘要: (一)LogMiner工具的作用Logminer工具主要用来分析redo log和archive log文件。通过该工具,可以轻松获得Oracle redo log和archive log文件的具体内容,甚至,可以获得用户对数据库进行的DDL、DML操作。另外还可分析得到一些需要回滚的sql语句。该阅读全文
posted @ 2017-04-26 00:11 gegeman 阅读(218) | 评论 (0) 编辑
 
摘要: 在上一篇,初步了解了Audit的作用以及如何使用Audit,本篇记录如何手动清理Audit数据。 (一) 概述 Audit的数据主要存储在sys.aud$表中,该表默认位于system表空间中,我们根据需求,将该表移到了sysaux表空间中。由于审计数据量较大,需要经常关注sysaux表空间的使用情阅读全文
posted @ 2017-04-19 22:54 gegeman 阅读(446) | 评论 (0) 编辑
 
摘要: 1.Audit的概念 Audit是监视和记录用户对数据库进行的操作,以供DBA进行问题分析。利用Audit功能,可以完成以下任务: 监视和收集特定数据库活动的数据。例如管理员能够审计哪些表被更新,在某个时间点上有多少个并行用户统计数据; 保证用户对自己的活动负责。这些活动包括在特定模式、特定表、特定阅读全文
posted @ 2017-04-15 20:49 gegeman 阅读(288) | 评论 (0) 编辑
 
摘要: 在oracle中,如果不对监听日志文件进行截断(定期清理),那么监听日志文件会变得越来越大,由于一些老旧的OS不支持2GB以上的文件,故当listener.log文件超过2GB时,会出现无法处理新的连接,新的操作系统虽然不会出现这个问题,但我们依然需要对其进行定期清理。 查看listener.log日志文件的位置,在RAC数据库中,其位置为: unixdev$[/grid/app/diag/tns...阅读全文
posted @ 2017-04-04 12:19 gegeman 阅读(287) | 评论 (0) 编辑
 
摘要: (一)同义词的概念 同义词是数据库中表、视图、索引或其他模式对象的别名,与视图相似,同义词不占用实际的存储空间,在数据字典中只存同义词的定义。 在开发数据库时,应尽量避免直接引用表、视图或其他数据库对象,否则,当表的结构发生了改变,就会影响应用程序的使用,这个时候需要重新编译程序,如果为数据库对象创建了同义词,就可以在程序中使用同义词,这样表的结构发生变化,也不会影响到应用程序。此外,运用同义词还...阅读全文
posted @ 2017-03-27 22:30 gegeman 阅读(41) | 评论 (0) 编辑
 
摘要: (一) AWR报告介绍 AWR全称Automatic Workload Repository,自动工作负载库。在Oracle 10g之前,用户连接到数据库,产生session,session信息保存在v$session中,处于等待的session被复制一份到v$session_wait中,当会话中止阅读全文
posted @ 2017-03-07 17:39 gegeman 阅读(21) | 评论 (0) 编辑
 
摘要: (一)什么是分区 所谓分区,就是将一张巨型表或巨型索引分成若干个独立的组成部分进行存储和管理,每一个相对小的,可独立管理的部分,称为分区。 (二)分区的优势 提高数据可管理性。对表进行分区,数据的加载、索引的创建与重建、数据的备份与恢复等操作都可以在分区表上进行,而不必在表级别上进行,提高了数据的可阅读全文
posted @ 2017-03-03 11:15 gegeman 阅读(45) | 评论 (0) 编辑
 
摘要: (一)oracle client与oracle instant client比较 当我们要使用Toad、plsql developer等工具连接数据库时,首先需要在自己的电脑上安装oracle client。在下载client时,通常我们会发现,通过搜索引擎,我们只能找到一个叫做oracle ins阅读全文
posted @ 2017-02-12 22:48 gegeman 阅读(70) | 评论 (0) 编辑
 
摘要: (一)安装Oracle client 环境:windows7 64-bit、oracle client 64-bit (1)解压client安装包 (2)双击setup.exe,选择管理员,一直next (3)执行先决条件检查,有的电脑在状态栏会出现“Failure”的情况,点击右上角的“全部忽略”阅读全文
posted @ 2017-02-12 17:36 gegeman 阅读(44) | 评论 (0) 编辑
 
摘要: 近日,在公司云电脑上安装Toad for oracle,安装到中途总会出现如下错误,个人认为是Toad安装时需要下载/更新一些组件,公司网络对下载有所限制,导致报错,无法进行后续安装。 图1.Toad安装错误提示 于是,回宿舍对这个问题进行了验证。 环境配置: 操作系统:win7_64位虚拟机(系统阅读全文
posted @ 2017-02-07 23:20 gegeman 阅读(102) | 评论 (0) 编辑
 
摘要: (一)索引的概念 索引是一种与表或簇相关的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘I/O,提高检索效率。 索引由索引值及记录相应物理地址的ROWID两个部分构成,并按照索引值有序排列,ROWID可以快速定位到数据库表符合条件的记录。可以这样理解,将索引看作是一本书的目录,索引值即为目阅读全文
posted @ 2017-01-18 22:26 gegeman 阅读(224) | 评论 (0) 编辑
 
摘要: uname的用法如下: uname –a[--all]:输出全部信息 uname –s:操作系统名 uname -n:主机名(n是nodename的缩写) uname -r:操作系统版本(r是release的缩写) uname -i:操作系统硬件平台阅读全文
posted @ 2017-01-02 00:59 gegeman 阅读(12) | 评论 (0) 编辑
 
摘要: 本节主要学习: whoami who am i who w users tty 6个命令的用法。 (1)whoami whoami用于查询当前是以哪个用户登录Linux系统: (2)who am i 与上面的命令相比,得到的结果更详细: 除了得到用户名,还可以看到登录终端(pts/0),现在的时间和阅读全文
posted @ 2017-01-02 00:29 gegeman 阅读(23) | 评论 (0) 编辑
 
摘要: 说到Linux就不得不提UNIX,因为Linux是从UNIX系统发展来的,两系统极为相似,可以在UNIX操作系统上使用的功能都可以在Linux上使用,只可能有少许的差异; UNIX系统中所有的东西都是文件,其中也包括硬件,UNIX的目录就对应Windows的文件夹; 在UNIX/Linux中很少有交阅读全文
posted @ 2017-01-01 23:34 gegeman 阅读(13) | 评论 (0) 编辑
 
摘要: 1.查看Oracle数据库中的所有用户: (1)使用具有DBA权限的账户登录数据库; (2)执行select username from dba_users。 这里放一张使用select * from dba_users查询的图片,除用户名外,我们可以看到账户状态(ACCOUNT_STATUS)、表阅读全文
posted @ 2016-12-18 23:31 gegeman 阅读(38) | 评论 (0) 编辑
 
摘要: * 本文相关环境:Windows 10,64位操作系统;Oracle 11gR2;toad for Oracle12.1 最近在学习Oracle数据库,使用Toad for Oracle来查看数据库的信息,发现在以sysdba角色登录数据库时,无论输入什么密码,均可以连接到数据库,以为是数据库又出故阅读全文
posted @ 2016-12-18 21:02 gegeman 阅读(2400) | 评论 (0) 编辑
 
摘要: 最近在学习Oracle,平常喜欢使用EM查看数据库状态,但是在最近突然发现EM连接不上Oracle数据库了,不知道问题出在哪里,只好卸载了重装。但是,在使用了几天以后,又出现了相同的问题,于是下决心将这个问题解决。 图1、出错界面 网上查找资料,说是这个问题可以通过emca重建资料库来解决,具体操作阅读全文
posted @ 2016-12-11 17:57 gegeman 阅读(627) | 评论 (0) 编辑
分类: Oracle

以上是关于undo表空间的主要内容,如果未能解决你的问题,请参考以下文章

oracle undo表空间被删除,数据库无法启动,请问如何恢复

undo表空间收缩

ORACLE RAC 11G 添加以及删除UNDO表空间

undo表空间

oracle undo表空间

模拟数据库丢失undo表空间