oracle删除数据后,空间不释放如何解决???
数据数据后,dbf文件还是很大,数据实际只占用了不到一半的空间.有什么方法让dbf文件变小点?
数据数据后,dbf文件还是很大,数据实际只占用了不到一半的空间.有什么方法让dbf文件变小点?
解决方案 »
- 大家帮忙看下,我写了个函数返回字符串,在sql中调用不起作用,高手帮忙
- ORacle 10G安装完后为什么不出现DataBase Configeration assistiant
- fckeditor编辑器问题,不怕分少,只怕解决不了!
- 关于PL/SQL Developer显示BLOB字段问题
- 做oracle的开发一般用哪种语言,那种平台??大家都来说一说~
- 问一个SB问题,请求解答~
- oracle存储过程
- 交叉表的问题
- 关于视图的问题
- sqlldr 插入数据到oracle,数据无法完全插入
- 表 KSOURCE.USERINFO 发生了变化, 触发器/函数不能读它
- 求一个汇总的sql的写法,谢谢了
alter database datafile '/db/adpdb/foo.dbf' resize 1024M
alter table "TABLE_OWNER"."TABLE_NAME" shrink space
我使用这样的方式进行数据空间释放的.
创建临时表保存数据
create table tableback as select * from table_name;
然后清空主表
truncate table table_name;
重新导回数据
insert into table_nameselect * from tableback ;
丢掉临时表
drop table tableback ;
结果是数据文件dbf文件比以前大了一倍,实际数据只占了大概25%;怎么样可以让dbf变小与实际数据保持一致.非常急,望高手指点好方法
ALTER DATABASE DATAFILE '%ORADATADIR%\NETMAXU\UNDOTBS01.DBF' RESIZE 1G;
truncate table table_name
数据实际占有的空间和dbf文件的大小相差太大了.
现在关键问题是如何让dbf文件变小的,ALTER DATABASE DATAFILE '%ORADATADIR%\NETMAXU\UNDOTBS01.DBF' RESIZE 1G; 这个不行,报错说设定的值小于数据实际占有值(文件包含在请求的resize值以外使用的数据)
我数据的dbf文件有2.6G,而数据实际使用只有1.3G;
我用resize 1.6G;1.8;2.0;2.5G都不行.降低HWM是不是用下面两种方法可以实现
可以用 move table 然后再重新见index
或者
创建临时表保存数据
create table tableback as select * from table_name;
然后清空主表
truncate table table_name;
重新导回数据
insert into table_nameselect * from tableback ;
丢掉临时表
drop table tableback (注:不准备用exp/imp方法实现)
就是不能实现啊,
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 完全不能变小啊.
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(+);
数据文件是可以变小的,尝试如下:
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
*/
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.
我现在不是要清空,是删除一部分数据啊.
alter table tb move