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 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
2月前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
44 0
|
2月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之从Oracle数据库同步数据时,checkpoint恢复后无法捕获到任务暂停期间的变更日志,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
14天前
|
SQL 数据采集 Oracle
实时计算 Flink版产品使用问题之如何读取oracle中的blob类型的数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
15天前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用问题之连接到Oracle数据库但无法读取到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
Oracle Java 关系型数据库
实时计算 Flink版产品使用合集之在同步Oracle数据时,需要下载并添加到项目中的jar包主要包括哪些
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
14天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之在进行Oracle数据库的全量同步时,只同步了一条数据而源表实际上包含多条数据,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
15天前
|
资源调度 Oracle 关系型数据库
实时计算 Flink版产品使用问题之同步oracle表时,任务不报错,但是读不到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
资源调度 Oracle 关系型数据库
实时计算 Flink版产品使用合集之同步Oracle数据时,一张表产生了大量的连接数,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何SQL同步数据到Oracle数据库中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。