在前面的V$TEMPSEG_USAGE與Oracle排序中我談到V$TEMPSEG_USAGE和V$SORT_USAGE同源,其中的SEGFILE#代表的是絕對文件號(AFN).那么對于臨時表空間的臨時文件來說,這個字段可以和什么字段進行關聯呢?我們再來看一下V$TEMPFILE的來源,V$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 fn.fntyp = 7
AND fn.fnnam IS NOT NULL
考察x$kcctf底層表,我們注重到TFAFN(temp file absolute file number)在這里存在:SQL> desc x$kcctf
Name Null? Type
----------------------------- -------- --------------------
ADDR RAW(4)
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
而這個字段在構建v$tempfile時并未出現,所以我們不能通過v$sort_usage和v$tempfile直接關聯絕對文件號.通過LOB對象與臨時段一文中方法我們可以簡單構建一個排序段使用,然后來研究一下: SQL> select username,segtype,segfile#,segblk#,extents,segrfno#
2 from v$sort_usage;USERNAME SEGTYPE SEGFILE# SEGBLK# EXTENTS SEGRFNO#
-------- --------- ---------- ---------- ---------- ----------
SYS LOB_DATA 9 18953 1 1我們看到這里的SEGFILE#=9,而在v$tempfile是找不到這個信息的:SQL> select file#,rfile#,ts#,status,blocks
2 from v$tempfile; FILE# RFILE# TS# STATUS BLOCKS
---------- ---------- ---------- ------- ----------
1 1 2 ONLINE 38400我們可以從x$kcctf中獲得這些信息,我們可以看到v$tempfile.file#實際上來自x$kcctf.tfnum,實際上是臨時文件的順序號,而絕對文件號是x$kcctf.tfafn,這個才可以和v$sort_usage.segfile#關聯: SQL> select indx,tfnum,tfafn,tfcsz
2 from x$kcctf; INDX TFNUM TFAFN TFCSZ
---------- ---------- ---------- ----------
0 1 9 38400
1 2 10 12800臨時表空間的絕對文件號可以通過如下查詢獲得: SQL> select tm.file# Fnum ,tf.tfafn AFN,tm.name FName
2 from v$tempfile tm,x$kcctf tf
3 where tm.file# = tf.tfnum; FNUM AFN FNAME
---------- ---------- --------------------------------------------
1 9 /opt/oracle/oradata/conner/temp1.dbf
4 12 /opt/oracle/oradata/conner/temp2.dbf 至于其他就不再贅述。原文地址:http://www.eygle.com/archives/2006/03/tempfile_and_sort_usage. target="_blank" title="Html" >Html