Oracle
與該表空間上的段使用的字節相比,表空間 max_size 的巨大偏差
我剛剛檢查了我們的表空間的大小,因為管理員說昨天我們有一個完整的表空間之後他們已經把它們變大了,我發現了一些非常奇怪的東西。
我希望有人可以對這種情況有所了解。這是我所做的:
1)我查詢了某個表空間的大小,為此我們稱其為“XYZ”。XYZ 是昨天已滿且大小升級的表空間。
select (max_size / 1024 / 1024) as size_megabyte from user_tablespaces where tablespace_name = 'XYZ'
結果為 2048 MB。
2)我使用表空間’XYZ’查詢了段並總結了它們使用的字節
select sum(bytes)/1024/1024 as size_megabyte from user_segments where tablespace_name = 'XYZ'
結果是 36000 MB。
3)我查詢了表空間’XYZ’上剩餘的可用空間
select sum(bytes)/1024/1024 as size_megabyte from user_free_space where tablespace_name = 'XYZ'
結果是 4000 MB
在這一點上,我的下巴掉了下來,我無法理解這裡發生了什麼。有人有線索嗎?我的查詢有問題嗎?
從 2) 和 3) 的結果來看,我希望查詢 1) 返回 40000 MB 而不是 2048 MB。
您獲取表空間大小的方式不正確。
MAX_SIZE(NUMBER) 返回預設的最大段大小(在 Oracle 塊中)。
您可以查詢
dba_data_files
並dba_free_space
得到結果以下是我們一直在使用的監控腳本的摘錄。
SELECT * FROM (SELECT a.tablespace_name, SUM(a.tots)/1024/1024-SUM(a.sumb)/1024/1024 Tot_Used_MB, SUM(a.tots)/1024/1024 Tot_Size_MB, SUM(a.sumb)/1024/1024 Tot_Free_MB FROM (SELECT tablespace_name,0 tots,SUM(bytes) sumb FROM dba_free_space a GROUP BY tablespace_name UNION SELECT tablespace_name,SUM(bytes) tots,0 FROM dba_data_files GROUP BY tablespace_name) a GROUP BY a.tablespace_name);