背景:以前在電腦上安裝了oracle並加載了100+G的數據,最近感受用處不大,並且致使電腦相應很慢。因而乎,以爲整理一下oracle數據庫空間,數據庫實例仍是不刪除,做爲之後慢慢摸索使用,把100+G的數據刪除了吧。詳細步驟以下:數據庫
一、登錄PL/SQLoracle
二、以前數據庫使用已久,先查詢下有哪些table、view、index。。。測試
select * from user_segments;/*查看當前數據庫中有哪些table、view、index*/spa
三、刪除掉上述內容table
drop index xxfile
drop view xxselect
drop table xx數據
這裏不肯定是否要先刪除相應的index、view才能刪除table,忘了測試。查詢
刪除掉這些文件以後oracle垃圾站會產生一些垃圾文件,文件名以bin開頭db
四、清楚垃圾站
purge recyclebin; /*清空回收站,刪除表以後會生成不少垃圾文件,文件名以bin開頭*/
五、刪除表空間
alter tablespace user_data online; drop tablespace user_data including contents and datafiles; /*刪除表空間及其關聯的物理文件*/
可是,若是該tablespace是默認空間,則沒法刪除,須要先更改默認空間或者收縮當前默認空間,因爲該默認空間是當初從新設置關聯到非C盤的,所以以爲收縮空間便可。
六、因爲100+G的數據,該空間關聯了4個物理文件,所以逐個刪除
alter tablespace user_data drop datafile 'F:\ORACLE\ORADATA\USER_DATA01.DBF'; /*針對同一表空間關聯多個物理文件的,能夠逐個刪除物理文件*/
七、刪除的差很少了以後,發現C盤有個空間文件較大,因而再收縮一下吧。
alter database datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF'resize 2000M;/*收縮表空間文件大小*/
如下幾條命令是輔助查找和驗證結果的。
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.tablespace_name GROUP BY t.tablespace_name; /*查看錶空間及空間大小*/
SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space FROM dba_data_files ORDER BY tablespace_name; /*查看錶空間、關聯物理文件、總共空間*/
select name from v$datafile; /*表空間的全部物理文件*/
select * from user_segments;/*查看當前數據庫中有哪些tabble、view、index*/