查詢數據文件存儲使用狀況數據庫
/** 示例1 只查詢*/ select b.file_id 文件ID, b.tablespace_name 表空間, b.file_name 物理文件名, b.bytes / 1024 / 1024 總字節數, (b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 已使用, sum(nvl(a.bytes, 0)) / 1024 / 1024 剩餘, round(sum(nvl(a.bytes, 0)) / (b.bytes) * 100, 2) 剩餘百分比 from dba_free_space a, dba_data_files b where a.file_id = b.file_id group by b.tablespace_name, b.file_name, b.file_id, b.bytes order by b.tablespace_name; /** 示例2 附帶查詢壓縮腳本*/ select a.file#, a.name, a.bytes / 1024 / 1024 CurrentMB, ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo, (a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB, 'alter database datafile ''' || a.name || ''' resize ' || ceil(HWM * a.block_size) / 1024 / 1024 || 'M;' ResizeCmd from v$datafile a, (SELECT file_id, MAX(block_id + blocks - 1) HWM FROM DBA_EXTENTS GROUP BY file_id) b where a.file# = b.file_id(+) And (a.bytes - HWM * a.block_size) >0 and rownum < 10
修改數據文件容量語句oracle
alter database datafile 'D:\DSINSTALL\ORACLE\ORADATA\ORCL\USERS_DATA01.DBF' resize 10M;
樓主在此處碰見了一個問題,在清理了一大批數據後,發現表空間的存儲大小基本沒變,強行修改數據文件大小也不行,會提示「資源正在佔用」,後面瞭解到,在刪除數據時最好使用下列語句:大數據
/* 清空表i數據*/ truncate table table_name; 注:不要使用delete刪除,因爲oracle自帶回滾機制或者oracle處於數據保護機制,使用delete刪除的數據oracle會臨時保存,相似於假刪除/回收站 /* 刪除用戶及附屬數據*/ drop user user_name descade;
若是數據表曾經存在大數據狀況下,還須要修改表的初始化STORAGE值,語句以下,該語句的含義是修改表/索引的初始值爲64k,每次增加的幅度爲32kspa
--表 select 'ALTER TABLE '||owner||'.'||table_name||' MOVE TABLESPACE '||tablespace_name||' STORAGE(INITIAL 64K NEXT 32K);' from dba_tables where owner='AA' and initial_extent>65536 --索引 select 'ALTER INDEX '||owner||'.'||index_name||' REBUILD STORAGE(INITIAL 64K NEXT 32K);' from dba_indexes where owner='AA' and initial_extent>65536 --分區表 select 'ALTER table '||table_owner||'.'||table_name||' MOVE PARTITION '||PARTITION_NAME||' STORAGE(INITIAL 64K NEXT 32K);' from DBA_tab_PARTITIONS where table_owner='AA' and initial_extent>65536 --分區索引 select 'ALTER INDEX '||index_owner||'.'||index_name||' REBUILD PARTITION '||PARTITION_NAME||' STORAGE(INITIAL 64K NEXT 32K);' from DBA_ind_PARTITIONS where index_owner='AA' and initial_extent>65536
清空當前用戶數據庫表下存儲大於1M的表數據腳本查詢語句code
select 'truncate table ' || segment_name||';', bytes/1024/1024 MB, u.* from user_extents u where bytes/1024/1024 > 1
查詢數據庫中各個表的實際數據存儲使用狀況blog
select segment_name, sum(bytes)/1024/1024 MB from user_extents u group by segment_name