熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

v$tempfile與v$sort

2022-06-13   來源: Oracle 

  在前面的V$TEMPSEG_USAGE與Oracle排序中我談到V$TEMPSEG_USAGE和V$SORT_USAGE同源其中的SEGFILE#代表的是絕對文件號(AFN)

  那麼對於臨時表空間的臨時文件來說這個字段可以和什麼字段進行關聯呢?

  我們再來看一下V$TEMPFILE的來源V$TEMPFILE由如下語句創建:


  SELECT tfinst_id tftfnum TO_NUMBER (tftfcrc_scn)
       TO_DATE (tftfcrc_tim MM/DD/RR HH:MI:SS NLS_CALENDAR=Gregorian)
       tftftsn tftfrfn
       DECODE (BITAND (tftfsta ) OFFLINE ONLINE UNKNOWN)
       DECODE (BITAND (tftfsta )
               DISABLED
               READ ONLY
               READ WRITE
               UNKNOWN
              )
       fhfhtmpfsz * tftfbsz fhfhtmpfsz tftfcsz * tftfbsz tftfbsz
       fnfnnam
  FROM x$kcctf tf x$kccfn fn x$kcvfhtmp fh
 WHERE fnfnfno = tftfnum
   AND fnfnfno = pxfil
   AND tftffnh = fnfnnum
   AND tftfdup !=
   AND fnfntyp =
   AND fnfnnam IS NOT NULL

  考察x$kcctf底層表我們注意到TFAFN(temp file absolute file number)在這裡存在:

  SQL> desc x$kcctf
 Name                          Null?    Type
 
 ADDR                                   RAW()
 INDX                                   NUMBER
 INST_ID                                NUMBER
 TFNUM                                  NUMBER
 TFAFN                                  NUMBER
 TFCSZ                                  NUMBER
 TFBSZ                                  NUMBER
 TFSTA                                  NUMBER
 TFCRC_SCN                              VARCHAR()
 TFCRC_TIM                              VARCHAR()
 TFFNH                                  NUMBER
 TFFNT                                  NUMBER
 TFDUP                                  NUMBER
 TFTSN                                  NUMBER
 TFTSI                                  NUMBER
 TFRFN                                  NUMBER
 TFPFT                                  NUMBER

  而這個字段在構建v$tempfile時並未出現所以我們不能通過v$sort_usage和v$tempfile直接關聯絕對文件號

  通過LOB對象與臨時段一文中方法我們可以簡單構建一個排序段使用然後來研究一下: 

  SQL> select usernamesegtypesegfile#segblk#extentssegrfno#
    from v$sort_usage;

  USERNAME SEGTYPE     SEGFILE#    SEGBLK#    EXTENTS   SEGRFNO#

SYS      LOB_DATA                                    

  我們看到這裡的SEGFILE#=而在v$tempfile是找不到這個信息的:

  SQL> select file#rfile#ts#statusblocks
    from v$tempfile;

  FILE#     RFILE#        TS# STATUS      BLOCKS

                             ONLINE      

  我們可以從x$kcctf中獲得這些信息我們可以看到v$tempfilefile#實際上來自x$kcctftfnum實際上是臨時文件的順序號而絕對文件號是x$kcctftfafn這個才可以和v$sort_usagesegfile#關聯 

  SQL> select indxtfnumtfafntfcsz      
    from x$kcctf;

  INDX      TFNUM      TFAFN      TFCSZ

                                  
                                 

  臨時表空間的絕對文件號可以通過如下查詢獲得:

  

  SQL> select tmfile# Fnum tftfafn AFNtmname FName
    from v$tempfile tmx$kcctf tf
    where tmfile# = tftfnum;

  FNUM        AFN FNAME

                   /opt/oracle/oradata/conner/tempdbf
                  /opt/oracle/oradata/conner/tempdbf

  至於其他就不再贅述


From:http://tw.wingwit.com/Article/program/Oracle/201311/16729.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.