关于临时表空间,在日常生产中会遇到的问题

Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。在某些Oracle一体机,可能会进行大量的运算和排序,产生大量的缓冲区数据。这个时候就会对临时表空间产生压力,可能我们去看的时候查到临时表空间的使用率还远远没有到百分之百,但这些缓冲区数据的堆放不紧凑,高水位线这时候已经很高了,新的缓冲区数据进不来,应用程序会有错误。

查看临时表空间高水位线:

SELECT d.tablespace_name "Name",

TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),‘99999990.900‘) "Size (M)",

TO_CHAR(NVL(t.hwm, 0)/1024/1024,‘99999999.999‘) "HWM (M)",

TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), ‘990.00‘) "HWM %",

TO_CHAR(NVL(t.bytes/1024/1024,0),‘99999999.999‘) "Using (M)",

TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), ‘990.00‘) "Using %"

FROM sys.dba_tablespaces d,

(select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,

(select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from gv$temp_extent_pool group by tablespace_name) t

WHERE d.tablespace_name = a.tablespace_name(+)

AND d.tablespace_name = t.tablespace_name(+)

AND d.extent_management like ‘LOCAL‘

AND d.contents like ‘TEMPORARY‘;

收缩临时表空间

排序等操作使用的临时段,使用完成后会被标记为空闲,表示可以重用,占用的空间不会立即释放,有时候临时表空间会变得非常大,此时可以通过收缩临时表空间来释放没有使用的空间。收缩临时表空间是ORACLE 11g新增的功能。

SQL> ALTER TABLESPACE TEMP SHRINK SPACE KEEP 8G;

SQL> ALTER TABLESPACE TEMP SHRINK TEMPFILE ‘/u01/app/oracle/oradata/GSP/temp02.dbf‘ keep 3000M

对于这两个命令,可以指定可选的KEEP 子句,该子句定义了表空间/临时文件可收缩到的下限。

如果忽略KEEP 子句,则只要满足其它存储属性,数据库就会尽可能尝试收缩表空间/临时文件(所有当前使用的区的总空间)。此操作需联机执行。但是,如果所分配的当前使用的一些区超出了收缩估计值,系统将等待这些区被释放以完成收缩操作。

---执行以下命令释放temp表空间(详见文档:How to Release the Temp LOB Space and Avoid Hitting ORA-1652 (文档 ID 802897.1) )

declare

clb clob;

ch varchar2(32767);

k number;

begin

dbms_lob.createtemporary(clb,true,dbms_lob.call);

for i in 1..1500 loop

ch:=lpad(‘o‘,32767,‘Y‘);

dbms_lob.writeappend(clb,length(ch),ch);

end loop;

k:=dbms_lob.getlength(clb);

dbms_lob.freetemporary(clb);

dbms_output.put_line(‘the clob length: ‘||k);

end;

/

原文地址:https://www.cnblogs.com/kawashibara/p/10473703.html

时间: 2024-08-08 13:10:46

关于临时表空间,在日常生产中会遇到的问题的相关文章

如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp

查询临时表空间有多大: SQL> SELECT tablespace_name, file_name, bytes FROM dba_temp_files WHERE tablespace_name like 'TEMP%'; TABLESPACE_NAME FILE_NAME BYTES ----------------- -------------------------------- -------------- TEMP /the/full/path/to/temp01.dbf 13,9

10g中HASH GROUP BY引起的临时表空间不足

原本在9i上可以顺利完成的CTAS脚本,迁移到10g后运行总是报“ORA-1652: unable to extend temp segment by 128 in tablespace TS_HQY1_TEMP “无法扩展临时表空间的错误.应用人员表示该脚本涉及的数据量在迁移前后变化不大,而且令人匪夷所思的是在新的10g库上临时表空间大小已达40多个G,要远大于原9i库.很显然这不是由于临时表空间过小导致的该问题,更多的原因肯定是出在迁移后Oracle不同的行为方式上. 该脚本每月执行一次用以

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

今天在查数据的时候报错  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

Oracle中临时表空间的清理

作者:iamlaosong Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序.临时表空间的主要作用: 索引create或rebuild Order by 或 group by Distinct 操作 Union 或 intersect 或 minus Sort-merge joins analyze 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长.即使重建了临时表空间,过一段

【oracle11g,14】表空间管理3:临时表空间,表空间的脱机和只读,数据文件迁移,更改表空间数据文件的大小,表空间数据文件的迁移,使用非标准块的表空间,bigfile 表空间

一.临时表空间: 如果临时表空间不足会报ora-1652错误. 二.什么时候使用临时表空间: 排序和分组 索引create或rebuild order by 或group by distinct 操作 union或intersect或minus sort-merge joins analyze 用于排序.分组.索引等操作,在pga中的sort_area中排序,会将排序的中间结果存放到临时表空间中,如果想提高排序的效率可以提高sort_area_size参数值. 临时表空间不能存放持久化对象,推荐

Oracle 表空间的日常维护与管理

目录 Oracle 表空间的日常维护与管理 1.创建数据表空间 2.创建临时表空间 3.创建 UNDO 表空间 4.表空间的扩展与修改大小 5.表空间重命名 6.表空间的删除 7.更改表空间的读写模式 8.更改表空间的在线模式 Oracle 表空间的日常维护与管理 1.创建数据表空间 查询有关表和视图:[使用版本Oracle 11gR2] 1.查看表空间信息 dba_tablespaces v$tablespace 2.查看数据文件 dba_data_files v$datafile 3.查看临

【原创】oracle ORA-01157 ORA-01110 DataGuard 备库 临时表空间报错

简要: 当查询数据库数据时,提示临时表空间异常,报错ORA-01157 ORA-01110,经过对数据文件处理后,已经解决此故障. 环境:Oracle 11g RAC For Linux 6,该库为DataGuard备库 1. 查询数据时报错,如下: ERROR:ORA-01157: cannot identify/lock data file 226 - see DBWR trace fileORA-01110: data file 226: '+DG_DATA02/racdb/blsp_te

ORACLE 临时表空间管理

 临时表空间和临时段 临时表空间用于存放排序.临时表等数据,其信息不需要REDO,因此临时表的DML操作往往比普通表产生的REDO少很多.临时表数据变化不产生REDO,UNDO数据变化产生REDO.临时段不仅仅存在于临时表空间中,也可能存在普通表空间.比如通过CTAS创建一张表,新表的数据放在临时段中,这些临时段在CTAS完成的时候会被转换为PERMENT段.ORACLE7.3版本之前,临时段是在需要时分配,使用完毕后被删除.ORACLE7.3 推出的新算法的核心就是SEP(SORT EXTEN

解决临时表空间的报错

报错信息:[HY000](1652) [Oracle][ODBC][Ora]ORA-01652: 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段 原因分析:oracle临时表空间不足,事务执行一般将会报ora-01652无法扩展临时段的错误.因为oracle总是尽量分配连续空间,一旦没有足够的可分配空间或者分配不连续就会出现上述的现象. 回忆下临时表空间的作用: 临时表空间主要用途是在数据库进行排序运算[如创建索引.order by及group by.distinct.unio