`
zhangziyangup
  • 浏览: 1186130 次
文章分类
社区版块
存档分类
最新评论

undo系列学习之如何计算undo表空间的大小

 
阅读更多

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表空间,但可以根据并发事务的数量和规模来增加更多的UNDO表空间。 - 对于高并发的应用...

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

    4. **调整新表空间大小**(如果需要): ```sql ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/BXG/temp02.dbf' RESIZE 100M; ``` #### 二、UNDO表空间处理 UNDO表空间用于存储事务的回滚信息,以便在需要...

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

    上述脚本创建了一个名为`undotbs1t`的新Undo表空间,并设置了其初始大小为4096MB,同时关闭了自动扩展功能。最后通过`ALTER SYSTEM`命令将其设置为当前默认的Undo表空间。 - **切换Undo表空间**: ```sql ALTER ...

    oracle 收缩undo表空间

    ### Oracle收缩Undo表空间 #### 一、概述 在Oracle数据库管理中,有时需要对Undo表空间进行管理和优化。特别是当Undo表空间因为历史数据积累而变得过大时,可能会影响数据库性能。本文将详细介绍如何通过新建一个...

    数据库undo表空间问题集锦

    - **性能问题**:优化事务,减少undo的使用,或者调整undo表空间大小和分配策略。 - **回滚失败**:检查权限和空间,确保undo表空间正常可用。 通过理解和掌握这些知识点,你可以更好地管理和优化数据库的undo表...

    Oracle中重做undo表空间

    使用这些脚本,管理员可以更好地理解并管理数据库的undo资源,例如调整表空间大小、查看undo段使用情况等。 6. **最佳实践** - 分离undo表空间:将undo表空间与数据表空间分离,可以提高并发事务处理能力,避免与...

    如何计算自动管理的UNDO表空间大小

     因此,以下公式可用于计算佳 undo 表空间大小:  从 Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在定义的 undo_retention 时间之前,undo 信息不会被覆盖。  UNDO表空间大小由三部

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

    除了上述知识点外,文档中还提到了一些实际操作命令和SQL语句,如创建表空间、添加数据文件、查询表空间属性、设置默认表空间、更改PDB存储参数、创建临时表空间、查询CDB表空间大小等。这些操作命令和SQL语句是...

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

    ### 管理undo表空间全面分析详解 ...无论是提供一致性读、支持事务回滚还是实例恢复,undo表空间都是保证数据完整性和系统稳定性的关键因素之一。正确配置和管理undo表空间对于维护高效稳定的数据库环境至关重要。

    达梦修改UNDO_RETENTION.zip

    3. **调整UNDO_TABLESPACE大小**:在增加或减少UNDO_RETENTION之前,确保有足够的撤销表空间(UNDO_TABLESPACE)来容纳所需的撤销数据。 4. **修改参数**:在达梦数据库中,你可以通过SQL命令来修改UNDO_RETENTION...

    如何Shrink Undo表空间,释放过度占用的空间

    Shrink Undo表空间是指减少Undo表空间的大小,以释放过度占用的空间。Shrink Undo表空间可以使用ALTER TABLESPACE命令来实现。例如: ALTER TABLESPACE undotbs1 SHRINK SPACE; 4. 释放过度占用的空间 释放过度...

    12c 新特性-Temporary Undo

    1. **降低 Redo 日志占用空间**:Temporary Undo 使得临时表的Undo信息不再记录到Redo日志中,这有助于减小Redo日志的大小,进而提高LogMiner等组件的解析效率。 2. **减少 Undo 表空间的压力**:由于临时表的Undo...

    oracle undo详解

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

    oracle undo

    系统创建的 undo 段的数量也不总是 10 个,它是根据系统的 undo 表空间的大小决定的。但是系统的表空间再大,一般也是 10 个回滚段。 undo 段的状态 undo 段有两种状态,在线和不在线。如果数据库有多个回滚段,...

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

    Oracle 9i能够根据事务的活动水平动态调整Undo表空间的大小,这样可以确保空间得到最有效的利用,避免因预估不准确导致的空间浪费。同时,通过自动管理,系统能更好地控制事务的并发性,减少事务间的冲突,从而提升...

    解决临时表(undo)空间过大问题

    3. **增大临时表空间大小**: - 如果临时表空间确实需要更大的空间,可以考虑增大数据文件的大小,或者添加新的数据文件。 - 使用`ALTER DATABASE DATAFILE 'datafile_path' AUTOEXTEND ON NEXT 'size' MAXSIZE '...

    Oracle修改表空间大小.doc

    ### Oracle 修改表空间大小 #### 一、背景介绍 在使用Oracle 10g数据库管理系统进行数据管理的过程中,经常会遇到由于表空间限制而导致的数据导入失败问题。这是因为Oracle默认的表空间大小为400MB,当数据库中的...

    查看表空间大小 sql 脚本

    ### 查看Oracle表空间大小的相关知识点 在Oracle数据库管理中,了解表空间的大小对于优化存储、维护数据安全以及提高数据库性能至关重要。本文将详细解释一个实用的SQL脚本,该脚本能够帮助我们查看Oracle数据库中...

    Mysql在线回收undo表空间实战记录

    例如,在测试中,创建了一个表`test.tbl`,然后在一个事务中重复插入大量数据,`commit`后,Undo表空间的大小并未自动减少,这是因为Undo信息在事务结束前需要保留,以便后续的回滚操作。 4. **Undo表空间回收** -...

Global site tag (gtag.js) - Google Analytics