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的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM