我想知道通常会从Oracle 9i DBMS中删除实际释放磁盘空间的数据。 在过去的情况下,我们曾经有过清理1-2百万行数据的情况,并没有转化为磁盘空间使用量的减less。
场景:
sqlplus > delete from audit_log where date_created between today and the day before; sqlplus > 2 million records deleted. bash$: du -sh (after issuing the delete above)
结果不会改变磁盘空间的使用情况。
这也给我带来了这个问题,需要刷新表以便oracle完全删除所有被删除DML所删除的数据
在Oracle中,从表中删除行不会自动释放任何磁盘空间。 有可能释放磁盘空间,但要做到这一点,你必须找出如何物理放置在数据文件中。 只要数据文件最后有空块,就可以将数据文件调整为较小的大小。 只有在这个成功的操作之后,你才能获得真正的磁盘空间。 如果在数据文件中有很多空白块,但不是最后,则可能最简单的方法是将表中的数据文件所属的表空间移动到新的表空间中,然后删除旧的表空间。 这将不适用于SYSTEM表空间,您不能将SYS对象移动到其他表空间。
有时候,如果你只能移动一个小表,那么发生空间放置的时候你就很幸运,因为它放在了数据文件的末尾。 在这种情况下,一个简单的alter table thesmalltable move; 将重新定位该表,并在数据文件结尾处创build可回收空间[s]。 之后, alter database datafile '/your/df/name.dbf' resize the_new_size; 释放磁盘空间。
一个表被逻辑地放置在一个表空间中。 一个表空间由最小的1个数据文件组成,在很多情况下是多个数据文件。
要完成其他的答案, 清除诊断日志可以帮助您释放一些重要的磁盘空间(高达几GB)。
检查这个: http : //www.databasejournal.com/features/oracle/article.php/3875896/Purging-Oracle-Databases-Alert-Log-with-ADRCI—Usage-and-Warning.htm
基本上,您将运行adrci Oracle命令行实用程序,然后执行:
adrci> set homepath diag/rdbms/yourinstance/yourinstance adrci> purge -age 10080
上面的例子将删除大于1周的诊断痕迹。
同样,检查是否有本地pipe理的表空间 (LMT)或目录pipe理的表空间 (DMT)。 前者应该更好地处理碎片(尽pipe远非完美)。 检查: http : //www.orafaq.com/node/3
试试这个命令来获得一些空间:
DUMP TRAN <database name> WITH NO_LOG
我认为回硬盘空间的最好方法是从硬盘上删除其他不再使用的文件。
从数据库中删除数据的常用方法是执行删除命令,但是这不一定会释放磁盘空间。
EPADMRT > @resizea CURRENT_MEG SAVINGS ID TABLESPACE_NAME RESIZE_COMMAND ----------- ---------- ----- --------------- --------------------------------------------------------------------------------------- 30000 -1 3 UNDO_TS alter database datafile '/var/oradata03/PADMRT/PADMRT_UNDO_01.dbf' resize 30001m; 30000 -1 19 UNDO_TS alter database datafile '/var/oradata04/PADMRT/PADMRT_UNDO_02.dbf' resize 30001m; 20000 -1 11 OPLA_DATA alter database datafile '/var/oradata01/PADMRT/OPLA_DATA01.dbf' resize 20001m; 15360 -1 8 AGILEODM_INDX alter database datafile '/var/oradata01/PADMRT/AGILEODM_INDX_DATA02.dbf' resize 15361m; 20480 -1 13 AGILEODM alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA04.dbf' resize 20481m; 5120 -1 7 AGILEODM_INDX alter database datafile '/var/oradata01/PADMRT/AGILEODM_INDX_DATA01.dbf' resize 5121m; 20480 -1 14 AGILEODM alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA05.dbf' resize 20481m; 32767.1875 -.8125 6 AGILEODM alter database datafile '/var/oradata01/PADMRT/AGILEODM_DATA01.dbf' resize 32768m; 13236 0 5 AGILEODI alter database datafile '/var/oradata01/PADMRT/AGILEODI_DATA01.dbf' resize 13236m; 22784 6 9 AGILEODI alter database datafile '/var/oradata02/PADMRT/AGILEODI_DATA02.dbf' resize 22778m; 32767 30 10 AGILEODM alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA02.dbf' resize 32737m; 10240 42 20 AGILEODI alter database datafile '/var/oradata01/PADMRT/AGILEODI_DATA03.dbf' resize 10198m; 3000 51 16 VQA_DATA alter database datafile '/var/oradata03/PADMRT/VQA_DATA02.dbf' resize 2949m; 3000 72 15 VQA_DATA alter database datafile '/var/oradata01/PADMRT/VQA_DATA01.dbf' resize 2928m; 3000 79 18 VQA_DATA alter database datafile '/var/oradata04/PADMRT/VQA_DATA04.dbf' resize 2921m; 1335 151 4 USERS alter database datafile '/var/oradata01/PADMRT/users01.dbf' resize 1184m; 10240 202 21 AGILEODI alter database datafile '/var/oradata01/PADMRT/AGILEODI_DATA04.dbf' resize 10038m; 6144 938 2 SYSAUX alter database datafile '/var/oradata02/PADMRT/PLMDM_SYSAUX_DATA1_01.dbf' resize 5206m; 4096 1058 1 SYSTEM alter database datafile '/var/oradata02/PADMRT/PLMDM_SYS_DATA1_01.dbf' resize 3038m; 32767 1391 22 OPLA_DATA alter database datafile '/var/oradata01/PADMRT/OPLA_DATA02.dbf' resize 31376m; 10000 7053 17 VQA_DATA alter database datafile '/var/oradata03/PADMRT/VQA_DATA03.dbf' resize 2947m; 32767 7492 12 AGILEODM alter database datafile '/var/oradata02/PADMRT/AGILEODM_DATA03.dbf' resize 25275m; 32767 8749 23 AGILEODM alter database datafile '/var/oradata03/PADMRT/AGILEODM_DATA06.dbf' resize 24018m;
完整的resizea.sql如下所示:
set termout off drop table alan99; set pages 50 set wrap off col resize_command for a180 col id for 9999 create table alan99 as select max(block_id+blocks) block_id,file_id from dba_extents group by file_id; column tablespace_name format a15 column pct format 999.99 set wrap off set lines 320 set trunc off column file_id format 999 set termout on select b.bytes/1024/1024 CURRENT_meg,b.bytes/1024/1024-trunc(c.block_id*8192/1024/1024+1) savings, b.file_id id,b.tablespace_Name,'alter database datafile '''||b.file_name||''' resize ' ||trunc(c.block_id*8192/1024/1024+1)||'m;' resize_command from dba_data_files b, alan99 c where b.file_id=c.file_id order by 2; set termout off drop table alan99; set termout on