本文整理自网络,侵删。
目录
- 一、什么是撤销以及为什么在oracle中撤销?
- 二、管理undo表空间
- 2.1 创建undo表空间
- 2.2 调整 Undo 表空间大小
- 三、Oracle 中撤消表空间/撤消管理的最佳实践
一、什么是撤销以及为什么在oracle中撤销?
Oracle 数据库有一种维护信息的方法,用于回滚或撤消对数据库的更改。Oracle 数据库在事务提交之前保留事务操作的记录,Oracle 需要此信息来回滚或撤消对数据库的更改。这些记录称为回滚或撤销记录。
这些记录用于:
- 回滚事务 - 发出 ROLLBACK 语句时,撤销记录用于撤消未提交事务对数据库所做的更改。
- 恢复数据库 - 在数据库恢复期间,撤销记录用于撤消从重做日志应用到数据文件的任何未提交的更改。
- 提供读取一致性 - 撤消记录通过为正在访问数据同时另一个用户正在更改数据的用户维护数据的前映像来提供读取一致性。
- 使用
Flashback Query
分析较早时间点的数据。 - 使用闪回功能从逻辑损坏中恢复。
在Oracle 8i之前,Oracle使用回滚段来管理撤销数据。Oracle9i引入了自动撤消管理,它允许 dba 对撤消信息的保留时间施加更多控制,简化撤消空间管理并消除管理回滚段的复杂性。Oracle 强烈建议您使用 undo 表空间来管理 undo 而不是回滚段。
undo
段的空间是动态分配、使用、释放和重用的--所有这些都在Oracle数据库的控制下,而不是由DBA控制。
从Oracle 9i开始,回滚段方法称为“手动撤销管理模式”,新的撤销表空间的方法称为“自动撤销管理模式”。
说明:
- 尽管支持回滚段和撤消表空间,但这两种模式不能在同一个数据库实例中使用,尽管出于迁移目的,可以在使用回滚段的数据库中创建撤消表空间,或删除回滚段在使用撤消表空间的数据库中。但是,您必须退回数据库才能切换到另一种管理撤销的方法。
- 两种模式都存在系统回滚段。
- 在自动撤消管理模式下运行时,任何手动撤消管理 SQL 语句和初始化参数都将被忽略,并且不会发出错误消息,例如
ALTER ROLLBACK SEGMENT
语句将被忽略。
二、管理undo表空间
2.1 创建undo表空间
有两种创建撤消表空间的方法:
第一种方法:在发出CREATE DATABASE
语句时创建撤消表空间。这发生在您创建新数据库并且实例以自动撤销管理模式 (UNDO_MANAGEMENT = AUTO) 启动时。
第二种方法:用于现有数据库。它使用 CREATE UNDO TABLESPACE
语句。
我们不能在撤销表空间中创建数据库对象。它保留用于系统管理的撤销数据。Oracle 数据库使我们能够创建单文件撤销表空间。
以下语句说明了在CREATE DATABASE
语句中使用 UNDO TABLESPACE
子句。undo 表空间名为 undotbs_01,并为其分配了一个数据文件
SQL>?CREATE?DATABASE?...? UNDO?TABLESPACE?undotbs_01?DATAFILE?'/path/undo01.dbf'?RETENTION?GUARANTEE;?
如果在CREATE DATABASE
期间无法成功创建 undo 表空间,则整个操作将失败。CREATE UNDO TABLESPACE
语句与 CREATE TABLESPACE
语句相同,但指定了 UNDO 关键字。数据库决定了撤销表空间的大部分属性,但您可以指定 DATAFILE 子句。
此示例创建 undotbs_02 撤销表空间:
SQL>?CREATE?UNDO?TABLESPACE?undotbs_02?DATAFILE?'/path/undo02.dbf'?SIZE?2M?REUSE?AUTOEXTEND?ON?RETENTION?NOGUARANTEE?;?
2.2 调整 Undo 表空间大小
方法一:缩小撤消表空间大小
分配后的撤销空间将可供重用,但不会重新分配给操作系统。缩小 Undo 表空间的最佳方法是切换到新的 Undo 表空间并删除旧的 Undo 表空间。、
步骤是:
相关阅读 >>
sql中charindex和oracle中对应的函数instr对比
更多相关阅读请进入《oracle》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 生产环境Oracle undo表空间管理实践
相关推荐
评论
管理员已关闭评论功能...