oracle删除数据后,空间不释放如何解决???

yanminyansheng 2009-05-31 12:25:30
oracle删除数据后,空间不释放如何解决???
数据数据后,dbf文件还是很大,数据实际只占用了不到一半的空间.有什么方法让dbf文件变小点?
...全文
5355 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
eternal_hour 2009-06-09
  • 打赏
  • 举报
回复
你设置 pctfree 和 pctused 参数了么? 可能是这个导致的吧
yanminyansheng 2009-06-08
  • 打赏
  • 举报
回复
alter table move 也实验过了,不过没有移到其他空间去,只是在本数据空间内移动.
ks_reny 2009-06-08
  • 打赏
  • 举报
回复

alter table tb move
hotyxm 2009-06-08
  • 打赏
  • 举报
回复
truncate table table name
wangxin016 2009-06-08
  • 打赏
  • 举报
回复
直接删除dbf文件不就行了么
yanminyansheng 2009-06-05
  • 打赏
  • 举报
回复
truncate table 把所有数据都删除了啊 ?
我现在不是要清空,是删除一部分数据啊.
lbee286 2009-06-04
  • 打赏
  • 举报
回复
要清空表的可以用truncate table xxxx;命令
yanminyansheng 2009-06-04
  • 打赏
  • 举报
回复
20 楼 mmqingfeng 你好!

用你方法查了下我的hwm怎么基本和datafile大小是一致的,不是实际数据占有的大小.

难道这样的方式
move table 然后再重新见index
或者
创建临时表保存数据
create table tableback as select * from table_name;
然后清空主表
truncate table table_name;
重新导回数据
insert into table_nameselect * from tableback ;
丢掉临时表
drop table tableback
不能降低hwm吗?
那还有什么方式可以降低hwm.
bzcnc 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yanminyansheng 的回复:]
resize datafile不行,不能使dbf文件变小,只能改大还可以.
[/Quote]

数据文件是可以变小的,尝试如下:


select * from dba_data_files;

/*
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS
1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\USERS01.DBF 4 USERS 5242880 640
2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\SYSAUX01.DBF 3 SYSAUX 272629760 33280
3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\UNDOTBS01.DBF 2 UNDOTBS1 26214400 3200
4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\SYSTEM01.DBF 1 SYSTEM 503316480 61440
5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\DATA01.DBF 5 DATA 20971520 2560
6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\DATA02.DBF 6 DATA 31457280 3840
7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\TEST1.DBF 7 TEST 10485760 1280
*/

alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\TEST1.DBF' resize 5m;
---执行成功!

/*
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS
1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\USERS01.DBF 4 USERS 5242880 640
2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\SYSAUX01.DBF 3 SYSAUX 272629760 33280
3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\UNDOTBS01.DBF 2 UNDOTBS1 26214400 3200
4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\SYSTEM01.DBF 1 SYSTEM 503316480 61440
5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\DATA01.DBF 5 DATA 20971520 2560
6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\DATA02.DBF 6 DATA 31457280 3840
7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\ASIAINFO_ZHENGZW\TEST1.DBF 7 TEST 5242880 640
*/
manchun 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liuyi8903 的回复:]
如果是生产库,表之前非常大,那还是慎用shrink,会产生N多的归档.以及非常的慢
[/Quote]

说的没错!
TerryChenDX 2009-06-03
  • 打赏
  • 举报
回复
删除表数据时使用truncate就行了
yanminyansheng 2009-06-03
  • 打赏
  • 举报
回复 1
vc555
就是不能实现啊,
817,9i上都不能实现

上面说的 ALTER DATABASE DATAFILE '%ORADATADIR%\NETMAXU\UNDOTBS01.DBF' RESIZE 1G; 我只是举个例子.
我数据的dbf文件有2.6G,而数据实际使用只有1.3G;
我用resize 1.6G;1.8;2.0;2.5G都不行.
resize 完全不能变小啊.
mmqingfeng 2009-06-03
  • 打赏
  • 举报
回复
你先查查各个datafiel的hwm是多少,然后才能知道是否可以resize

select file_name, ceil((nvl(hwm, 1) * 8192) / 1024 / 1024) as "HWM(MB)"
from dba_data_files a,
(select file_id, max(block_id + blocks - 1) hwm
from dba_extents
group by file_id) b
where a.file_id = b.file_id(+);
killdaohoa82 2009-06-02
  • 打赏
  • 举报
回复
学习学习
vc555 2009-06-02
  • 打赏
  • 举报
回复
上面我说的那个方法就可以实现了。还有什么问题?
vc555 2009-06-02
  • 打赏
  • 举报
回复
数据库什么版本的?
yanminyansheng 2009-06-02
  • 打赏
  • 举报
回复
哪位近来继续探讨下这个问题.怎么能解决啊?急
gisoracle 2009-06-01
  • 打赏
  • 举报
回复
使用exp导出,删除后,导入imp
uj12_best 2009-06-01
  • 打赏
  • 举报
回复
删了数据库,表空间不会自动收缩,这也是为了节约资源
vc555 2009-06-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yanminyansheng 的回复:]
ALTER DATABASE DATAFILE '%ORADATADIR%\NETMAXU\UNDOTBS01.DBF' RESIZE 1G; 这个不行,报错说设定的值小于数据实际占有值(文件包含在请求的resize值以外使用的数据)
[/Quote]
你缩小到比你实际占有量大些就行了。别人写的1G,不是说你就也得写1g。

正确做法是先降低HWM,再确定实际占有大小,再resize数据文件。

注意操作时对业务的影响
加载更多回复(11)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧