电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

v$tempfile与v$sort


发布日期:2022/11/29
 

在前面的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

至于其他就不再赘述

上一篇:和权限有关的表介绍

下一篇:ORA-12913: 错误解析及处理心得