oracle⼩记:dba_data_files
今天给表空间扩展的时候,使⽤了dba_data_files进⾏查询。查阅了⽹上的资料。
该系统系统中含有以下字段
每个字段的含义如下:
2019/11/22号更新:
今天发现了⼀个问题。我查阅表空间的时候,发现MAXBYTES ⽐ BYTES 的空间要⼩。字段含义的翻
译:MAXBYTES 为‘如果可以扩展,最⼤可以到多⼤’。然后我发现了BYTES 的容量已经⽐MAXBYTES⼤很多了。如下图:
这时候,难道不是违背了字段的含义了吗?
这是我查阅了资料和⽹上的博客,我发现了⼀个解答
很多⼈的博客上⾯都是这样⼀句话:‘DBA_DATA_FILES中bytes的值要⽐maxbytes的值要⼤
来源于:
Value in BYTES Column Greater than MAXBYTES Column in DBA_DATA_FILES (⽂档 ID 197244.1)’
拜托这么写,谁知道是啥来源。。。
这是来⾃oracle官⽅的⼀篇⽂章。
⽂章⾥⾯有这样的⼀句话‘The BYTES column in DBA_DATA_FILES has a value greater than MAXBYTES column when a datafile was manually resized to a value GREATER than MAXSIZE (MAXBYTES).’
描述:
当⼀个datafile ⼿⼯resize到⼀个⼤于maxsize(maxbytes)的值之后,DBA_DATA_FILES中bytes的值要⽐maxbytes的值要⼤,当该datafile被设置为autoextend on之后,dba_data_files中的maxbytes 值被⾃动结算为⼀个⾮零值。dba_data_files中的bytes是该datafile的当前的⼤⼩(以bytes为单位)
⼿动resize数据⽂件会导致这⼀现象。
实验:
步骤1:新建数据⽂件,初始化5M,最⼤20M,⾃动扩展YES
步骤2:修改该数据⽂件⼤⼩为50M
alter database datafile '/opt/ora11/product/oradata/dms/data02.dbf' resize 50M;
此时出现bytes>maxbytes情况
步骤三:插⼊数据测试是否能⾃动扩展
提⽰⽆法扩展
步骤四:查询DATA表空间剩余⼤⼩
结论:
autoextend=NO时:maxbytes为0,bytes即为该数据⽂件的初始化⼤⼩,也为该⽂件最⼤⼤⼩。
autoextend=YES时:如果bytes>maxbytes,则说明该数据⽂件进⾏了resize,resize即为该数据⽂件可使⽤的最⼤⼤⼩,即使没有达到32G,也⽆法⾃动扩展如果bytes=maxbytes,则该数据⽂件可使⽤⼤⼩为bytes的值,⽆法扩展(受maxbytes限制)
tips:还看到⼀个⽹上的案例:
下⾯是⼀个⽰例:
解释:
当datafile 被resize的时候,dba_data_files中的maxbytes 值不会被更新,此时被更新的列只是bytes列。
dba_data_files中的maxbytes 值是在使⽤ALTER DATABASE command with MAXSIZE option 时才会被更新的。Step-1: Create a New Tablespace
=============================
SQL>create tablespace tst
2  datafile 'd:\oracle\tst01.dbf' size 5m autoextend on;
Tablespace created.
SQL>select file_name, bytes, maxbytes, autoextensible from dba_data_files;
FILE_NAME                                    BYTES  MAXBYTES AUT
---------------------------------------- ---------- ---------- ---
D:\ORACLE\TST01.DBF                        52428801.7180E+10 YES
1 rows selected.
Step-2: Alter the MAXSIZE value from default value
================================================
SQL>alter database datafile 'd:\oracle\tst01.dbf' autoextend on maxsize 10m;
Database altered.
SQL>select file_name, bytes, maxbytes,a utoextensible from dba_data_files;
FILE_NAME                                    BYTES  MAXBYTES AUT
---------------------------------------- ---------- ---------- ---resized
D:\ORACLE\TST01.DBF                        524288010485760 YES
1 rows selected.
Step-3: Resize the datafile to a value higher than MAXBYTES
=========================================================
SQL>alter database datafile 'd:\oracle\tst01.dbf' resize 20m;
Database altered.
SQL>select file_name, bytes, maxbytes, autoextensible from dba_data_files;
FILE_NAME                                    BYTES  MAXBYTES AUT
---------------------------------------- ---------- ---------- ---
D:\ORACLE\TST01.DBF                        2097152010485760 YES
1 rows selected.
The value in BYTES column is GREATER than MAXBYTES.
参考:
Note:182097.1 SYS.FILE$ does not display the correct size for locally managed tablespace files
题话外:此时,该datafile(D:\ORACLE\TST01.DBF)能达到的最⼤⼤⼩是dba_data_files.bytes的值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。