今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段

查看表空间使用明细

SELECT b.tablespace,
       b.segfile#,
       b.segblk#,
       b.blocks,
       b.blocks * 32 / 1024 / 1024,
       a.sid,
       a.serial#,
       a.username,
       a.osuser,
       a.status,
       c.sql_text,
       b.contents
  FROM v$session
a, v$sort_usage b, v$sql c
 WHERE a.saddr
= b.session_addr
   AND a.sql_address
= c.address(+)
 ORDER BY b.blocks DESC ;

查看临时表空间情况

SELECT D.TABLESPACE_NAME,
       SPACE "SUM_SPACE(M)",
       BLOCKS SUM_BLOCKS,
       USED_SPACE "USED_SPACE(M)",
       ROUND(NVL (USED_SPACE, 0)
/ SPACE * 100 , 2)
"USED_RATE(%)",
       NVL(FREE_SPACE, 0 )
"FREE_SPACE(M)"
  FROM ( SELECT TABLESPACE_NAME,
               ROUND(SUM (BYTES)
/ (1024 * 1024), 2 ) SPACE,
               SUM(BLOCKS)
BLOCKS
          FROM DBA_TEMP_FILES
         GROUP BY TABLESPACE_NAME)
D,
       ( SELECT TABLESPACE_NAME,
               ROUND(SUM (BYTES_USED)
/ (1024 * 1024), 2 )
USED_SPACE,
               ROUND(SUM (BYTES_FREE)
/ (1024 * 1024), 2 )
FREE_SPACE
          FROM V$TEMP_SPACE_HEADER
         GROUP BY TABLESPACE_NAME)
F
 WHERE D.TABLESPACE_NAME
= F.TABLESPACE_NAME(+)

查看临时表空间是否自动增加

select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

解决办法,增大表空间/删除某些垃圾文件/更改表空间自动增长

更改表空间设置为自动增加
  1. -- 首先查询你的表空间的临时表空间对应的数据文件名
  2. select file_id from dba_temp_files where tablespace_name=你的表空间名;
  3. -- 使用刚刚查询出来的file_id更改时间表空间的增长方式为自动增长
  4. alter database tempfile file_id autoextend on next 100M maxsize 1G;

问题解决;

其他一些关于此的知识

1、查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)

select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用户查看



2、缩小临时表空间大小

alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TELEMT\TEMP01.DBF'
resize 100M;



3、扩展临时表空间:

方法一、增大临时文件大小:

SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;

方法二、将临时数据文件设为自动扩展:

SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;

方法三、向临时表空间中添加数据文件:

SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;



4、创建临时表空间:

SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;



5、更改系统的默认临时表空间:

--查询默认临时表空间

select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';

--修改默认临时表空间

alter database default temporary tablespace temp1;

所有用户的默认临时表空间都将切换为新的临时表空间:

select username,temporary_tablespace,default_ from dba_users;

--更改某一用户的临时表空间:

alter user scott temporary tablespace temp;



6、删除临时表空间

删除临时表空间的一个数据文件:

SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;

删除临时表空间(彻底删除):

SQL> drop tablespace temp1 including contents and datafiles cascade constraints;



7、查看临时表空间的使用情况(GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询)

GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小

dba_temp_files视图的bytes字段记录的是临时表空间的总大小

SELECT temp_used.tablespace_name,

       total - used as "Free",

       total as "Total",

       round(nvl(total - used, 0) * 100 / total, 3) "Free percent"

  FROM (SELECT tablespace_name, SUM(bytes_used) / 1024 / 1024 used

          FROM GV_$TEMP_SPACE_HEADER

         GROUP BY tablespace_name) temp_used,

       (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total

          FROM dba_temp_files

         GROUP BY tablespace_name) temp_total

 WHERE temp_used.tablespace_name = temp_total.tablespace_name



8、查找消耗资源比较的sql语句

Select se.username,

       se.sid,

       su.extents,

       su.blocks * to_number(rtrim(p.value)) as Space,

       tablespace,

       segtype,

       sql_text

  from v$sort_usage su, v$parameter p, v$session se, v$sql s

 where p.name = 'db_block_size'

   and su.session_addr = se.saddr

   and s.hash_value = su.sqlhash

   and s.address = su.sqladdr

 order by se.username, se.sid

 

9、查看当前临时表空间使用大小与正在占用临时表空间的sql语句

select sess.SID, segtype, blocks * 8 / 1000 "MB", sql_text

  from v$sort_usage sort, v$session sess, v$sql sql

 where sort.SESSION_ADDR = sess.SADDR

   and sql.ADDRESS = sess.SQL_ADDRESS

 order by blocks desc;



10、临时表空间组介绍

  1)创建临时表空间组:

create temporary tablespace tempts1 tempfile '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;

create temporary tablespace tempts2 tempfile '/home/oracle/temp2_02.dbf' size 2M tablespace group group2;

 

 2)查询临时表空间组:dba_tablespace_groups视图

select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME

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

GROUP1                         TEMPTS1

GROUP2                         TEMPTS2



 3)将表空间从一个临时表空间组移动到另外一个临时表空间组:

alter tablespace tempts1 tablespace group GROUP2 ;

select * from dba_tablespace_groups;



GROUP_NAME                     TABLESPACE_NAME

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

GROUP2                         TEMPTS1

GROUP2                         TEMPTS2



 4)把临时表空间组指定给用户

alter user scott temporary tablespace GROUP2;



 5)在数据库级设置临时表空间

alter database <db_name> default temporary tablespace GROUP2; 



 6)删除临时表空间组 (删除组成临时表空间组的所有临时表空间)

drop tablespace tempts1 including contents and datafiles;

select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME

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

GROUP2                         TEMPTS2



drop tablespace tempts2 including contents and datafiles;

select * from dba_tablespace_groups;

GROUP_NAME                     TABLESPACE_NAME



11、对临时表空间进行shrink(11g新增的功能)

--将temp表空间收缩为20M

alter tablespace temp shrink space keep 20M; 

--自动将表空间的临时文件缩小到最小可能的大小

ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/lmtemp02.dbf’; 



临时表空间作用

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

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

网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。

也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。



临时表空间的主要作用:

  索引create或rebuild;

  Order by 或 group by;

  Distinct 操作;

  Union 或 intersect 或 minus;

  Sort-merge joins;

  analyze。

oracle临时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段的更多相关文章

  1. 无法通过128在表空间temp中扩展temp字段

    truncate 表后在执行,这个原因是数据太大了

  2. oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

    今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace,        b.segfile# ...

  3. oracle创建用户和角色、管理授权以及表空间操作

    show user 显示当前用户connect username/password@datebasename as sysdba 切换用户和数据库 和用户身份 Oracle登录身份有三种: norma ...

  4. Oracle备份恢复之无备份情况下恢复undo表空间

    UNDO表空间存储着DML操作数据块的前镜像数据,在数据回滚,一致性读,闪回操作,实例恢复的时候都可能用到UNDO表空间中的数据.如果在生产过程中丢失或破坏了UNDO表空间,可能导致某些事务无法回滚, ...

  5. oracle表空间查询维护命令大全之三(暂时表空间)史上最全

    --UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLE ...

  6. ORA-01652: 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段(EXP-00056: 遇到 ORACLE 错误 1652 ORA-01652: unable to extend temp segment by 128 in tablespace TEMP)

    数据库报 ORA-01652: 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段 两种解决方式: 第一种) sql>select * from v$tempfile; 发现tem ...

  7. ORA-01652:无法通过128(在表空间temp中)扩展temp段 解决方法

    ORA-01652:无法通过128(在表空间temp中)扩展temp段 解决方法 (2016-10-21 16:49:53)   今天在做一个查询的时候,报了一个"ORA-01652无法通过 ...

  8. ora-01652无法通过128(在表空间temp中)扩展temp段

    今天提交请求后,提示ORA-01652: 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段.最后通过ALTER DATABASE TEMPFILE '/*/*/db/apps_st/d ...

  9. ORA-01652:无法通过128(在表空间TEMP中)扩展temp段

    在Oracle数据库中进行order by or group by.索引的创建和重创建.distinct操作.union & intersect & minus sort-merge ...

随机推荐

  1. Android桌面小插件——Widget

    Android桌面小插件--Widget 效果图 实现 1. 创建Widget类 创建一个Widget类,并实现页面创建的时候,就实现显示时间 package com.kongqw.kqwwidget ...

  2. Android二维码扫描、生成

    Android二维码扫描.生成 现在使用二维码作为信息的载体已经越来越普及,那么二维码的生成以及扫描是如何实现的呢 google为我们提供了zxing开源库供我们使用 zxing GitHub源码地址 ...

  3. Docker简介/安装/使用

    什么是Docker?docker是一个开源的应用容器引擎,系统级的轻量虚拟化技术.应用程序的自动化部署解决方案,能够迅速创建一个容器,并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的 ...

  4. Markdown对应Yelee主题语法

    概述 这里说的是Yelee主题的语法和原生语法是有些区别的:更多的基础语法可以到Cmd Markdown上面去查看:但是我觉得都会各有不同吧 注意这里说的不是真正意义上的Markdown语法 标题 一 ...

  5. linux源码编译安装OpenCV

    为了尽可能保证OpenCV的特性,使用OpenCV源码编译安装在linux上.先从安装其依赖项开始,以ubuntu 14.04.X为例讲解在Linux上源码编译安装OpenCV,其他linux版本可以 ...

  6. How to speed up Remote Desktop Connection in Win7

    run following command in DOS window: netsh interface tcp set global autotuninglevel=disabled or nets ...

  7. Ubuntu和Windows设备共享

    http://blog.csdn.net/pipisorry/article/details/51725942 蓝牙设备如键盘.鼠标都可以. 装的双系统win7和Ubuntu,如果只使用一个系统,蓝牙 ...

  8. 【Netty源码学习】ChannelPipeline(一)

    ChannelPipeline类似于一个管道,管道中存放的是一系列对读取数据进行业务操作的ChannelHandler. 1.ChannelPipeline的结构图: 在之前的博客[Netty源码学习 ...

  9. Android游戏开发之SurfaceView的使用-android学习之旅(五)

    SurfaceView和View的区别 View是在ui主线程中,直接响应用户的操作,以及任务的分发,但是任务比较复杂会出现阻塞. SurfaceView则不会出现这种问题,以为它直接从内存等取得图像 ...

  10. 最简单的基于DirectShow的示例:视频播放器自定义版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...