oracle數據庫 修改表空間數據文件大小,優化存儲

查詢數據文件存儲使用狀況數據庫

/**  示例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
相關文章
相關標籤/搜索