ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'

ORA-12012: error on auto execute of job "xxx"."JOB_AUTO_xxxx_DATA1"
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
ORA-06512: at "xxx.P_FACT_xxx_DAY", line 9

故障现象:UNDO表空间越来越大,长此下去最终数据因为磁盘空间不足而崩溃;
问题分析:产生问题的原因主要以下两点:
1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况;
2. 有较大事务没有收缩或者没有提交所导制;

解决步骤:
1.查看undo表空间
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

2.检查数据库UNDO表空间占用空间情况以及数据文件存放位置;
SQL> select file_name,bytes/1024/1024 from dba_data_files where tablespace_name='UNDOTBS1';

FILE_NAME                                          BYTES/1024/1024
-------------------------------------------------- ---------------
/u01/oracle/orahomes/oradata/xxxx/undotbs01.dbf             2760

3.检查数据库UNDO表空间占用空间情况以及数据文件存放位置;
SQL>select file_name,bytes/1024/1024 from dba_data_files
2 where tablespace_name like 'UNDOTBS2';

4.查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。
SQL> select s.username, u.name
         from v$transaction t,v$rollstat r,v$rollname u,v$session s
        where s.taddr=t.addr and  t.xidusn=r.usn and r.usn=u.usn order by s.username;

USERNAME                       NAME
------------------------------ ------------------------------
TDSCDB                         _SYSSMU3_1723003836$

5.检查UNDO Segment状态;
SQL>   select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
        from v$rollstat order by rssize;

       USN      XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024    SHRINKS
---------- ---------- --------------------- ---------------------- ----------
         5          0            .000114441             .195426941        519
         9          0            .000114441             .156364441        449
         1          0            .000114441             .226676941        425
         2          0            .000114441             .203239441        461
         4          0            .000114441             .250175476        516
        10          0            .000114441             .195426941        400
         6          0            .000114441             .414176941        440
         7          0            .000114441             .125175476        461
         8          0            .000114441             .211051941        471
         0          0            .000358582             .000358582          0
         3          1            2.69322968             2.69322968        403

我使用的是固定大小的undo表空间,所以我先增大表空间,看看能否,让大事务完成。

SQL> ALTER DATABASE DATAFILE '/u01/oracle/orahomes/oradata/xxxx/undotbs01.dbf' RESIZE 4G;  
Database altered.

让事务完成尽快提交



别人的方法:
创建新的UNDO表空间,并设置自动扩展参数;
SQL> create undo tablespace undotbs1 datafile '/oradata/oradata/ddptest/UNDOTBS1.dbf' size 1000m reuse autoextend on next 800m maxsize unlimited;
Tablespace created.

动态更改spfile配置文件;
SQL> alter system set undo_tablespace=undotbs1 scope=both;
System altered

附:UNDO表空间介绍

UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATEDELETE),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之前的雇员工资,用户可以使用倒叙查询特征.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/807718/viewspace-2136422/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/807718/viewspace-2136422/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值