SQL> select username,user,segtype,segfile#,segblk#,extents,segrfno# from v$sort_usage;
SEGFILE#代表的是絕對文件號(AFN),對應x$kcctf表中的TFAFN(temp file absolute file number)。
SQL> select indx,tfnum,tfafn,tfcsz from x$kcctf;
TFCSZ 是創建臨時文件的塊數
查看臨時文件的絕對文件號
select tf.FILE#, xtf.tfafn, tf.NAME
from v$tempfile tf, x$kcctf xtf
where tf.FILE# = xtf.tfnum;
查看內存中正在使用的臨時文件
col username for a12
col name for a90
select tf.FILE#,su.USERNAME,su.SEGTYPE, tf.NAME
from v$tempfile tf, x$kcctf xtf,v$sort_usage su
where tf.FILE# = xtf.tfnum and xtf.tfafn = su.SEGFILE#;
正在使用的臨時文件是無法刪除的
SQL> select name from v$tempfile;
NAME
------------------------------------------------------------------------------------------
+ASM_DATA/orcl/tempfile/temp.277.925652849
+ASM_DATA/orcl/tempfile/temp.268.925556123
SQL> alter database tempfile '+ASM_DATA/orcl/tempfile/temp.268.925556123' drop;
alter database tempfile '+ASM_DATA/orcl/tempfile/temp.268.925556123' drop
*
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time
而沒有正在使用的臨時文件是可以刪除的
SQL> alter database tempfile '+ASM_DATA/orcl/tempfile/temp.277.925652849' drop;
Database altered.
-----------------------------------------------------------
小知識補充:
數據庫真正的v$基礎視圖用戶無法訪問
可以通過v_$視圖訪問真正的v$基礎視圖
用戶可以訪問的v$視圖實際上是v_$視圖的同義詞
-----------------------------------------------------------
select do.object_type from dba_objects do where do.object_name in('V$TEMPFILE','V$TEMPSEG_USAGE')
可以看到我們通常訪問的v$tempfile其實是個同義詞,這里提到了V$TEMPSEG_USAGE
select * from dba_synonyms where synonym_name='V$TEMPSEG_USAGE';
可以看到 V$TEMPSEG_USAGE 是 V_$SORT_USAGE 的同義詞,而 V_$SORT_USAGE則是基礎視圖V$SORT_USAGE的視圖,由此可知V$TEMPSEG_USAGE與V$SORT_USAGE是等效的。
附:v$tempfile 定義查看過程
select * from v$fixed_view_definition where view_name='V$TEMPFILE';
select FILE#,
CREATION_CHANGE#,
CREATION_TIME,
TS#,
RFILE#,
STATUS,
ENABLED,
BYTES,
BLOCKS,
CREATE_BYTES,
BLOCK_SIZE,
NAME
from GV$TEMPFILE
where inst_id = USERENV('Instance')
select * from v$fixed_view_definition where view_name='GV$TEMPFILE';
select tf.inst_id,
tf.tfnum,
to_number(tf.tfcrc_scn),
to_date(tf.tfcrc_tim,
'MM/DD/RR HH24:MI:SS',
'NLS_CALENDAR=Gregorian'),
tf.tftsn,
tf.tfrfn,
decode(bitand(tf.tfsta, 2), 0, 'OFFLINE', 2, 'ONLINE', 'UNKNOWN'),
decode(bitand(tf.tfsta, 12),
0,
'DISABLED',
4,
'READ ONLY',
12,
'READ WRITE',
'UNKNOWN'),
fh.fhtmpfsz * tf.tfbsz,
fh.fhtmpfsz,
tf.tfcsz * tf.tfbsz,
tf.tfbsz,
fn.fnnam
from x$kcctf tf, x$kccfn fn, x$kcvfhtmp fh
where fn.fnfno = tf.tfnum
and fn.fnfno = fh.htmpxfil
and tf.tffnh = fn.fnnum
and tf.tfdup != 0
and bitand(tf.tfsta, 32) <> 32
and fn.fntyp = 7
and fn.fnnam is not null
SQL> desc x$kcctf
Name Null? Type
----------------------------------------- -------- ----------------------------
ADDR RAW(8)
INDX NUMBER
INST_ID NUMBER
TFNUM NUMBER
TFAFN NUMBER
TFCSZ NUMBER
TFBSZ NUMBER
TFSTA NUMBER
TFCRC_SCN VARCHAR2(16)
TFCRC_TIM VARCHAR2(20)
TFFNH NUMBER
TFFNT NUMBER
TFDUP NUMBER
TFTSN NUMBER
TFTSI NUMBER
TFRFN NUMBER
TFPFT NUMBER
TFMSZ NUMBER
TFNSZ NUMBER