ORA-03294, Resize Tablespace, High Water Mark

记得以前第一次通过 Resize Datafile 方式来 Thrink Tablespace 的时候,总共30G表空间,明明使用了10G,剩余20G空闲,但是你想缩小到12G的时候确报错,错误信息为

引用内容 引用内容
ERROR at line 1:
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);


[本日志由 Sonic 于 2010-01-14 11:09 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: ORA-03294 Resize Tablespace High Water Mark
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.