在對Oracle的表進行刪除操作的時候,雖然數據被清空了,但是物理上占用的空間卻沒有被釋放掉,這有可能使我們的DB服務器的物理存儲始終在增長。
我們在刪除用戶,表的同時也要對datafile文件進行resize。
具體resize的大小可以通過下面的SQL語句來確認。
SELECT 'alter database datafile ''' || t1.file_name || ''' resize ' || ceil((nvl(hwm, 1) * &&blksize) / 1024 / 1024) || 'M;' resize_cmd FROM dba_data_files t1, ( SELECT file_id, MAX(block_id + blocks - 1) hwm FROM dba_extents GROUP BY file_id ) t2 WHERE t1.file_id = t2.file_id (+) AND ceil(blocks * &&blksize / 1024 / 1024) - ceil((nvl(hwm, 1) * &&blksize) / 1024 / 1024) > 0;
這里的blksize的值通常為8192
檢索得到的結果例:
alter database datafile '/u01/app/oracle/oradata/db/system01.dbf' resize 800M;