一、什麼是臨時表空間
臨時表空間用于 Oracle 中的排序操作。它也用于連接配接操作。基本上,它是臨時存儲,臨時對象是在這裡建立的。全局臨時表也在這個表空間中建立。這是一個非常重要的表空間,如果管理不當,可能會出現問題。讓我們看看臨時表空間管理的各種查詢
二、oracle建立臨時表空間的方法
這是建立臨時表空間的 SQL
--單個臨時檔案
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/oracle/TEST/oradata/temp_1.dbf' SIZE 1000M;
--多個臨時檔案
CREATE TABLESPACE TEMP TEMPFILE
'/u01/oracle/TEST/oradata/temp_1.dbf' SIZE 1000M
'/u01/oracle/TEST/oradata/temp_2.dbf' SIZE 1000M
;
--使用 ASM
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE '+DATA' SIZE 1000M;
三、如何在 Oracle 中檢查臨時表空間
Oracle 資料庫可以有多個臨時表空間
select tablespace_name,status,contents from dba_tablespaces where contents='TEMPORARY';
我們可以使用以下查詢選擇每個表空間中的檔案
select file_name, tablespace_name, bytes from dba_temp_files
或
select a.name,b.name, a.bytes from v$tempfile a, v$tablespace b where a.ts#=b.ts#
3.1 如何檢查 Temp 表空間的大小
這是有關如何在 oracle 中檢查以 GB 為機關的臨時表空間大小的查詢
select tablespace_name,sum(bytes)/1024/1024/1024 temp_gb
from dba_temp_files group by tablespace_name;
or
select b.name, sum(a.bytes)/1024/1024/1024 from v$tempfile a, v$tablespace b where a.ts#=b.ts# group by b.name;
3.2 oracle如何檢視臨時表空間的可用空間
select tsh.tablespace_name,
dtf.bytes/1024/1024/1024 total_GB,
sum(nvl(tsh.bytes_used,0))/1024/1024/1024 used_GB,
sum(nvl(tsh.bytes_free,0))/1024/1024/1024 free_GB,
(1-sum(nvl(tsh.bytes_free,0))/dtf.bytes)*100 pct,
from v$temp_space_header tsh,
(select tablespace_name, sum(bytes) bytes
from dba_temp_files
group by tablespace_name) dtf
where dtf.tablespace_name = tsh.tablespace_name(+)
group by tsh.tablespace_name, dtf.bytes/1024, dtf.bytes
order by 1
/
在 11g 中,引入了一個新視圖 dba_temp_free_space,我們也可以使用它進行查詢
SELECT * FROM dba_temp_free_space;
3.3 如何在執行個體級别檢查臨時表空間使用情況
select inst_id, tablespace_name, segment_file, total_blocks,
used_blocks, free_blocks, max_used_blocks, max_sort_blocks
from gv$sort_segment;
select inst_id, tablespace_name, blocks_cached, blocks_used
from gv$temp_extent_pool;
select inst_id,tablespace_name, blocks_used, blocks_free
from gv$temp_space_header;
select inst_id,free_requests,freed_extents
from gv$sort_segment;
3.4 如何檢視 Temp 表空間的使用百分比
select tablespace_name, ' %free='|| round(sum(free_blocks) / sum(total_blocks) * 100 ,0)
from gv$sort_segment group by tablespace_name;
3.5 如何找到正在使用臨時表空間的會話
set pagesize 50000 echo off verify off feedback off lines 80 heading on
col username format a15 head 'Username'
col osuser format a15 head 'OS User'
col sid format 99999 head 'Sid'
col logon_time format a14 head 'Logon Time'
col tablespace format a15 head 'Tablespace Name'
select
tablespace
, a.osuser
, a.username
, a.sid
, to_char(logon_time,'MM/DD/YY HH24:MI') logon_time
from v$session a, v$sort_usage b
where a.saddr = b.session_addr;
3.5 如何通過會話檢查臨時表空間使用情況
SELECT s.sid、s.username、s.status、u.tablespace、u.segfile#、u.contents、u.extents、u.blocks
FROM v$session s、v$sort_usage u
WHERE s.saddr=u。 session_addr
ORDER BY u.tablespace, u.segfile#, u.segblk#, u.blocks;
3.6 如果我們還想看到正在運作的 sql
SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text
FROM v$session a, v$tempseg_usage b, v$sqlarea c
WHERE a.saddr = b .session_addr
AND c.address= a.sql_address
AND c.hash_value = a.sql_hash_value
ORDER BY b.tablespace, b.blocks;
3.7 如何使用大量 TEMP 查找會話
col inst_id format 999
col sid format 99999
col status format a11
col program format a20 trunc
col machine format a17 trunc
col action format a39
col module format a39
col blocks heading "TEMP BLOCKS"
SELECT b.blocks, s.inst_id, s.sid, s.status,
s.action,
s.program,
s.machine,
s.module
FROM gv$session s,
gv$sort_usage b
WHERE s.saddr = b.session_addr
and s.inst_id = b.inst_id
and b.blocks > 100000
order by b.blocks desc;
四、oracle如何增加臨時表空間
我們可以通過擴充現有檔案或添加新的臨時檔案來增加臨時表空間。
alter database tempfile '+DATA/test/tempfile01.dbf' resize 10000m ;
or
alter tablespace TEMP add tempfile '+DATA/test/tempfile02.dbf' resize 10000m ;
4.1 如何調整臨時檔案的大小
alter database tempfile '+DATA/test/tempfile01.dbf' resize 10000m ;
4.2 如何删除臨時檔案
無法從普通表空間中删除資料檔案,但可以從臨時表空間中删除臨時檔案。這是sql
ALTER DATABASE TEMPFILE '<temp file>' DROP INCLUDING DATAFILES;