Oracle-resize收缩数据文件脚本

简介:

Oracle resize收缩数据文件脚本

SELECT d.tablespace_name,
       a.file#,
       a.name,
       ceil(hwm * a.block_size) / 1024 / 1024 resizeto, --可以resize的目标大小
       a.bytes / 1024 / 1024 currentmb, --当前大小
       (a.bytes / 1024 / 1024) - (ceil(hwm * a.block_size) / 1024 / 1024) saveing_size_mb, --resize可以节省出的空间
       'alter database datafile ''' || a.name || ''' resize ' ||
       ceil(ceil(hwm * a.block_size) / 1024 / 1024) || 'M;' resize_script --resize脚本,需要ceil取整数
  FROM v$datafile a,
       (SELECT file_id,
               MAX(block_id + blocks - 1) hwm
          FROM dba_extents de
        ---    WHERE de.tablespace_name = 'PDMS_MIG_DATA'
         GROUP BY file_id) b,
       dba_data_files d
 WHERE a.file# = b.file_id
   AND d.file_id = a.file#
      --   AND d.tablespace_name = 'PDMS_MIG_DATA'
   AND (a.bytes / 1024 / 1024) - (ceil(hwm * a.block_size) / 1024 / 1024) > 128  --释放空间大于128MB
 ORDER BY 1,
          2;

上述方法计算不准确时可采用下列sql

--https://blog.dbi-services.com/resize-your-oracle-datafiles-down-to-the-minimum-without-ora-03297/

WITH hwm AS
 (
  -- get highest block id from each datafiles ( from x$ktfbue as we don't need all joins from dba_extents )
  SELECT /*+ materialize */
   ktfbuesegtsn ts#,
    ktfbuefno relative_fno,
    MAX(ktfbuebno + ktfbueblks - 1) hwm_blocks
    FROM sys.x$ktfbue
   GROUP BY ktfbuefno,
             ktfbuesegtsn),
hwmts AS
 (
  -- join ts# with tablespace_name
  SELECT NAME tablespace_name,
          relative_fno,
          hwm_blocks
    FROM hwm
    JOIN v$tablespace
   USING (ts#)),
hwmdf AS
 (
  -- join with datafiles, put 5M minimum for datafiles with no extents
  SELECT tablespace_name,
          file_name,
          nvl(hwm_blocks * (bytes / blocks),
              5 * 1024 * 1024) hwm_bytes,
          bytes,
          autoextensible,
          maxbytes
    FROM hwmts
   RIGHT JOIN dba_data_files
   USING (tablespace_name, relative_fno)
  -- where tablespace_name='APPS_DATA'
   )
SELECT tablespace_name,
       CASE
         WHEN autoextensible = 'YES'
              AND maxbytes >= bytes THEN -- we generate resize statements only if autoextensible can grow back to current size
          '/* reclaim ' || to_char(ceil((bytes - hwm_bytes) / 1024 / 1024),
                                   999999) || 'M from ' ||
          to_char(ceil(bytes / 1024 / 1024),
                  999999) || 'M */ ' || 'alter database datafile ''' ||
          file_name || ''' resize ' || ceil(hwm_bytes / 1024 / 1024) || 'M;'
         ELSE -- generate only a comment when autoextensible is off
          '/* reclaim ' || to_char(ceil((bytes - hwm_bytes) / 1024 / 1024),
                                   999999) || 'M from ' ||
          to_char(ceil(bytes / 1024 / 1024),
                  999999) ||
          'M after setting autoextensible maxsize higher than current size for file ' ||
          file_name || ' */'
       END SQL
  FROM hwmdf
 where 1=1 
 and tablespace_name not like '%UNDO%'
 and  bytes - hwm_bytes > 1024 * 1024 * 128 -- resize only if at least 128MB can be reclaimed
 ORDER BY bytes - hwm_bytes DESC
目录
相关文章
|
2月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
42 0
|
2月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
15天前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
2月前
|
机器学习/深度学习 Oracle 关系型数据库
Oracle 19c单机一键安装脚本分享
Oracle 19c单机一键安装脚本分享
53 2
|
3月前
|
Oracle 安全 关系型数据库
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据库备份脚本分享-Python
Oracle数据库备份脚本分享-Python
27 0
|
2月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
24 0
|
2月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
32 0
|
2月前
|
Oracle 安全 关系型数据库
Oracle安装部署再也不用头疼了,分享一个实用的一键部署脚本,建议收藏!
Oracle安装部署再也不用头疼了,分享一个实用的一键部署脚本,建议收藏!
76 0
|
3月前
|
存储 Oracle 关系型数据库