|
最初由 gengyonghui 发布
[B]刚才找了一下,不是在控制文件中,是在数据字典表中。 [/B]
数据字典表不存储数据文件当前的大小, 存储的只是数据文件创建时的大小..
SQL> select file_id,file_name,bytes,blocks from dba_data_files where file_id = 4
;
FILE_ID FILE_NAME BYTES
---------- -------------------------------------------------- ----------
BLOCKS
----------
4 D:\ORACLE\ORADATA\WEBORA9\TEST01.DBF 13631488
1664
SQL> select file#,blocks from file$ where file# = 4;
FILE# BLOCKS
---------- ----------
4 1280
SQL>
alter session set events 'immediate trace name controlf level 10';
dump控制文件的信息..
DATA FILE #4:
(name #5) D:\ORACLE\ORADATA\WEBORA9\TEST01.DBF
creation size=1280 block size=8192 status=0xe head=5 tail=5 dup=1
tablespace 13, index=2 krfil=4 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:2 scn: 0x0006.c7c8c815 09/02/2006 00:52:28
Stop scn: 0xffff.ffffffff 09/02/2006 00:52:27
Creation Checkpointed at scn: 0x0006.c7c8c814 09/02/2006 00:52:27
thread:1 rba 0xb0.2de.10)
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Offline scn: 0x0000.00000000 prev_range: 0
Online Checkpointed at scn: 0x0000.00000000
thread:0 rba 0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Hot Backup end marker scn: 0x0000.00000000
aux_file is NOT DEFINED
alter session set events 'immediate trace name file_hdrs level 10';
dump 数据文件头的信息,
DATA FILE #4:
(name #5) D:\ORACLE\ORADATA\WEBORA9\TEST01.DBF
creation size=1280 block size=8192 status=0xe head=5 tail=5 dup=1
tablespace 13, index=2 krfil=4 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:2 scn: 0x0006.c7c8c815 09/02/2006 00:52:28
Stop scn: 0xffff.ffffffff 09/02/2006 00:52:27
Creation Checkpointed at scn: 0x0006.c7c8c814 09/02/2006 00:52:27
thread:1 rba 0xb0.2de.10)
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Offline scn: 0x0000.00000000 prev_range: 0
Online Checkpointed at scn: 0x0000.00000000
thread:0 rba 0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000
Hot Backup end marker scn: 0x0000.00000000
aux_file is NOT DEFINED
FILE HEADER:
Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000
Db ID=1073838953=0x40017b69, Db Name='WEBORA9'
Activation ID=0=0x0
Control Seq=2924=0xb6c, File size=1664=0x680
File Number=4, Blksiz=8192, File Type=3 DATA
lmt表空间数据文件dba_data_files view的定义.
select
v.name,f.file#, ts.name,
decode(hc.ktfbhccval, 0, ts.blocksize * hc.ktfbhcsz, NULL), size=bytes
decode(hc.ktfbhccval, 0, hc.ktfbhcsz, NULL), blocks
decode(f.status$, 1, 'INVALID', 2, 'AVAILABLE', 'UNDEFINED'),
f.relfile#,
decode(hc.ktfbhccval, 0, decode(hc.ktfbhcinc, 0, 'NO', 'YES'), NULL),
decode(hc.ktfbhccval, 0, ts.blocksize * hc.ktfbhcmaxsz, NULL),
decode(hc.ktfbhccval, 0, hc.ktfbhcmaxsz, NULL),
decode(hc.ktfbhccval, 0, hc.ktfbhcinc, NULL),
decode(hc.ktfbhccval, 0, hc.ktfbhcusz * ts.blocksize, NULL),
decode(hc.ktfbhccval, 0, hc.ktfbhcusz, NULL)
from sys.v$dbfile v, sys.file$ f, sys.x$ktfbhc hc, sys.ts$ ts
where v.file# = f.file#
and f.spare1 is NOT NULL
and v.file# = hc.ktfbhcafno
and hc.ktfbhctsn = ts.ts#
从上面的信息可以看出..
对于lmt的表空间来说, 控制文件与file$数据字典表, 只存储数据文件的创建时的大小, 而数据文件的实际大小是存储在文件头中的..
这也就是为什么我们查询dba_data_files得到数据文件大小的时候, 需要读取x$ktfchb (kerner transaction management file cache header block?)的原因了. |
|