ORA-01652 unable to extend temp segment by %s in tablespace %s 再探

以前,分析过ORA-01652 unable to extend temp segment by %s in tablespace %s 这个错误,但是缺乏些知识点。这几天看到官方文档时,突然发现有些不足,现做下笔记。
          ORA-1652: unable to extend temp segment by 8192 in tablespace   MPAC_T
 
这个呢,并不能通过增加临时表空间的大小来解决这个问题。在这个错误中,产生问题的表空间是  MPAC_T,而不是TEMP。显然,一个索引创建进程由于 MPAC_T表空间不足而失败了,可以为 MPAC_T表空间增加一个数据文件来解决。在增加 MPAC_T表空间的大小后,这个错误就会消失。

解决思路:

一般遇到这个问题时,通常会想到去检查临时表空间。检查DBA_TEMP_FREE_SPACE视图发现,在默认临时表空间还有很多的空闲表空间的。仔细发现报错信息,会发现数据库无法扩展 MPAC_T表空间的临时数据段。当创建一个类似于 MPAC_T中这样的例子时,提供了数据库用来创建新索引的永久表空间名称。Oracle首先会将新索引结构放在为该索引指定的表空间的临时数据段中。原因就是创建索引的进程失败了,Oracle将会从指定的用来创建新索引的表空间中移出临时数据段。索引成功创建后,oracle就会在 MPAC_T表空间中将临时数据段转换为永久数据段,但是,只要Oracle依然在创建索引,数据库还是将其作为临时数据段。
因此当索引创建失败时,数据库就会报ORA-01652错误,这也是临时表空间“空间不足”的告警。
----------------------------------------
注意:ORA-01652错误中所包含的数据段可能并不是临时表空间中的临时数据段
----------------------------------------

解决ORA-01652错误的关键是要理解Oracle在临时表空间之外的地方使用临时数据段,临时表空间中的数据段用来其他活动,比如排序。而永久表空间也可能在创建表或者索引时执行一些临时操作,使用临时数据段。
PS:创建索引时,会使用两种不同的临时数据段。位于TEMP表空间中的数据段用来进行索引数据排序,另一个位于永久表空间中的临时数据段用于放置索引,在索引创建完成后,Oracle将该索引表空间中的临时数据段转换为永久数据段。

创建一个大索引时,一个好的方法就是创建一个大的临时表空间,并分配给这个大索引的用户使用,索引创建完成后,可以重新将原来的临时表空间分配给该用户,并删除大的临时表空间。
如果临时表空间开启了自动扩展,临时文件就可能会由于数据库中一个或者两个大的排序而变得很大。
ORA-3297:file contains used data beyond requested RESIZE value
可以用修改表空间来收缩临时表空间
alter tablespace temp shrink space

ps:具体参见(ORA-1652 "unable to extend temp segment by %s in tablespace %s" Reference Note (Doc ID 19047.1))




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

转载于:http://blog.itpub.net/30430420/viewspace-1800294/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值