ORA-03294, Resize Tablespace, High Water Mark
作者:Sonic 日期:2010-01-14
记得以前第一次通过 Resize Datafile 方式来 Thrink Tablespace 的时候,总共30G表空间,明明使用了10G,剩余20G空闲,但是你想缩小到12G的时候确报错,错误信息为
引用内容
入门时很多人会被此问题困扰,实际上这就是传说中的HWM(Hign Water Mark)在搞鬼,顾名思义,最高水位,去Google上搜一下这个关键字,就知道缘由了。今天刚好客户让我评估一个 Resize Tablespace 的最佳方案,于是特地为HWM兜了条SQL语句出来存于此
引用内容ERROR at line 1:
orA-03297: file contains used data beyond requested RESIZE value
orA-03297: file contains used data beyond requested RESIZE value
入门时很多人会被此问题困扰,实际上这就是传说中的HWM(Hign Water Mark)在搞鬼,顾名思义,最高水位,去Google上搜一下这个关键字,就知道缘由了。今天刚好客户让我评估一个 Resize Tablespace 的最佳方案,于是特地为HWM兜了条SQL语句出来存于此
复制内容到剪贴板
程序代码
程序代码select ff.file_id "File Id",
ff.file_name "File Name",
ff.tablespace_name || ' (' || ff.block_size || ')' "Tablespace Name",
ceil(ff.blocks * ff.block_size / 1024 / 1024) "Current(MB)",
ceil(nvl(max_hwm.hwm, 1) * ff.block_size / 1024 / 1024/1024) "Smallest(GB)",
ceil(((ff.blocks * ff.block_size) -
(nvl(max_hwm.hwm, 1) * ff.block_size)) / 1024 / 1024/1024) "Save(GB)"
from (select file_id,
file_name,
blocks,
ts.tablespace_name tablespace_name,
ts.block_size block_size
from dba_data_files f, dba_tablespaces ts
where f.tablespace_name = ts.tablespace_name
and ts.tablespace_name = 'SONIC_TBS') ff,
(select file_id, max(block_id + blocks - 1) hwm
from dba_extents
where tablespace_name = 'SONIC_TBS'
group by file_id) max_hwm
where ff.file_id = max_hwm.file_id(+)
order by ceil(((ff.blocks * ff.block_size) -
(nvl(max_hwm.hwm, 1) * ff.block_size)) / 1024 / 1024 / 1024);
ff.file_name "File Name",
ff.tablespace_name || ' (' || ff.block_size || ')' "Tablespace Name",
ceil(ff.blocks * ff.block_size / 1024 / 1024) "Current(MB)",
ceil(nvl(max_hwm.hwm, 1) * ff.block_size / 1024 / 1024/1024) "Smallest(GB)",
ceil(((ff.blocks * ff.block_size) -
(nvl(max_hwm.hwm, 1) * ff.block_size)) / 1024 / 1024/1024) "Save(GB)"
from (select file_id,
file_name,
blocks,
ts.tablespace_name tablespace_name,
ts.block_size block_size
from dba_data_files f, dba_tablespaces ts
where f.tablespace_name = ts.tablespace_name
and ts.tablespace_name = 'SONIC_TBS') ff,
(select file_id, max(block_id + blocks - 1) hwm
from dba_extents
where tablespace_name = 'SONIC_TBS'
group by file_id) max_hwm
where ff.file_id = max_hwm.file_id(+)
order by ceil(((ff.blocks * ff.block_size) -
(nvl(max_hwm.hwm, 1) * ff.block_size)) / 1024 / 1024 / 1024);








