一、一次更新或者删除大量数据,这些数据需要保存在undo表空间中(直到提交或回滚后这些undo表空间中的数据才允许被覆盖),如果undo表空间不足,就会报ORA-30036错误。

下面是两种解决办法:

1、增加undo表空间大小,或将undo表空间数据文件设置为自动扩展(如果磁盘空间不足也会导致该问题)

2、批量更新或删除数据

二、数据库中存在大量未提交的事物(更新或删除操作)

解决办法:

1、找出这些占用undo回滚段的操作(使用下面语句)

SELECT s.username,

s.sid,

pr.PID,

s.OSUSER,

s.MACHINE,

s.PROGRAM,

rs.segment_id,

r.usn,

rs.segment_name,

r.rssize/1024/1024,

sq.sql_text

FROM v$transaction t, v$session s, v$rollstat r, dba_rollback_segs rs ,v$sql  sq,v$process pr

WHERE s.saddr = t.ses_addr

AND t.xidusn = r.usn

AND rs.segment_id = t.xidusn

AND s.sql_address=sq.address

AND s.sql_hash_value = sq.hash_value

AND s.PADDR=pr.ADDR

ORDER BY t.used_ublk DESC;

USERNAME   SID     PID OSUSER  MACHINE  PROGRAM              SEGMENT_ID  USN  SEGMENT_NAME          R.RSSIZE/1024/1024  SQL_TEXT

--------   ---   --- ------  -------  -------                     ----------  ---  ------------          ------------------  ------------------------

SCOTT       36     25 oracle   rhel5    sqlplus@rhel5 (TNS V1-V3)         14          14   _SYSSMU14_55430887$    5.3671875      update t set object_name='aaaa' where rownum<10000

SCOTT      30     23 oracle   rhel5    sqlplus@rhel5 (TNS V1-V3)         12           12  _SYSSMU12_2606085817$   2.6171875     update b set object_name='aaaa'

找出导致这些语句未提交的原因(如调用存储过程逻辑问题),进行处理

三、在使用数据泵导入数据时,如果数据中存在大量约束和索引,导入数据时维护索引会产生大量undo数据

Import datapump will perform index maintenance and this can increase undo usage especially if there is other DML occurring on the database。

解决办法:导入数据时使用下面两个参数排除约束和索引,导入数据成功后再创建相应的约束和索引:

EXCLUDE=CONSTRAINT

EXCLUDE=INDEX

备注:

关于undo表空间的大小,可以根据下面的计算做一个预算

1.计算业务高峰期每秒产生undo数据块的个数:

select max(undoblks / ((end_time - begin_time)*24*3600)) from v$undostat;

2.得到undo数据块在undo表空间中可以保留的最长时间

show parameter undo_retention

3.得到数据块大小

show parameter db_block;

4.将以上三者的数据相乘就是所需undo表空间的大小数。

查看undo数据块的历史使用情况(每10分钟使用的数据块数量)

SQL> select begin_time,end_time,undoblks from v$undostat;

16-MAY-16       16-MAY-16             827

16-MAY-16       16-MAY-16            1065

16-MAY-16       16-MAY-16              23

16-MAY-16       16-MAY-16            2279

16-MAY-16       16-MAY-16            8665

16-MAY-16       16-MAY-16            3245

16-MAY-16       16-MAY-16            1011

......

......

......

查看正在运行的事物所需要的undo数据块

SQL> select addr,used_ublk from v$transaction;

ADDR          USED_UBLK

---------------- ----------

000000007DC55940    296

000000007DC5F108    580

查看UNDO表空间占用情况

SQL> select tablespace_name,status,round(sum(bytes)/1024/1024,2) MB,count(*) extent_count from dba_undo_extents group by tablespace_name,status order by tablespace_name,status;

TABLESPACE_NAME            STATUS         MB EXTENT_COUNT

------------------------------ --------- ---------- ------------

UNDOTBS1               ACTIVE          10.69          36

UNDOTBS1               EXPIRED         .5           8

UNDOTBS1               UNEXPIRED      72.81         112

UNDOTBS2               EXPIRED           2.94          32

UNDOTBS2               UNEXPIRED       3.44          10

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

oracle的undo表空间不足,undo表空间不足,ORA-30036 unable to extend segment by ...相关推荐

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

    一.原因     有较大的事务量让 Oracle Undo 自动扩展,产生过度占用磁盘空间的情况     有较大事务没有收缩或提交,导致没有足够大的空间来容纳新事务的 Undo 数据 二.分析     ...

  2. oracle 撤销回退,Oracle 回滚(ROLLBACK)和撤销(UNDO)

    五.计算UNDO表空间的大小 计算公式: MAX(undoblks)/600 * MAX(maxquerylen)位于v$undostat * db_block_size位于v$parameter - ...

  3. Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)

    UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据.你听说UNDO也是 ...

  4. oracle如何添加undo,ORACLE RAC 11G 添加以及删除UNDO表空间

    在生产环境上,由于闪存盘的容量有限,现在需要将闪存盘里面的UNDO表空间,替换到非闪存的磁盘里面. 磁盘的使用情况如下: 表空间使用情况如下: RAC两个节点占用将近167G的空间. 操作步骤如下: ...

  5. oracle创建表空间 扩展表空间文件 修改表空间自动增长

    1. 创建表空间 create tablespace SIRM2  datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...

  6. oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息

    查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * fr ...

  7. oracle 给表空间改名,Oracle重命名表空间和删除表空间

    在需要的情况下,可以对表空间的名称进行修改.修改表空间的名称,不会影响到表空间中的数据.但不能修改系统表空间system与sysa Oracle重命名表空间和删除表空间 [日期:2015-03-10] ...

  8. Oracle的SQL基础之用户与表空间

    前排提示:数据库对象不理解的,可以查看我的关于数据库对象的博文 1.用户 1.1四个系统默认用户 Oracle的安装完成会产生四个系统默认用户,其级别依次是 sys > system > ...

  9. oracle创建表不在对应表空间,oracle创建表空间

    创建表空间参数详解 语法描述: CREATE [UNDO]  TABLESPACE tablespace_name [DATAFILE datefile_spec1 [,datefile_spec2] ...

最新文章

  1. 卡尔曼滤波——车定位(GPS与车运动方程)
  2. jenkins内置变量的使用
  3. 记录 之 跨服务器上传和下载文件
  4. 视频异常检测算法 python_使用Python进行异常检测
  5. raft中集群成员变更
  6. linux可以http安装么,Linux 5下 http的安装
  7. php字符串如何比较大小写,PHP字符串函数strcmp(二进制安全比较字符串,区分大小写)...
  8. 【机器学习】机器学习的主要挑战与应对方式
  9. vue-admin-study1学习总结
  10. webstorm快捷键大全
  11. autosar架构_(1)Testing-Autosar架构及模块描述
  12. 【Django 2021年最新版教程28】前端模板中 时间日期星期格式化
  13. redis 正则匹配value_Java-19-Redis
  14. Android手势监听类GestureDetector的使用
  15. CentOS 桌面版安装配置(以CentOS 7为例)
  16. 《人人都在说谎:赤裸裸的数据真相》读书笔记1
  17. 快手上的音乐计算机,快手本地音乐显示只能从电脑导入怎么办
  18. kmplayer音轨切换(换配音)
  19. c语言用fun函数求最大公约数,c语言求最大公约数
  20. Win10踩坑-开机0xc0000225

热门文章

  1. 你真的懂break和continue吗?这篇文章让你明白
  2. java实现rsa欧几里得算法求d_RSA算法中利用欧几里得算法求d详细过程
  3. 三位数除以两位数怎么算竖式_青岛版三年级上册数学5.6三位数除以一位数(最高位商后有余数)微课知识点精讲+练习...
  4. html邮件和纯文本邮件区别,邮件营销必读系列五--纯文本和HTML邮件类型——哪一种邮件类型更适合你?...
  5. CTF-杂项题-伪加密
  6. python3.6里有xhr吗_python – XHR请求URL在尝试解析其内容时不存在
  7. 部门名称部门结构叠用_金属结构分公司三部门联合开展工会小组活动
  8. @bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...
  9. python 函数进度条怎么_刷新你对进度条的认识,用python写出不一样的进度条
  10. c语言getch() 头文件,用getch()需要头文件吗?