知识大全 v$tempfile与v$sort

Posted 文件

篇首语:常识是事物可能性的尺度,由预见和经验组成。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 v$tempfile与v$sort相关的知识,希望对你有一定的参考价值。

  在前面的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 HH :MI:SS NLS_CALENDAR=Gregorian )        tf tftsn tf tfrfn        DECODE (BITAND (tf tfsta ) OFFLINE ONLINE UNKNOWN )        DECODE (BITAND (tf tfsta )                DISABLED                READ ONLY                READ WRITE                UNKNOWN               )        fh fpfsz * tf tfbsz fh fpfsz tf tfcsz * tf tfbsz tf tfbsz        fn fnnam  FROM x$kcctf tf x$kccfn fn x$kcvfp fh WHERE fn fnfno = tf tfnum   AND fn fnfno = pxfil   AND tf tffnh = fn fnnum   AND tf tfdup !=    AND fn fntyp =    AND fn fnnam 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 username segtype segfile# segblk# extents segrfno#    from v$sort_usage;

  USERNAME SEGTYPE     SEGFILE#    SEGBLK#    EXTENTS   SEGRFNO# SYS      LOB_DATA                                    

  我们看到这里的SEGFILE#= 而在v$tempfile是找不到这个信息的:

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

  FILE#     RFILE#        TS# STATUS      BLOCKS                              ONLINE      

  我们可以从x$kcctf中获得这些信息 我们可以看到v$tempfile file#实际上来自x$kcctf tfnum 实际上是临时文件的顺序号 而绝对文件号是x$kcctf tfafn 这个才可以和v$sort_usage segfile#关联  

  SQL> select indx tfnum tfafn tfcsz           from x$kcctf;

  INDX      TFNUM      TFAFN      TFCSZ                                                                     

  临时表空间的绝对文件号可以通过如下查询获得:

  

  SQL> select tm file# Fnum tf tfafn AFN tm name FName    from v$tempfile tm x$kcctf tf    where tm file# = tf tfnum;

  FNUM        AFN FNAME                    /opt/oracle/oradata/conner/temp dbf                  /opt/oracle/oradata/conner/temp dbf

cha138/Article/program/Oracle/201311/16729

相关参考