Oracle數(shù)據(jù)庫刪除表空間后磁盤空間不釋放的問題及解決
有些小白在操作數(shù)據(jù)庫時隨便新建表空間,并且喜歡直接設(shè)置最大值把表空間文件直接設(shè)置成32G,而后在導(dǎo)庫的時候又沒進行正確操作導(dǎo)致新建的表空間并未使用,而把數(shù)據(jù)又全部導(dǎo)入users表空間了,這樣就造成數(shù)據(jù)庫服務(wù)器磁盤空間的浪費,對于這種情況有兩種解決方案,把表空間減小或者直接刪除。
首先附一個查詢表空間使用率的SQL吧(需要有dba權(quán)限的用戶):
select a.tablespace_name, total, free, total - free as used, substr(free / total * 100, 1, 5) as "FREE%", substr((total - free) / total * 100, 1, 5) as "USED%" from (select tablespace_name, sum(bytes) / 1024 / 1024 as total from dba_data_files group by tablespace_name) a, (select tablespace_name, sum(bytes) / 1024 / 1024 as free from dba_free_space group by tablespace_name) b where a.tablespace_name = b.tablespace_name order by a.tablespace_name;
此條SQL可以非常直觀的看到數(shù)據(jù)庫中各個表空間的實時使用率情況,在數(shù)據(jù)庫導(dǎo)庫的時候也可以定時刷新進行查看(但不包括臨時表空間)。
一、修改表空間數(shù)據(jù)文件大小
1、查詢表空間數(shù)據(jù)文件
select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name
2、找到表空間對應(yīng)的數(shù)據(jù)文件后對數(shù)據(jù)文件的大小進行調(diào)整
alter database datafile '/oracle/oradata/ora16/DATA01.dbf' resize 100m --注意替換表空間路徑
在修改表空間大小的時候有可能會報錯,報錯信息**“ORA-03297: 文件包含在請求的 RESIZE 值以外使用的數(shù)據(jù)”**,由于表空間中數(shù)據(jù)并非按順序分布,因此在刪減掉的表空間中可能也存在數(shù)據(jù),就會有面的報錯信息,這個問題的解決方案我以后會在博客中更新;
臨時的替代解決方案就是將表空間大小的數(shù)值稍微改大點重試,比如由10G修改為100M時報錯,可以先修改為500M,如果不報錯就再減小…
二、刪除數(shù)據(jù)庫表空間及文件
刪除表空間及數(shù)據(jù)文件的SQL:
drop tablespace XXX including contents and datafiles;
刪除表空間之前記得斷開所有用戶連接,否則無法刪除,會報錯。
刪除表空間之后在數(shù)據(jù)庫服務(wù)器上使用df -lh(Linux)/df -g(aix)上查看磁盤空間容量發(fā)現(xiàn)和刪除前的是一樣的,并沒有變化。
用lsof -n | grep deleted
找到剛才刪除的dbf文件(后邊會有一個deleted的標(biāo)識),查看對應(yīng)的pid,直接kill掉就可以了。
這是因為這些被刪除的表空間數(shù)據(jù)文件還被數(shù)據(jù)庫進程所持有,在進程關(guān)閉之前磁盤空間是不會釋放的,如果想要驗證該方法的可用性把數(shù)據(jù)庫重啟一次就可以了,數(shù)據(jù)庫重啟的效果等同于使用kill命令。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Tomcat服務(wù)器下使用連接池連接Oracle數(shù)據(jù)庫
本文為大家介紹下在Tomcat服務(wù)器下使用連接池來連接數(shù)據(jù)庫的操作,下面有個不錯的示例,大家可以參考下2014-01-01深入探討:Oracle中如何查詢正鎖表的用戶以及釋放被鎖的表的方法
本篇文章是對Oracle中查詢正鎖表的用戶以及釋放被鎖的表的方法進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle數(shù)據(jù)庫ORA 54013錯誤的解決辦法
ORA 54013 不允許對虛擬列執(zhí)行INSERT 操作,這是Oracle 11 的新特性。接下來通過本文給大家介紹oracle數(shù)據(jù)庫ORA 54013錯誤的解決辦法,非常不錯具有參考借鑒價值,感興趣的朋友一起看看吧2016-10-10詳解Oracle 中實現(xiàn)數(shù)據(jù)透視表的幾種方法
這篇文章主要介紹了詳解Oracle 中實現(xiàn)數(shù)據(jù)透視表的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Oracle數(shù)據(jù)IMP和EXP命令用法詳解
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)IMP和EXP命令用法詳解的相關(guān)資料,我們可以使用Oracle自帶的exp、imp命令來進行數(shù)據(jù)庫備份,imp和exp稱之為導(dǎo)入導(dǎo)出,這種方式也能快速的導(dǎo)入導(dǎo)出table或數(shù)據(jù)庫,需要的朋友可以參考下2023-11-11Oracle的用戶、角色及權(quán)限相關(guān)操作
這篇文章主要介紹了Oracle的用戶、角色及權(quán)限相關(guān)操作,需要的朋友可以參考下2017-07-07