社区
基础和管理
帖子详情
oracle删除数据后,空间不释放如何解决???
yanminyansheng
2009-05-31 12:25:30
oracle删除数据后,空间不释放如何解决???
数据数据后,dbf文件还是很大,数据实际只占用了不到一半的空间.有什么方法让dbf文件变小点?
...全文
5430
31
打赏
收藏
oracle删除数据后,空间不释放如何解决???
oracle删除数据后,空间不释放如何解决??? 数据数据后,dbf文件还是很大,数据实际只占用了不到一半的空间.有什么方法让dbf文件变小点?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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)
ORACLE
解决
表
空间
不
释放
空间
由于
数据
库中有一个日志表记录7000万条日志,造成
数据
库占用磁盘283G之多,所以现在要求给磁盘瘦身,但是直接用DELETE语句
删除
,不能
释放
空间
,经过查资料学习,得知这是"HWM"(高水位)造成.经过查找资料总结
解决
方案有两种. 一 彻底
删除
表(没测试,因为不符合我的情况) flashback table tablename1 to before drop rename to tablename2;--【to test3】将表重命名 drop table tablename2 purge; --彻底
Oracle
删除
数据
后
释放
数据
文件所占磁盘
空间
转载自: https://www.cnblogs.com/gaoyuchuanIT/articles/4151231.html https://blog.51cto.com/2681882/2133524 一现象描述 Delete是
oracle
数据
库中的常用操作,尤其是在自动化测试中,初始化环境、前置准备都不可避免的进行增删操作,但持续一时间后,可能会碰到表
空间
不足这类报错现象,这...
关于
Oracle
数据
库
删除
表
空间
后磁盘
空间
不
释放
的问题
有些小白在操作
数据
库时随便新建表
空间
,并且喜欢直接设置最大值把表
空间
文件直接设置成32G,而后在导库的时候又没进行正确操作导致新建的表
空间
并未使用,而把
数据
又全部导入users表
空间
了,这样就造成
数据
库服务器磁盘
空间
的浪费,对于这种情况有两种
解决
方案,把表
空间
减小或者直接
删除
。 首先附一个查询表
空间
使用率的SQL吧(需要有dba权限的用户): select a.tablespace_name, ...
【
Oracle
专栏】
删除
用户
释放
表
空间
但是由于
空间
是大表
空间
,且自动增长的,看到表
空间
文件没有自动收缩,1.3T 但是目前是273M使用的,因此需要收缩一下
空间
。报错:ora12916无法压缩永久表
空间
(shrink:该命令将回收未使用的
空间
并压缩表
空间
。说明:收缩表,移动块中
数据
位置到一起,但 High Water Mark 保持不变。2)
删除
表,收缩表
空间
。说明:收缩表,降低 High Water Mark,并且把相关索引也收缩一下。备注:如果使用turncate直接进行全表
删除
,会直接
释放
表
空间
,不需要进行回收。
oracle
删除
数据
释放
表
空间
流程
生产环境:
数据
库里
空间
不足,niptest表
空间
251G,只使用了17G 再alter database datafile '...../niptest1' resize 10G;的时候说超出了范围要求 由于表变动比较频繁,高水位值比较大 (高水位HWM “High Water Mark “:
oracle
中block有没有使用的分界线,它会随着
数据
的insert而上升,但它并不会随
数据
的delete而下降,因此全表扫描的时间并不因
数据
的delete而减少,相反可能由于块清除反而全表扫描时间增加...
基础和管理
17,377
社区成员
95,111
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章