一、什么是临时表空间临时表空间用于Oracle中的排序操作。它也用于连接操作。基本上,它是临时存储,创建临时对象的地方。全局临时表也在这个表空间中创建。这是一个非常重要的表空间,如果管理不当可能会导致问题。让我们看一下临时表空间管理的各种查询。二、oracle创建临时表空间的方法这是SQL创建临时表空间的方法。--单个临时文件CREATETEMPORARYTABLESPACETEMPTEMPFILE'/u01/oracle/TEST/oradata/temp_1.dbf'SIZE1000M;--多个临时文件CREATETABLESPACETEMPTEMPFILE'/u01/oracle/TEST/oradata/temp_1.dbf'SIZE1000M'/u01/oracle/TEST/oradata/temp_2.dbf'SIZE1000M;--UseASMCREATETEMPORARYTABLESPACETEMPTEMPFILE'+DATA'SIZE1000M;3、如何查看Oracle中的临时表空间Oracle数据库可以有多个临时表空间。selecttablespace_name,status,contentsfromdba_tablespaceswherecontents='TEMPORARY';我们可以使用以下查询来选择每个表空间中的文件。selectfile_name,tablespace_name,bytesfromdba_temp_files或selecta.name,b.name,a.bytesfromv$tempfilea,v$tablespaceb其中a.ts#=b.ts#1。如何检查临时表空间的大小这里是关于如何在Oracle中检查临时表空间大小(以GB为单位)的查询。selecttablespace_name,sum(bytes)/1024/1024/1024temp_gbfromdba_temp_filesgroupbytablespace_name;或者选择b.name,sum(a.bytes)/1024/1024/1024fromv$tempfilea,v$tablespacebwherea.ts#=b.ts#groupbyb.name;2、oracle中如何查看临时表空间的可用空间selecttsh.tablespace_name,dtf.bytes/1024/1024/1024total_GB,sum(nvl(tsh.bytes_used,0))/1024/1024/1024used_GB,sum(nvl(tsh.bytes_free,0))/1024/1024/1024free_GB,(1-sum(nvl(tsh.bytes_free,0))/dtf.bytes)*100pct,来自v$temp_space_headertsh,(selecttablespace_name,sum(bytes)bytesfromdba_temp_filesgroupbytablespace_name)dtfwheredtf.tablespace_name=tsh.tablespace_name(+)groupbytsh.tablespace_name,dtf.bytes/1024,dtf.bytesorderby1/in11g中,引入了一个新视图dba_temp_free_space,我们也可以用它来查询。SELECT*FROMdba_temp_free_space;3、如何在实例级别检查临时表空间使用情况selectinst_id,tablespace_name,segment_file,total_blocks,used_blocks,free_blocks,max_used_blocks,max_sort_blocksfromgv$sort_segment;selectinst_id,tablespace_name,blocks_cached,blocks_usedfromgv$temp_extent_pool;selectinst_id,tablespace_name,blocks_used,blocks_freefromgv$temp_space_header;从gv$sort_segment中选择inst_id、free_requests、freed_extents;4、如何查看Temp表空间的使用百分比selecttablespace_name,'%free='||round(sum(free_blocks()/sumtotal_blocks)*100,0)来自gv$sort_segmentgroupbytablespace_name;5.如何找到正在使用临时表空间的会话setpagesize50000echooffverifyofffeedbackofflines80headingoncolusernameformata15head'Username'colosuserformata15head'OSUser'colsidformat99999head'Sid'collogon_timeformata14head'LogonTime'coltablespaceformata15head'TablespaceName'selecttablespace,a.osuser,a.username,a.sid,to_char(logon_time,'MM/DD/YYHH24:MI')logon_timefromv$sessiona,v$sort_usagebwherea.saddr=b.session_addr;6.如何通过会话SELECTs.sid,s.username,s.status,u.tablespace,u.segfile#,u.contents,u.extents,u.blocksFROMv$sessions,查看临时表空间使用情况v$sort_usageuWHEREs.saddr=usession_addrORDERBYu.tablespace,u.segfile#,u.segblk#,u.blocks;7.如果我们还想查看正在运行的sqlSELECTa.username,a.sid,a.serial#,a.osuser,b.tablespace,b.blocks,c.sql_textFROMv$sessiona,v$tempseg_usageb,v$sqlareacWHEREa.saddr=b.session_addrANDc.address=a.sql_addressANDc.hash_value=a.sql_hash_valueORDERBYb.tablespace,b.blocks;8.如何使用大量TEMP查找会话colinst_id格式999colsid格式99999col状态格式a11col程序格式a20trunccol机器格式a17trunccol动作格式a39col模块格式a39colblocksheading"TEMPBLOCKS"SELECTb.blocks,s.inst_id,s.sid,s.status,s.action,s.program,s.machine,s.module来自gv$sessions,gv$sort_usagebWHEREs.saddr=b.session_addrands.inst_id=b.inst_idandb.blocks>100000orderbyb.blocksdesc;四、oracle如何增加临时表空间我们可以通过扩展现有文件或者增加新的临时文件来增加临时表空间。alterdatabasetempfile'+DATA/test/tempfile01.dbf'resize10000m;oraltertablespaceTEMPaddtempfile'+DATA/test/tempfile02.dbf'resize10000m;1.如何调整临时文件的大小alterdatabasetempfile'+DATA/test/tempfile01.dbf'resize10000m;2.如何删除临时文件普通表空间不能删除数据文件,临时表空间可以删除临时文件。这是sqlALTERDATABASETEMPFILE'
