天津地铁建设网站,百度广告太多,口碑好的定制网站建设,网站开发工程师自学一、一次更新或者删除大量数据#xff0c;这些数据需要保存在undo表空间中(直到提交或回滚后这些undo表空间中的数据才允许被覆盖)#xff0c;如果undo表空间不足#xff0c;就会报ORA-30036错误。下面是两种解决办法#xff1a;1、增加undo表空间大小#xff0c;或将undo…一、一次更新或者删除大量数据这些数据需要保存在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_textFROM v$transaction t, v$session s, v$rollstat r, dba_rollback_segs rs ,v$sql sq,v$process prWHERE s.saddr t.ses_addrAND t.xidusn r.usnAND rs.segment_id t.xidusnAND s.sql_addresssq.addressAND s.sql_hash_value sq.hash_valueAND s.PADDRpr.ADDRORDER 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 sqlplusrhel5 (TNS V1-V3) 14 14 _SYSSMU14_55430887$ 5.3671875 update t set object_nameaaaa where rownum10000SCOTT 30 23 oracle rhel5 sqlplusrhel5 (TNS V1-V3) 12 12 _SYSSMU12_2606085817$ 2.6171875 update b set object_nameaaaa找出导致这些语句未提交的原因(如调用存储过程逻辑问题)进行处理三、在使用数据泵导入数据时如果数据中存在大量约束和索引导入数据时维护索引会产生大量undo数据Import datapump will perform index maintenance and this can increase undo usage especially if there is other DML occurring on the database。解决办法导入数据时使用下面两个参数排除约束和索引导入数据成功后再创建相应的约束和索引EXCLUDECONSTRAINTEXCLUDEINDEX备注关于undo表空间的大小可以根据下面的计算做一个预算1.计算业务高峰期每秒产生undo数据块的个数select max(undoblks / ((end_time - begin_time)*24*3600)) from v$undostat;2.得到undo数据块在undo表空间中可以保留的最长时间show parameter undo_retention3.得到数据块大小show parameter db_block;4.将以上三者的数据相乘就是所需undo表空间的大小数。查看undo数据块的历史使用情况(每10分钟使用的数据块数量)SQL select begin_time,end_time,undoblks from v$undostat;16-MAY-16 16-MAY-16 82716-MAY-16 16-MAY-16 106516-MAY-16 16-MAY-16 2316-MAY-16 16-MAY-16 227916-MAY-16 16-MAY-16 866516-MAY-16 16-MAY-16 324516-MAY-16 16-MAY-16 1011..................查看正在运行的事物所需要的undo数据块SQL select addr,used_ublk from v$transaction;ADDR USED_UBLK---------------- ----------000000007DC55940 296000000007DC5F108 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 36UNDOTBS1 EXPIRED .5 8UNDOTBS1 UNEXPIRED 72.81 112UNDOTBS2 EXPIRED 2.94 32UNDOTBS2 UNEXPIRED 3.44 10来自 “ ITPUB博客 ” 链接http://blog.itpub.net/30373263/viewspace-2100947/如需转载请注明出处否则将追究法律责任。