阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle resize DBF报错“ORA-03297” 解决

193次阅读
没有评论

共计 2887 个字符,预计需要花费 8 分钟才能阅读完成。

错误号信息分析:

——————————————————————————–

[Oracle@localhost ~]$ oerr ora 03297
03297, 00000, “file contains used data beyond requested RESIZE value”
// *Cause:  Some portion of the file in the region to be trimmed is
//          currently in use by a database object
// *Action: Drop or move segments containing extents in this region prior to
//          resizing the file, or choose a resize value such that only free
//          space is in the trimmed.
[oracle@Database-backup ~]$ 

报错信息很提示:文件包含超出要求的调整值的数据,如下来看下各数据文件可回收到的最小大小,若没 resize 回收余地如何解决。

Oracle 查看 DBF 回收 resize 最小大小 –> 各 DBF 最大 block 大小

——————————————————————————–

SQL> 
    select ‘alter database datafile ”’ || file_name || ”’ resize ‘ ||decode(MAX_GB, 0, ‘100M;’, MAX_GB || ‘G;’) RESIZE 命令,
      a.TABLESPACE_NAME,
      a.AUTOEXTENSIBLE,
      a.TOTAL_GB,
      a.MAX_GB
  from (SELECT TABLESPACE_NAME,
              FILE_NAME,
              AUTOEXTENSIBLE,
              CEIL(SUM(BYTES / 1024 / 1024 / 1024)) TOTAL_GB,
              CEIL(SUM(case when MAX_BLOCK.FILE_ID is null then 0 else MAX_BLOCK.MAX_BLOCK end)) MAX_GB
        – 由于 size 大小需为整
        –CEIL(N) 取大于等于数值 N 的最小整数
        –FLOOR(N) 取小于等于数值 N 的最大整数
          FROM DBA_DATA_FILES
          LEFT JOIN (SELECT MAX(BLOCK_ID) * 8 / 1024 / 1024 MAX_BLOCK,
                          FILE_ID
                      FROM DBA_EXTENTS
                    GROUP BY FILE_ID) MAX_BLOCK
            ON MAX_BLOCK.FILE_ID = DBA_DATA_FILES.FILE_ID
        GROUP BY TABLESPACE_NAME, /*MAX_BLOCK.FILE_ID,*/
                  FILE_NAME,
                  AUTOEXTENSIBLE
        ORDER BY TABLESPACE_NAME) A
 where TOTAL_GB != MAX_GB;

 
RESIZE 命令                                                                                                  TABLESPACE_NAME                AUTOEXTENSIBLE    TOTAL_GB  MAX_BLOCK_GB
—————————————————————————- ——– ——– ——– ——– ——– —————————– —————– ————- ————
alter database datafile ‘/data/datafiles/ZB_LSP_001/sysaux01.dbf’ resize 8G;            SYSAUX                            YES                      10                    8
alter database datafile ‘/data/datafiles/ZBLSP_DATA_001.dbf’ resize 27G;                TBS_LMP                            YES                    30                    27
alter database datafile ‘/data/datafiles/ZB_LSP_001/tbs_scheduler.dbf’resize 10G;    TBS_SCHEDULER                YES                    32                    10
SQL> 

——————————————————————————–

提示:
当 MAX_BLOCK_GB 接近 TOTAL_GB 时,可通过查询 DBA_EXTENTS 按照 block_id 排序,move 部分最大块对象(适用于 block_id 极其且较少的不连续 block_id’ 例如:数据文件 Resize 引起的 ORA-03297 报错 ’)
当然,若通过 dba_free_space 查询数据文件空间剩余较多,想对剩余空间进行部分 resize 来释放系统空间,可同如下方式解决
1、写个批处理 move 对象,注意索引失效处理;
2、导出,重建数据文件,再导入;

扩展:

查看碎片比:select tablespace_name,count(*) chunks,max(bytes/1024/1024) max_chunk from dba_free_space group by tablespace_name; 
                    #CHUNK 列表示表空间中可用有多少可用的空闲数据块,如果空闲块较多,超过 100,则需要对相邻碎片进行整合

查看 block_id 极其不连续情况
select * from (SELECT segment_name,block_id ,LEAD( block_id) OVER (ORDER BY block_id desc)/* 整列向下移动一行 */ block_id_ FROM dba_extents) where  block_id -block_id_ >10000

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148846.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2887字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中