临时表空间满了

1、环境:linux 、oracle rac、asm共享存储

2、描述:由于数据库用户使用的是oralce默认的临时表空间,不知何种原因,temp临时表空间被沾满了,导致sql查询非常的缓慢

3、日志:Caused by: java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP

    at com.yucheng.cmis.dao.SqlClient.queryCount(SqlClient.java:569) ~[cmis-dao-V1.7.3.20170912.RC.jar:?]
    at com.yucheng.cmis.ciis.indivquery.indivsinglequeryapp.component.IndCreditRepInfoAppComponent.queryIndCreditRepInfoAppForSPList(IndCreditRepInfoAppComponent.java:88) ~[IndCreditRepInfoAppComponent.class:?]
    ... 29 more

4、难点:

           (1)不熟悉asm,以至于不知道临时表空间的路径在哪儿

           (2)无法排除是系统本身的sql存在问题,导致表空间被占满

  5、解决方案:

   (1)查看临时表空间信息

     执行“select * from dba_temp_files”

  (2)查询哪些用户在执行

执行“select  a.username,a.sql_id,a.segtype,b.bytes_used/1024/1024/1024||'G',b.bytes_free/1024/1024/1024 from v$tempseg_usage a join v$temp_space_header b on a.tablespace=b.tablespace_name”

解释    username  正在执行sql的用户名 

            sql_id    正在执行的sql的的sql_id 

            segtype   正在执行的SQL语句做的是什么操作 

            BYTES_USED 正在执行sql语句使用的临时表空间的大小

            BYTES_FREE  剩余多少临时表空间

    排除是系统本身的sql存在问题后,为数据库用户新建临时表空间,不使用默认的表空间(临时表空间释放需要重启数据库)

(3)新建表空间(asm中创建临时表空间的路径tempfile '+DATA/ZXJGUAT_TEMP.dbf' )

create temporary tablespace ZXJGUAT_TEMP 
tempfile '+DATA' 
size 1024m  
autoextend on  
next 50m maxsize unlimited  
extent management local;

(4)更改用户的临时表空间

alter user ciis temporary tablespace ZXJGUAT_TEMP

 

说明:Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。

重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值