通常ORACLE數據庫占用硬盤空間過大的原因有這么幾個(以oracle 10.2.0版本為例):
1、oracle的安裝目錄...\oracle\product\10.2.0\admin\orcl\udump目錄下,追蹤日志文件占用大量硬盤空間;
2、oracle的安裝目錄...\oracle\product\10.2.0\oradata\orcl目錄下,UNDO表空間文件占用大量硬盤空間。
針對以上兩個問題,解決方法如下。
第一個問題解決方法:
udump目錄下面是oracle的追蹤日志文件,如果平常不去關心的話,建議刪除掉。對數據庫不會造成影響。另外在SQLPLUS中輸入:
alter system set sql_trace =false;
如果需要保留追蹤日志文件的,那可以給設定一個限額。命令行如下:
alter system set max_dump_file_size='100m' ;
注:max_dump_file_size默認大小值的單位是數據塊,因此如果限定了大小為100M,需要加單引號。
第二個問題的解決方法:
需要回收UNDO表空間。先創建一個新的過度的表空間UNDOTBS02,將UNDO表空間指向到UNDOTBS02,然后DROP原來的表空間UNDOTBS01,刪除UNDOTBS01.DBF文件,釋放磁盤空間。接着創建新的表空間UNDUTBS01,再將UNDO表空間指向到新建表空間的UNDOTBS01,DROP過度的表空間UNDOTBS02。
具體操作如下:
1)使用DBA登陸SQLPLUS
2)建立過度表空間undotbs02
create undo tablespace undotbs02 datafile 'e:\undotbs02.dbf' size 100M;
3)切換UNDO表空間為新的UNDO表空間
alter system set undo_tablespace=undotbs02 scope=both;
4)刪除原UNDO表空間
drop tablespace undotbs01 including contents;
5)刪除硬盤上...\oracle\product\10.2.0\oradata\orcl目錄下的undotbs01.dbf文件。
6)建立新的表空間undotbs01,切換UNDO表空間到新建的undotbs01,刪除undotbs02表空間。方法同上。
至此,完成了UNDO表空間回收。
上面的操作是臨時解決UNDO表空間過大的方法。Oracle的AUM(Auto Undo Management)從出生以來就經常出現只擴展,不收縮(shrink),通常我們可以設置足夠的UNDO表空間大小,然后取消其自動擴展屬性。