最近导一个空库到数据库后,发现占用的表空间非常大,执行表收缩(SHRINK SPACE CASCADE)后,发现实际占用的空间不到1%。 但是收缩表空间大小提示错误     ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 5000M;     提示:ORA-03297: file contains used data beyond requested RESIZE value    原因1:压缩表空间大小,最小必须是该表空间目前最大块段的大小    原因2:表的初始大小分配的太大    一、征对原因1,可以采用移动表空间的方法来减小block_id --找出目前GCOMM2表空间最大的block_id SELECT MAX(block_id)   FROM dba_extents  WHERE tablespace_name = 'GCOMM2'; MAX(BLOCK_ID) -------------        994816 --计算目前最大块的段所占用的空间(该数据库的block大小是8092) SQL> show parameter db_block_size ;   NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_block_size                        integer     8192   SELECT 994816*8192/1024/1024 FROM dual; 994816*8192/1024/1024 ---------------------                  7772 因此目前该表空间只能收缩到7772M左右 ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 7772M; --通过移动移动表空间来收缩表空间大小步骤 1.创建表空间用于将较大block_id的表移到此表空间 CREATE TABLESPACE "gcomm_bk" DATAFILE 'D:\ora_tablespace\gcomm_bk.dbf' SIZE 2048M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; 2.找出需要移动表空间的表并将这些表移到刚创建的表空间 --收缩表 SELECT DISTINCT 'alter table ' || segment_name ||                 ' SHRINK SPACE CASCADE; '   FROM dba_extents  WHERE tablespace_name = 'GCOMM2'    AND segment_type = 'TABLE'    AND file_id = 11    AND block_id > 30336;  --移动表空间 SELECT DISTINCT 'alter table ' || segment_name ||                 ' move tablespace "gcomm_bk"; '   FROM dba_extents  WHERE tablespace_name = 'GCOMM2'    AND file_id = 11    AND block_id > 30336/*872704*/    AND segment_type = 'TABLE'; 移动表空间过程中出现了这个错误:ORA-01658: 无法为表空间 gcomm_bk 中的段创建 INITIAL 区 原因:表空间不够。 解决:将该表空间设为自动扩展或者直接扩大该表空间 注:如果是smallfile 表空间无法设为自动扩展,则必须手动将这些表空间先加大 ALTER DATABASE DATAFILE 'D:\ora_tablespace\gcomm_bk.dbf' RESIZE 7000M; 3.重建该空间的索引 SELECT DISTINCT 'alter INDEX ' || segment_name ||' REBUILD TABLESPACE "gcomm_bk"; '  FROM dba_extents WHERE tablespace_name = 'GCOMM2' AND segment_type = 'INDEX'; 4.再次查看此时gcomm2表空间最大块的段 SELECT MAX(block_id)   FROM dba_extents  WHERE tablespace_name = 'GCOMM2'; SELECT 30336*8192/1024/1024 FROM dual; 5.收缩表空间(执行成功) ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 500M; 6.移动表空间下的对象 允许表移动 SELECT DISTINCT 'alter table '||owner||',' || segment_name || ' enable row movement; '  FROM dba_extents WHERE tablespace_name = 'gcomm_bk'   AND segment_type = 'TABLE'; 释放存贮--针对delte SELECT DISTINCT 'alter table '||owner||',' || segment_name || ' shrink space cascade; '  FROM dba_extents WHERE tablespace_name = 'gcomm_bk'   AND segment_type = 'TABLE'; 移动表到新的表空间 SELECT DISTINCT 'alter table '||owner||',' || segment_name || ' move tablespace GCOMM2; '  FROM dba_extents WHERE tablespace_name = 'gcomm_bk'   AND segment_type = 'TABLE'; 重建索引到新的表空间 SELECT DISTINCT 'alter INDEX  '||owner||',' || segment_name ||' REBUILD TABLESPACE GCOMM2; '  FROM dba_extents WHERE tablespace_name = '"gcomm_bk"'  AND segment_type = 'INDEX'; 移动大对象到新的表空间 select 'alter table '||owner||','||table_name||' move lob('||colmn_name||') store as (tablespace GCOMM2)' from dba_lobs   where segment_name in(select segment_name                          from dba_extents                          where tablespace_name ='gcomm_bk' and  segment_type like 'LOB%') 二、征对原因2可通过减小表或索引的初始化大小来收缩表空间 --征对块大的表 减小其初始分配大小 SELECT DISTINCT 'alter table ' || segment_name ||                 ' MOVE STORAGE(INITIAL 1M) ;'   FROM dba_extents  WHERE tablespace_name = 'GCOMM2'    AND segment_type = 'TABLE'    AND file_id = 11    AND block_id > 30336; --征对块大的索引减小其初始分配大小 SELECT DISTINCT 'alter index ' || segment_name ||                 ' REBUILD  tablespace GCOMM2 storage(initial 64K next 1M pctincrease 0);'   FROM dba_extents  WHERE tablespace_name = 'GCOMM2'    AND segment_type = 'INDEX'    AND file_id = 11    AND block_id > 30336; 然后再收缩表空间 ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 1000M; 执行成功,原先为7G多。

oracle如何收缩表空间,ORACLE收缩表空间相关推荐

  1. oracle数据库表空间文件收缩实例

    Oracle数据文件收缩实例 数据文件的作用 HWM的基本概念 查看数据文件的使用情况 包括内容:数据文件大小,已经used空间,free空间,hwm信息 select /*+ ordered use ...

  2. oracle更改system表空间大小,收缩system表空间大小

    注:这种方法功能有限,如果system表空间末尾写入了一些系统表资料,那么是无法回收的. C:\Documents and Settings\Administrator.XY>sqlplus & ...

  3. oracle清除temp表空间,Oracle 11G清理临时表空间

    一. 临时表空间收缩 1.1 说明 关于Oracle 的临时表空间,之前有整理过一篇Blog: 以下操作会占用大量的temporary: 1.用户执行imp/exp 导入导出操作时,会使用大量的tem ...

  4. mysql 表空间收缩_mysql表碎片清理和表空间收缩

    mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式) OPTIMIZETABLE [tablename],当然这种方式只 ...

  5. oracle 默认表空间 10g,Oracle10g 表空间管理

    1.表空间分类: (1)临时表空间:存放临时数据 (2)数据表空间:又称为用户表空间,用来存放永久数据(不删除永久存在) (3)日志表空间:用来存放日志信息 一般情况下,用户使用时只需要创建数据表空间 ...

  6. oracle:表空间使用率,表空间扩容

    查找oracle数据文件,表空间的位置 执行:Select * FROM DBA_DATA_FILES;查询表空间中数据文件具体位置和文件名,表空间名等 SELECT a.tablespace_nam ...

  7. Oracle 数据库表空间不足拓展方法实例演示,表空间剩余大小查看,通过新增表空间文件拓展表空间,表空间文件路径查看

    Oracle 数据库表空间 第一章:表空间的拓展 ① 查看剩余表空间大小 ② 查看表空间文件路径 ③ 通过新增表空间文件拓展表空间 ④ 查看表空间已分配大小 第一章:表空间的拓展 ① 查看剩余表空间大 ...

  8. oracle创建表空间 扩展表空间文件 修改表空间自动增长

    1. 创建表空间 create tablespace SIRM2  datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...

  9. Oracle创建删除用户、角色、表空间、导入导出数据库命令行方式总结

    说明: 在创建数据库时输入的密码,是修改系统默认的密码,以system和sysman等系统默认身份登录时要输入的密码就是修改后的密码(创建数据库时输入的密码) 如果要创建新的用户就必须以system或 ...

最新文章

  1. FusionCharts参数的详细说明
  2. Kubernetes-基于k8s-v1.14.2安装dashboard-1.10.1
  3. UESTC_秋实大哥下棋 2015 UESTC Training for Data StructuresProblem I
  4. NOI2011 智能车比赛
  5. [转] Lodash
  6. 【感悟】人生本如梦,学会看淡一切。
  7. director 3d tank
  8. python中oxf_python的strip()函数不工作
  9. 1603错误_iPhone恢复iTunes未知错误怎么办【解决方法】
  10. 计算机端口详解(总结)
  11. 财务报表分析实务(第五讲)
  12. 击破“坪效”天花板,从“3050法则”看餐饮数字化迁徙
  13. 尚来古籍——江氏族谱
  14. 体系结构 记分牌实例
  15. mybatis-plus insertStrategy、updateStrategy、whereStrategy属性
  16. Squeeze-and-Excitation Networks(SENet) 学习笔记
  17. java中循环右移两位_1008 数组元素循环右移问题 (20分)【java题解】
  18. 途中指定两点的所有简单路径
  19. Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知
  20. HTML期末学生作业 HTML+CSS+JavaScript仿猫眼电影在线网站 Hbuilder网页制作

热门文章

  1. 阿里Java开发手册——如何优化数据库?
  2. 视频人脸检测——Dlib版(六)
  3. iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)
  4. Debian11镜像更新为阿里巴巴开源镜像站镜像,切换root用户,解决用户名不在sudoers文件中此事将被报告,Debian11 文件夹对话框、火狐浏览器、命令终端等没有最大化和最小化
  5. CentOS 8安装并配置NFS服务
  6. Shiro授权流程图
  7. 计组学习笔记(一):浮点数的表示和运算
  8. linux删除副本文件,RMAN不能删除控制文件副本解决
  9. 移除apt源_apt提示处理归档 (--unpack)时出错的解决办法
  10. http安全 Java_HTTP通信安全-身份验证 | 字痕随行