undo空间的大小不足会引起ORA-30036或者ORA-01555。

我们创建一个小的undo表空间,然后执行一个比较大的事务,这时就可以模拟出ORA-30036.
sys@ORCL> create undo tablespace thinktbs datafile '/u01/app/oracle/oradata/ORCL/datafile/think_undo.dbf'
2 size 2m autoextend off;
Tablespace created.
sys@ORCL> alter system set undo_tablespace=thinktbs;
System altered.
sys@ORCL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 800
undo_tablespace string THINKTBS
另开一个会话:
hr@ORCL> select count(*) from t;
COUNT(*)
----------
462140
hr@ORCL> begin
2 for i in 1..1000
3 loop
4 delete from t where rownum<1001;
5 commit;
6 end loop;
7 end;
8 /
begin
*
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'THINKTBS'
ORA-06512: at line 4
在执行这个事务的过程中,我们可以查询它一共使用了多少个undo数据块:
sys@ORCL> select addr,used_ublk from v$transaction;
ADDR USED_UBLK
-------- ----------
37A19440 19
37A19E88 1
那么我们该如何确定undo表空间的大小呢?
undo表空间的大小有三个影响因素:
1)undo_retention:这个值的确定,请参见我的blog:http://blog.csdn.net/linwaterbin/article/details/7800190
2)每秒需要的undo数据块:这个值我们可以从v$undostat里面查询,计算其最大值或者平均值都可以,但建议取其最大
3)缺省块大小
公式
undo size=db_block_size*undo_retention*max(undoblks/((end_time-begin_time)*24*3600))
sys@ORCL> select max(undoblks/((end_time-begin_time)*24*3600)) from v$undostat;
MAX(UNDOBLKS/((END_TIME-BEGIN_TIME)*24*3600))
---------------------------------------------
5.77333333
sys@ORCL> show parameter db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
sys@ORCL> show parameter undo_retention
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer 800
通过上面的查询我们就可以计算出undo表空间的大小的具体值。我们便可以相应的增加undo表空间的大小。
sys@ORCL> alter tablespace undotbs1 add datafile '/u01/app/oracle/oradata/ORCL/datafile/thinkundo.dbf' size 30m autoextend on;
Tablespace altered.
分享到:
相关推荐
- 可以通过监控UNDO空间的使用情况来动态调整UNDO表空间的大小。 - **UNDO表空间数量的确定**: - 通常建议至少有一个UNDO表空间,但可以根据并发事务的数量和规模来增加更多的UNDO表空间。 - 对于高并发的应用...
4. **调整新表空间大小**(如果需要): ```sql ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/BXG/temp02.dbf' RESIZE 100M; ``` #### 二、UNDO表空间处理 UNDO表空间用于存储事务的回滚信息,以便在需要...
上述脚本创建了一个名为`undotbs1t`的新Undo表空间,并设置了其初始大小为4096MB,同时关闭了自动扩展功能。最后通过`ALTER SYSTEM`命令将其设置为当前默认的Undo表空间。 - **切换Undo表空间**: ```sql ALTER ...
### Oracle收缩Undo表空间 #### 一、概述 在Oracle数据库管理中,有时需要对Undo表空间进行管理和优化。特别是当Undo表空间因为历史数据积累而变得过大时,可能会影响数据库性能。本文将详细介绍如何通过新建一个...
- **性能问题**:优化事务,减少undo的使用,或者调整undo表空间大小和分配策略。 - **回滚失败**:检查权限和空间,确保undo表空间正常可用。 通过理解和掌握这些知识点,你可以更好地管理和优化数据库的undo表...
使用这些脚本,管理员可以更好地理解并管理数据库的undo资源,例如调整表空间大小、查看undo段使用情况等。 6. **最佳实践** - 分离undo表空间:将undo表空间与数据表空间分离,可以提高并发事务处理能力,避免与...
因此,以下公式可用于计算佳 undo 表空间大小: 从 Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在定义的 undo_retention 时间之前,undo 信息不会被覆盖。 UNDO表空间大小由三部
除了上述知识点外,文档中还提到了一些实际操作命令和SQL语句,如创建表空间、添加数据文件、查询表空间属性、设置默认表空间、更改PDB存储参数、创建临时表空间、查询CDB表空间大小等。这些操作命令和SQL语句是...
### 管理undo表空间全面分析详解 ...无论是提供一致性读、支持事务回滚还是实例恢复,undo表空间都是保证数据完整性和系统稳定性的关键因素之一。正确配置和管理undo表空间对于维护高效稳定的数据库环境至关重要。
3. **调整UNDO_TABLESPACE大小**:在增加或减少UNDO_RETENTION之前,确保有足够的撤销表空间(UNDO_TABLESPACE)来容纳所需的撤销数据。 4. **修改参数**:在达梦数据库中,你可以通过SQL命令来修改UNDO_RETENTION...
Shrink Undo表空间是指减少Undo表空间的大小,以释放过度占用的空间。Shrink Undo表空间可以使用ALTER TABLESPACE命令来实现。例如: ALTER TABLESPACE undotbs1 SHRINK SPACE; 4. 释放过度占用的空间 释放过度...
1. **降低 Redo 日志占用空间**:Temporary Undo 使得临时表的Undo信息不再记录到Redo日志中,这有助于减小Redo日志的大小,进而提高LogMiner等组件的解析效率。 2. **减少 Undo 表空间的压力**:由于临时表的Undo...
Oracle提供自动Undo管理,通过设置UNDO_MANAGEMENT=AUTO和UNDO_TABLESPACE=UNDOTBS1,数据库将自动处理Undo空间的管理。这样可以减少DBA的维护工作,但仍然需要根据系统负载和事务特性来合理调整Undo表空间的大小,...
系统创建的 undo 段的数量也不总是 10 个,它是根据系统的 undo 表空间的大小决定的。但是系统的表空间再大,一般也是 10 个回滚段。 undo 段的状态 undo 段有两种状态,在线和不在线。如果数据库有多个回滚段,...
Oracle 9i能够根据事务的活动水平动态调整Undo表空间的大小,这样可以确保空间得到最有效的利用,避免因预估不准确导致的空间浪费。同时,通过自动管理,系统能更好地控制事务的并发性,减少事务间的冲突,从而提升...
3. **增大临时表空间大小**: - 如果临时表空间确实需要更大的空间,可以考虑增大数据文件的大小,或者添加新的数据文件。 - 使用`ALTER DATABASE DATAFILE 'datafile_path' AUTOEXTEND ON NEXT 'size' MAXSIZE '...
### Oracle 修改表空间大小 #### 一、背景介绍 在使用Oracle 10g数据库管理系统进行数据管理的过程中,经常会遇到由于表空间限制而导致的数据导入失败问题。这是因为Oracle默认的表空间大小为400MB,当数据库中的...
### 查看Oracle表空间大小的相关知识点 在Oracle数据库管理中,了解表空间的大小对于优化存储、维护数据安全以及提高数据库性能至关重要。本文将详细解释一个实用的SQL脚本,该脚本能够帮助我们查看Oracle数据库中...
例如,在测试中,创建了一个表`test.tbl`,然后在一个事务中重复插入大量数据,`commit`后,Undo表空间的大小并未自动减少,这是因为Undo信息在事务结束前需要保留,以便后续的回滚操作。 4. **Undo表空间回收** -...