本篇内容主要讲解“Oracle临时表空间过大如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle临时表空间过大如何解决”吧!

方案一:增加临时表空间的大小

1.临时表空间的使用情况题

SELECTD.tablespace_name,SPACE"SUM_SPACE(M)",blocks"SUM_BLOCKS",used_space"USED_SPACE(M)",Round(Nvl(used_space,0)/SPACE*100,2)"USED_RATE(%)",SPACE-used_space"FREE_SPACE(M)"FROM(SELECTtablespace_name,Round(SUM(bytes)/(1024*1024),2)SPACE,SUM(blocks)BLOCKSFROMdba_temp_filesGROUPBYtablespace_name)D,(SELECTtablespace,Round(SUM(blocks*8192)/(1024*1024),2)USED_SPACEFROMv$sort_usageGROUPBYtablespace)FWHERED.tablespace_name=F.tablespace(+)ANDD.tablespace_namelike'TEMP%';

查看临时表空间的总大小和最大扩展大小(能看到数据文件)

selectfile_name,tablespace_name,bytes/1024/1024MB,autoextensible,maxbytes/1024/1024MAX_MBfromdba_temp_files;

增加临时表空间的大小

altertablespacetemp1addtempfile'/data/prod/proddata/temp013.dbf'size4G;altertablespacetemp2addtempfile'/data/prod/proddata/temp024.dbf'size4G;方案二:重建临时表空间,解决临时表空间过大的问题。

0.查看目前默认的临时表空间

select*fromdatabase_propertieswhereproperty_name='DEFAULT_TEMP_TABLESPACE';

1.创建中转临时表空间

createtemporarytablespacetemp3tempfile'/data/prod/proddata/temp31.dbf'size4Gtablespacegrouptemp;createtemporarytablespacetemp4tempfile'/data/prod/proddata/temp41.dbf'size4Gtablespacegrouptemp;

2.删除原临时表空间组中的临时表空间

2.1从默认临时表空间组temp中移除temp1和temp2;

ALTERTABLESPACEtemp1TABLESPACEGROUP'';ALTERTABLESPACEtemp2TABLESPACEGROUP'';

2.2删除临时表空间temp1和temp2

droptablespacetemp1includingcontentsanddatafiles;droptablespacetemp2includingcontentsanddatafiles;

2.3如果删除表空间的时候,hang住的话,可以使用下列语句,先把运行在temp临时表空间的sql语句kill掉,这样的sql语句多为排序的语句

Selectse.username,se.sid,se.serial#,su.extents,su.blocks*to_number(rtrim(p.value))asSpace,tablespace,segtype,sql_textfromv$sort_usagesu,v$parameterp,v$sessionse,v$sqlswherep.name='db_block_size'andsu.session_addr=se.saddrands.hash_value=su.sqlhashands.address=su.sqladdrorderbyse.username,se.sid;

2.4 kill相关进程

altersystemkillsession'584,23181';altersystemkillsession'196,64972';altersystemkillsession'262,19832';altersystemkillsession'324,40273';altersystemkillsession'326,38967';altersystemkillsession'1266,54596';

or 重启DB 关闭应用>关闭监听>shutdown immediate startup>启动监听>执行以下操作后打开应用

2.5 创建临时表空间,并加入临时表空间组temp

createtemporarytablespacetemp1tempfile'/data/prod/proddata/temp11.dbf'size4Gtablespacegrouptemp;createtemporarytablespacetemp2tempfile'/data/prod/proddata/temp21.dbf'size4Gtablespacegrouptemp;

2.6 给临时表空间组temp的成员temp1,temp2,temp3,temp4 各增加一个成员。

altertablespacetemp1addtempfile'/data/prod/proddata/temp12.dbf'size4G;altertablespacetemp2addtempfile'/data/prod/proddata/temp22.dbf'size4G;altertablespacetemp3addtempfile'/data/prod/proddata/temp32.dbf'size4G;altertablespacetemp4addtempfile'/data/prod/proddata/temp42.dbf'size4G;

查看临时表空间组temp

select*fromdba_tablespace_groups;

3 临时表空间组仍然使用99.98%

为每个临时表空间添加4G空间

altertablespacetemp1addtempfile'/data/prod/proddata/temp13.dbf'size4G;altertablespacetemp2addtempfile'/data/prod/proddata/temp23.dbf'size4G;altertablespacetemp3addtempfile'/data/prod/proddata/temp33.dbf'size4G;altertablespacetemp4addtempfile'/data/prod/proddata/temp43.dbf'size4G;

到此,相信大家对“Oracle临时表空间过大如何解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!