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
目录
相关文章
|
7天前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
7天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
3月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
66 0
|
3月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
7天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
7天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
2月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
47 0