收缩临时表空间

        当排序操作、重建索引等大型操作无法在内存中完成时,临时表空间将为排序提供便利。一般情况下临时表空间为多个用户,多个会话所共
享。不能为会话分批空间配额。临时表空间耗用过度且在不能自动扩展的情形下将收到“ORA-1652:unable to extend temp segment” 错误.下面
描述了过度扩展后如何释放临时表空间。

与之相关的内容参考:
        Oracle 表空间与数据文件
        临时表空间的管理与受损恢复
        Oracle 彻底 kill session

一、临时表空间何时释放
        检索数据的会话游标关闭时,占用的临时空间即被释放
        数据库关闭,重启(一般情况),会话 log off

二、释放过大的临时表空间
1、查看当前临时表空间的情况 SQL> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production SQL> @temp_sort_segment +==================================================================================+ | Segment Name : The segment name is a concatenation of the | | SEGMENT_FILE (File number of the first extent) | | and the | | SEGMENT_BLOCK (Block number of the first extent) | | Current Users : Number of active users of the segment | | Total Temp Segment Size : Total size of the temporary segment in MB | | Currently Used Bytes : Bytes allocated to active sorts | | Extent Hits : Number of times an unused extent was found in the pool | | Max Size : Maximum number of MB ever used | | Max Used Size : Maximum number of MB used by all sorts | | Max Sort Size : Maximum number of MB used by an individual sort | | Free Requests : Number of requests to deallocate | +==================================================================================+ -->此时临时表空间go_temp中达到了32GB Tablespace Segment Current Currently Pct. Extent Max Max Used Max Sort Free Name Name Users Used MB Used Hits Size MB Size MB Size MB Requests -------------- -------- ------- --------- ---- -------- -------- -------- -------- -------- TEMP SYS.0.0 4 4 2 1,864 217 217 217 0 GO_TEMP SYS.0.0 0 0 0 1,305 32,766 367 367 0 ************** ------- --------- -------- -------- -------- -------- -------- sum 4 4 3,169 32,983 584 584 0 SQL> col tbsname format a15 SQL> select s.name tbsname,t.name,(t.bytes/1024/1024) mb,t.status 2 from v$tablespace s,v$tempfile t 3 where s.ts# = t.ts#; TBSNAME NAME MB STATUS --------------- -------------------------------------------------- ---------- ------- TEMP /u02/database/ORADB/temp/tempORADB.dbf 235 ONLINE GO_TEMP /u02/database/ORADB/temp/ORADB_tempORADB.dbf 32767 ONLINE SQL> @temp_usage2 -->此时temp已使用的为4MB,而GO_TEMP未使用 TABLESPACE MB_TOTAL MB_USED MB_FREE -------------------- ---------- ---------- ---------- GO_TEMP 32767 0 32767 TEMP 218 4 214 2、观察及分析临时表空间的耗用情况 SQL> select count(*) from big_table; -->开启另一个session COUNT(*) ---------- 2000000 SQL> select * from big_table order by 2,3,4,5,7,8 desc; -->对big_table 实施排序 SQL> alter index pk_stock_tbl_arc rebuild; -->开启另一个session重建索引 SQL> @temp_sort_segment.sql -->可以看到此时temp表空间耗用达到234MB,go_temp的耗用达到375MB Tablespace Segment Current Currently Pct. Extent Max Max Used Max Sort Free Name Name Users Used MB Used Hits Size MB Size MB Size MB Requests -------------- -------- ------- --------- ---- -------- -------- -------- -------- -------- TEMP SYS.0.0 4 234 2 2,077 234 234 230 0 GO_TEMP SYS.0.0 1 375 1 2,055 32,766 375 375 0 ************** ------- --------- -------- -------- -------- -------- -------- sum 5 609 4,132 33,000 609 605 0 SQL> @temp_sort_users.sql -->获得当前排序的会话 INST_ID SID_SERIAL Username OSUSER SPID MODULE PROGRAM MB_USED TABLESPACE STATEMENTS ---------- ---------- ---------- --------------- ------------ ---------- ---------- ---------- ---------- ---------- 1 1064,9259 SCOTT oracle 14456 SQL*Plus oracle@SZD 234 TEMP 4 B (TNS V1- V3) 1 1073,5166 GO_ADMIN oracle 2480 SQL*Plus oracle@SZD 375 GO_TEMP 1 B (TNS V1- V3) 3、使用resize,缩小临时表空间,如不能缩小,转到下一步 SQL> SELECT 'alter database tempfile ''' || a.name || ''' resize ' || b.siz || 'M;' resize_command 2 FROM v$tempfile a 3 ,(SELECT ceil(tmsize.maxblk * bk.value / 1024 / 1024) siz 4 FROM (SELECT nvl(MAX(segblk#), 128) maxblk 5 FROM v$sort_usage) tmsize 6 ,(SELECT VALUE 7 FROM v$parameter 8 WHERE NAME = 'db_block_size') bk) b; RESIZE_COMMAND ---------------------------------------------------------------------------------------- alter database tempfile '/u02/database/ORADB/temp/ORADB_tempORADB.dbf' resize 106M; alter database tempfile '/u02/database/ORADB/temp/tempORADB.dbf' resize 106M; -->实际上此时占用32GB的临时数据文件已经缩小 alter database tempfile '/u02/database/ORADB/temp/ORADB_tempORADB.dbf' resize 106M; Database altered. -->为便于演示,此时假定TEMP为过大的临时表空间且不能释放 -->下面调整表明已使用空间超出了分配的空间 SQL> alter database tempfile '/u02/database/ORADB/temp/tempORADB.dbf' resize 106M; alter database tempfile '/u02/database/ORADB/temp/tempORADB.dbf' resize 106M * ERROR at line 1: ORA-03297: file contains used data beyond requested RESIZE value SQL> select count(*) from v$sort_usage where tablespace='TEMP'; -->当前有未释放的临时段 COUNT(*) ---------- 4 /**************************************************/ /* Author: Robinson Cheng */ /* Blog: http://blog.csdn.net/robinson_0612 */ /* MSN: robinson_0612@hotmail.com */ /* QQ: 645746311 */ /**************************************************/ 4、新建一个中转临时表空间 SQL> create temporary tablespace temp2 tempfile '/u02/database/ORADB/temp/ORADB_temp02.dbf' 2 size 10m autoextend on; Tablespace created. -->如果此时过大的临时表空间为缺省的临时表空间,则必须将缺省的临时表空间设置为新的临时表空间之后 SQL> select property_name,property_value from database_properties 2 where property_name like 'DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ -------------------- DEFAULT_TEMP_TABLESPACE TEMP SQL> alter database default temporary tablespace temp2; Database altered. 5、转移用户到中转临时表空间 -->过大临时表空间上的那些用户需要迁移到新建的临时表空间 -->查询dba_users视图查询哪些用户位于过大的临时表空间之上 -->并使用下面的命令将其切换到新的临时表空间 alter user <username> temporary tablespace temp2; 6.等到过大临时表空间上的没有临时段被使用,即已经全部释放即可删除过大的临时表空间 SQL> show user; -->由于当前用户为scott,所以临时表空间未能释放 USER is "SCOTT" SQL> conn / as sysdba -->切换到sysdba Connected. SQL> @temp_usage2 -->临时段已经被释放 TABLESPACE MB_TOTAL MB_USED MB_FREE -------------------- ---------- ---------- ---------- GO_TEMP 106 0 106 TEMP 235 0 235 -->如果没有释放在可以kill session的情况下kill session.利用前面获得的sid,serial#来执行(前提是允许该情况发生). alter system kill session '1064,9259' 7.删除过大的临时表空间 SQL> alter tablespace temp tempfile offline; -->先将其脱机 Tablespace altered. SQL> drop tablespace temp including contents and datafiles; -->删除临时表空间及相应的文件 Tablespace dropped. SQL> select s.name tbsname,t.name,(t.bytes/1024/1024) mb,t.status 2 from v$tablespace s,v$tempfile t 3 where s.ts# = t.ts#; TBSNAME NAME MB STATUS --------------- -------------------------------------------------- ---------- ------- GO_TEMP /u02/database/ORADB/temp/ORADB_tempORADB.dbf 106 ONLINE TEMP2 /u02/database/ORADB/temp/ORADB_temp02.dbf 10 ONLINE -->也可以使用下面的命令来完成仅仅删除单个文件 ALTER DATABASE TEMPFILE '/u02/database/ORADB/temp/tempORADB.dbf' DROP INCLUDING DATAFILES; -->删除单个文件 7、根据需求可以创建原来的临时表空间并将切换出去用户切换到此临时表空间
三、总结
1、关注alert_<sid>.log文件中的ORA-1652错误并调查什么原因导致该错误。有些时候并不是由于当前的SQL 导致临时表空间不能扩展,很可能
        由于前一个SQL耗用了99%的临时表空间,而后一个SQL执行时即出现错误。对于此类情况应调查前一SQL并调整避免过多的磁盘排序。
2、如果基于空间压力应该关闭临时表空间的自动扩展。因此为临时表空间设定合理的大小就成了一个问题。个人的解决方案是首先检查ORA-1652
    其次是观察业务高峰期的峰值。如前面查询中的字段Max Size(: Maximum number of MB ever used)的值来预估。如果大师们有更好的建议
    不妨拍砖。
3、通过重启数据库,临时表空间所耗用的大小有时候并不能缩小。
4、在Oracle 11g之前一般是通过创建中转临时表空间来达到缩小的目的。不是很完美,因为有些时候临时段未释放导致不能删除临时表空间及
        数据文件。在11g可以直接使用下面的命令来完成:
        alter tablespace temp shrink space;
        alter tablespace temp shrink tempfile '<dir>' keep n <mb/kb>;
5、系统缺省的临时表空间不能被删除,因此如果系统缺省的临时表空间过大删除前应该新置一个系统缺省的临时表空间。
6、删除过大临时表空间前其上的用户应该先将其设定到中转临时表空间,重建后再将其置回原状态。
7、减少磁盘排序的首要任务调整SQL,如避免笛卡尔积,为表添加合理的索引等。其次要考虑PGA的值是否设定合理。

四、相关参考
        Oracle 表空间与数据文件
        临时表空间的管理与受损恢复
        Oracle 彻底 kill session

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

v4L2编程

v4L2编程 v4L2是针对uvc免驱usb设备的编程框架&#xff0c;主要用于采集usb摄像头等&#xff0c;编程模式如下&#xff1a; 一&#xff0e;设置采集方式 打开视频设备后&#xff0c;可以设置该视频设备的属性&#xff0c;例如裁剪、缩放等。这一步是可选的。在Linux编程中&…

java环境怎样搭建_如何学习JAVA?怎么搭建JAVA环境?怎么安装JDK?

JAVA在学习JAVA前&#xff0c;我们必须了解并搭建好JAVA所需的开发环境&#xff0c;要让你写代码能让机器听得懂并执行&#xff0c;JDK(Java Developers Kits)自然是是必须的安装JDK前的准备首先我们要先知道自己的电脑系统是几位版本的&#xff0c;右键”此电脑“点击菜单里的…

神奇的机械动态图,看了一遍又一遍!最后一个真神奇~

全世界只有3.14 % 的人关注了爆炸吧知识神奇的机械科技动态图&#xff0c;看了一遍又一遍&#xff01;最后一个真神奇&#xff5e;▲金属切割的慢镜头&#xff0c;美&#xff01;▲齿轮变速原理演示▲塑料成型机器▲切丝的食品机器▲螺旋状的通心粉制造▲高温融化锁的过程▲一次…

Envoy实现.NET架构的网关(三)代理GRPC

.NET网关与Gateway实战-Envoy与kong课程Envoy实现.NET架构的网关&#xff08;一&#xff09;静态配置与文件动态配置Envoy实现.NET架构的网关&#xff08;二&#xff09;基于控制平面的动态配置什么是GRPCgRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。gRPC 的主要好处…

Linux 下用来查询安装包信息的RPM选项

Linux 下用来查询安装包信息的RPM选项RPM是RedHat的包管理器&#xff0c;用来安装、卸载、升级和查询基于RedHat Linux的安装包。RHEL和基于它的系统使用rpm命令来完成这些功能。AD&#xff1a;RPM是RedHat的包管理器&#xff0c;用来安装、卸载、升级和查询基于RedHat Linux的…

C#_空值判断

(1) nullnull 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。那么也只有引用型的变量可以为null &#xff0c;如果 int inull,的话&#xff0c;是不可以的&#xff0c;因为Int是值类型的。(2)""、String.Empty、String.Length 0 这两个…

如何用Java讲一句话重复五遍_Java 0515 第二次课作业

import java.util.*;public class Work_01 {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println("上午是否合格?");String judge scan.next();//输入是否while(!"是".equals(judge)){//用equals方法判断…

C专家编程复习摘要一

一、关于类型转换 K&R C的不说了&#xff0c;说了还容易混淆&#xff0c;只说ANSI C的&#xff1a; 如果其中一个操作数的类型是unsigned long int&#xff0c;那么另外一个操作数也被转换为unsigned long int。其次其中一个操作数的类型是long int&#xff0c;而另一个操作…

一张图看懂华为计算全联接2020

全世界只有3.14 % 的人关注了爆炸吧知识END◆ 推荐阅读 ◆点击下方图片即可阅读华为邓泰华&#xff1a;让每一位开发者的智慧汇聚成全生态创新&#xff0c;共同点亮多样性计算新时代左右滑动查看更多☟

独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!

最近一年的工作&#xff0c;有很大的比重在做云平台的事情&#xff0c;简单来说&#xff0c;就是为公司内用户提供一个PaaS&#xff0c;用户可以在我们的云平台上方便的将单机服务程序扩展为多实例程序&#xff0c;以平台服务化的方式对外提供。在这里简单分享一下。 首先简单说…

C# 使用Timer控件设置时间间隔

Timer 控件可以定期引发事件&#xff0c;该控件是为 Windows 窗体环境设计的。时间间隔的长度由 Interval 属性定义&#xff0c;其值以毫秒为单位。若启用了该组件&#xff0c;则每个时间间隔引发一个 Tick 事件&#xff0c;在该事件中添加要执行的代码。如图1 所示为 Timer 控…

mysql分析工具

今儿上课的时候老师讲到一个mysql的分析工具&#xff0c;我才恍然大悟记起上次去新浪笔试的一道题大概的意思好像就是说&#xff1a;抓出服务器中最耗费时间的sql语句。当时就蒙了根本不懂这些。 MySQL Slow Log 分析工具 mysqldumpslow - mysql官方提供的慢查询日志分析工具my…

编写java的应用_编写Java应用程序

import javax.swing.JOptionPane;public class Account //账户类{private String name; //储户姓名private double balance; //账户余额public Account(String name,double balance){this.name name;this.balance balance;}public String getName() //返回账户名{return name;…

vijos p1347(最大乘积(整数划分?))(25—100分)

跟数的划分有些类似&#xff0c;递归记忆化搜索&#xff0c; 做过数的划分的人做这道题目应该不是很难。 http://www.cnblogs.com/zyxx233/archive/2012/12/08/2809187.html 这是数的划分题解 同样的&#xff0c;我还是以haha来作为函数.....&#xff08;个人癖好&#xff09; …

吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!

1981年&#xff0c;中国数学会开始举办"全国数学联赛"&#xff0c;经过1981、1982、1983三年的实践&#xff0c;这一群众性的数学竞赛活动得到了广大中学师生欢迎&#xff0c;也得到教育行政部门、各级科学技术协会、以及社会各阶层人士的肯定和支持。"试题所涉…

组装电脑教程(转载)

组装电脑已经越来越受欢迎&#xff0c;性价比在那摆着&#xff0c;而之前品牌机引以为傲的售后服务也已经被组装机赶上&#xff0c;可以说已经没有不选组装机的理由&#xff0c;就连王思聪也是买组装电脑&#xff08;几万元土豪组装机&#xff09;。但是组装电脑对于新手却不是…

SAP BW系统日常维护日常工作及常见的Infopackage错误

1. Why there is frequent load failures during extractions? and how they are going to analyse them? If these failures are related to Data,, there might be data inconsistency in source system..though you are handling properly in transfer rules. You can mo…

java基本类型与引用数据类型_java基本数据类型与引用数据类型总结

昨天京东笔试的一道选择题&#xff0c;被坑了。最近一直在做笔试题&#xff0c;发现自己学了两年多的java&#xff0c;三大框架什么都会&#xff0c;却连基本的拆箱装箱都忘了。昨天考的引用数据类型&#xff0c;基本数据类型都不知道。看来得好好把基础复习几遍了。总结&#…

男朋友的内裤旧了不要扔,关键时刻有大用......

1 女生没有运动内衣不用愁翻翻衣柜总有办法▼2 孩子&#xff0c;你这家庭咋这么散装呢&#xff1f;▼3 这个原地打滑的本领也是一门技术▼4 三轮车夫&#xff1a;我顶不住了......▼5 有空不仅可以一起洗澡还可以一起拉屎▼6 哟&#xff01;哥们儿&#xff0c;我来陪你啦…

基于事件驱动架构构建微服务第9部分:处理更新

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part10-handling-updates-and-deletes/在本文中&#xff0c;我将讨论如何处理事件溯源系统上的更新。在前面的步骤中&#xff0c;我将系统的所有业务变化存储为事件&…