执行这个sql语句的时候,出resize错误 想压缩表空间执行这个alter databasedatafile 'XXXX\xxx.dbf resize 242m语句的时候,出了下面这些错误ORA-03927:文件包含在请求的RESIZE值以外使用的数据,咋个办???谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 空间能不能压缩,能压缩多少,主要看表空间的高水位线,空间是不可以压缩到高水位线以下的。select /*+ ordered use_hash(a,b,c) */a.file_id,a.file_name,a.filesize, b.freesize,(a.filesize-b.freesize) usedsize,c.hwmsize,c.hwmsize - (a.filesize-b.freesize) unusedsize_belowhwm,a.filesize - c.hwmsize canshrinksize from (select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files) a,(select file_id,round(sum(dfs.bytes)/1024/1024) freesize from dba_free_space dfsgroup by file_id) b,(select file_id,round(max(block_id)*8/1024) HWMsize from dba_extentsgroup by file_id ) cwhere a.file_id = b.file_idand a.file_id = c.file_idorder by unusedsize_belowhwm desc;--结果说明:--file_id : 文件编号--file_name: 文件名称--file_size: 数据文件占用磁盘空间大小--freesize:文件中被标记为free的空间大小--usedsize: 使用的空间大小。--hwmsize: 已经分配出去的空间大小,如果希望通过alter database datafile … resize integerM回收空间,将需要这个值作为参考,不能回收到这个值之下,否则会报错。-- unusedsize_belowhwm: 在HWM(高水位标记线之下的空闲空间数),这个是理论上的可以回收的空间大小。-- canshrinksize: 这个是实际大小与HWM标记之间的差,就是还没有分配出去的空间大小。查下你的高水位线。 跑一下这个 script :SELECT 'alter database datafile '||d.file_id ||' resize '||NVL(ROUND(MAX(e.block_id+e.blocks -1)* t.block_size /1024/1024+1),11)||'M;'FROM dba_extents e, dba_data_files d , dba_tablespaces tWHERE d.tablespace_name = t. tablespace_nameAND d.file_id = e.file_id(+)AND t. tablespace_name = :tbsnameAND e. tablespace_name(+) = :tbsnameGROUP BY d.file_id , t.block_size 呵呵,搞复杂了,这和表空间的水位线也没关系。简单点说,就是文件尾部有数据块存在,也就是这个文件虽然有足够的自由空间,但空间分布不是连续的,要解决这个问题,需要查出文件尾部分配空间的段,然后,移去这个段,这样,一点点的逐个移去最靠近文件尾部的段,直到resize确定的边界到文件尾部没有被分配才可以resize,这个操作无疑是很繁琐的。 有搞过pro c的没?问个问题。 oracle数据链路问题。 查找某段日期某段时间的数据 如何格式化输出的数字100.00- 为-100.00;100.00+为+100.00,谢谢! 谁有quest central或者是sql navigator的中文使用手册或帮助? 什么是网络服务名?(在安装oracal10g的时候) Oracle 10g新建数据库test后,怎么登管理界面? oracle存储过程为何不能执行? 资料档案库在建立过程中,机器突然熄火?怎么删除? oracle服务器无法访问从何查找原因具体步骤 求推荐本PL/SQL的教学书 文件中换行符如何处理,困扰(数据导入)
select /*+ ordered use_hash(a,b,c) */
a.file_id,a.file_name,a.filesize, b.freesize,
(a.filesize-b.freesize) usedsize,
c.hwmsize,
c.hwmsize - (a.filesize-b.freesize) unusedsize_belowhwm,
a.filesize - c.hwmsize canshrinksize
from
(
select file_id,file_name,round(bytes/1024/1024) filesize
from dba_data_files
) a,
(
select file_id,round(sum(dfs.bytes)/1024/1024) freesize
from dba_free_space dfs
group by file_id
) b,
(
select file_id,round(max(block_id)*8/1024) HWMsize
from dba_extents
group by file_id
) c
where a.file_id = b.file_id
and a.file_id = c.file_id
order by unusedsize_belowhwm desc;--结果说明:
--file_id : 文件编号
--file_name: 文件名称
--file_size: 数据文件占用磁盘空间大小
--freesize:文件中被标记为free的空间大小
--usedsize: 使用的空间大小。
--hwmsize: 已经分配出去的空间大小,如果希望通过alter database datafile … resize integerM回收空间,将需要这个值作为参考,不能回收到这个值之下,否则会报错。
-- unusedsize_belowhwm: 在HWM(高水位标记线之下的空闲空间数),这个是理论上的可以回收的空间大小。
-- canshrinksize: 这个是实际大小与HWM标记之间的差,就是还没有分配出去的空间大小。
查下你的高水位线。
简单点说,就是文件尾部有数据块存在,也就是这个文件虽然有足够的自由空间,但空间分布不是连续的,要解决这个问题,需要查出文件尾部分配空间的段,然后,移去这个段,这样,一点点的逐个移去最靠近文件尾部的段,直到resize确定的边界到文件尾部没有被分配才可以resize,这个操作无疑是很繁琐的。