dba_data_files 中表空间名 dba_free_space查不到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dba_data_files 中表空间名 dba_free_space查不到相关的知识,希望对你有一定的参考价值。

SQL> select tablespace_name from dba_data_files;
TABLESPACE_NAME
------------------------------
USERS
UNDOTBS1
SYSAUX
SYSTEM
LEMON
ORANGE1
TTT
7 rows selected.
SQL> select distinct tablespace_name from dba_free_space;
TABLESPACE_NAME
------------------------------
SYSAUX
UNDOTBS1
USERS
LEMON
SYSTEM
ORANGE1
6 rows selected.

我刚建的表空间。。状态也都正常。。里面没有数据
为什么DBA_FREE_SPACE中没有?

参考技术A 由于没有数据,可能表空间还没有分区,那就没有空闲空间了追问

表空间没有分区 ?其实那个表空间已经被我写满,我把表truncate后就有了。那么数据写满了之后 ,会不会产生你所说的表空间未分区呢?可是逻辑上来说不管是满与未满,我都想要知道,有没有一个比较好的视图呢?

参考技术B 表空间TTT里面什么都还没有吧。。

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                         5242880 1.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
   ---------------------------------------- ---------- ---------- ---
   D:\\ORACLE\\TST01.DBF                         5242880   10485760 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                        20971520   10485760 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的值。

以上是关于dba_data_files 中表空间名 dba_free_space查不到的主要内容,如果未能解决你的问题,请参考以下文章

oracle系统视图

Oracle dba_data_files数据字典里的bytes大于maxbytes

[转帖]总结ORACLE系统视图及表大全

ORACLE表空间操作实例

ORA-01157 错误解决,原因DBWR锁定产生

oracle数据库用户删除和表空间