广告
返回顶部
首页 > 资讯 > 数据库 >oracle 表收缩
  • 201
分享到

oracle 表收缩

2024-04-02 19:04:59 201人浏览 安东尼
摘要

当使用delete表数据后,空间无法释放,可以使用表收缩释放表空间;注意:当delete表大量数据的时候要注意undo,可以使用:alter  table  emp  

当使用delete表数据后,空间无法释放,可以使用表收缩释放表空间;

注意:当delete表大量数据的时候要注意undo,可以使用:alter  table  emp  nologging; 让其不生产日志


一、表的增长方式

    当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水

    位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配。

    

二、表可收缩的原理

    随着记录的增加高水位线不断的右移,记录的删除不会导致高水位线往回(左)移动

    删除记录后的空闲空间(高水位线左侧)尽管可以使用,但其稀疏性导致空间空闲

    注:完整的表扫描所耗费的时间不会因为记录的减少(删除)而减少


三、使用 alter table tbname shrink space 来收缩表段

 1. 实现原理

     实质上构造一个新表(在内部表现为一系列的DML操作,即将副本插入新位置,删除原来位置的记录)

     靠近末尾处(右端)数据块中的记录往开始处(左端)的空闲空间处移动(DML操作),不会引起DML触发器

     当所有可能的移动被完成,高水位线将会往左端移动(DDL操作)

     新的高水位线右边的空闲空间被释放(DDL操作)

     

 2. 实现前提条件

     必须启用行记录转移(enable row movement)

     仅仅适用于堆表,且位于自动段空间管理的表空间(堆表包括:标准表,分区表,物化视图容器,物化视图日志表)

 

 3. 不能实现收缩的表

     群集表

     具有LONG类型列的表

     LOB段(尽管表本身可以被缩小),注,10gR2以后版本支持对LOB段的收缩

     具有基于提交的物化视图的表(因为禁用了触发器)

     具有rowid物化视图的表(因为rowid发生了变化)

     ioT映射表IOT溢出段

     索引基于函数的表

     未启用行记录转移的堆表

     

 4. 段收缩的优点

     提高缓存利用率,提高OLTP的性能

      减少磁盘I/O,提高访问速度,节省磁盘空间

      段收缩是在线的,索引在段收缩期间维护,不要求额外的磁盘空间

      

 5. 两个选项

     cascade: 缩小表及其索引,并移动高水位线,释放空间

     compact: 仅仅是缩小表和索引,并不移动高水位线,不释放空间

     alter table tbname shrink space 相当于带cascade参数

     

实战练习:

     

1、首先删除表里的数据

sql> alter table FEE_COLLECT_TMP nologging;   ----设置表不产生undo

SQL> delete from FEE_COLLECT_TMP where CUTOFFDAY='20170501';    

SQL> commit;     

     

2、收缩表

SQL> alter table FEE_COLLECT_TMP enable row movement;                 -->开启row movement                           


SQL> alter table FEE_COLLECT_TMP shrink space;                        -->shrink成功                                 

                                                                                                              


3、语法总结:    

ALTER TABLE <table_name> ENABLE ROW MOVEMENT   -->前提条件                                         
                                                                                                 
ALTER TABLE <table_name> SHRINK SPACE [ <NULL> | COMPACT | CASCADE ];                              
                                                                                                   
ALTER TABLE <table_name> SHRINK SPACE COMPCAT;  -->缩小表和索引,不移动高水位线,不释放空间        
                                                                                                   
ALTER TABLE <table_name> SHRINK SPACE;     -->收缩表,降低高水位线;                                
                                                                                                   
ALTER TABLE <table_name> SHRINK SPACE CASCADE; -->收缩表,降低高水位线,并且相关索引也要收缩一下   
                                                                                                   
ALTER TABLE <table_name> MODIFY LOB (lob_column) (SHRINK SPACE);  -->收缩LOB段                     
                                                                                                   
ALTER INDEX IDXNAME SHRINK SPACE;     -->索引段的收缩,同表段

  

#################################################################


1、收缩普通表,批量脚本   

select'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10)from user_tables;  

                                                                                   

select'alter index '||index_name||' shrink space;'||chr(10)from user_indexes; 

  

您可能感兴趣的文档:

--结束END--

本文标题: oracle 表收缩

本文链接: https://www.lsjlt.com/news/41782.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle 表收缩
    当使用delete表数据后,空间无法释放,可以使用表收缩释放表空间;注意:当delete表大量数据的时候要注意undo,可以使用:alter  table  emp  ...
    99+
    2022-10-18
  • Oracle表空间收缩方法是什么
    Oracle表空间收缩方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。应用背景:某些情况下,由于前期设计上没有考虑全面,导致表空间预建太大,远远超出实际...
    99+
    2023-06-06
  • oracle怎么收缩表空间数据文件
    要收缩Oracle数据库中的表空间数据文件,可以按照以下步骤操作:1. 首先,确认表空间中的数据文件是否可以收缩。可以使用以下命令查...
    99+
    2023-09-16
    oracle
  • oracle 收缩表、清理碎片,释放空间
    可以用来收缩段,消除空间碎片的方法有两种: 1.alter table table_name move 需要注意: 1)move操作会锁表。(如果是很小的表,可以在线做。如果是大表一定要注意,会长...
    99+
    2022-10-18
  • oracle 11G表压缩
      最近一套生产库表空间一直告警在90%以上,但的磁盘硬件资源又不足,整个库已经达到26T。库里存储了近4年的数据,与业务沟通说历史数据基本上不会做操作,但是又不能归档,所以想到了压缩表来节省表空...
    99+
    2022-10-18
  • 收缩表消除表中的空块
    收缩一张表时,Oracle会以占用最小存储空间的方式来重新组织数据块。Delete操作通常不会降低高水位线,当做全表扫描时oracle会扫描高水位线下的块,一个表的数据可能不多但执行时间却很长,通常需要注意...
    99+
    2022-10-18
  • Oracle表空间数据库文件收缩的示例分析
    这篇文章主要介绍了Oracle表空间数据库文件收缩的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们经常会遇到数据库磁盘空间爆满的...
    99+
    2022-10-18
  • MySQL5.7怎么在线收缩undo表空间
    这篇文章主要讲解了“MySQL5.7怎么在线收缩undo表空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL5.7怎么在线收缩undo表空间”吧!1. MySQL 5.5时代的un...
    99+
    2023-06-06
  • oracle怎么缩小表空间
    要缩小Oracle数据库中的表空间,可以按照以下步骤进行操作:1. 确定需要缩小的表空间:首先确定要缩小的表空间的名称。2. 查看当...
    99+
    2023-09-16
    oracle
  • 怎么理解Oracle表压缩
    本篇内容介绍了“怎么理解Oracle表压缩”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、官方文档说法:...
    99+
    2022-10-19
  • oracle如何实现压缩表
    这篇文章给大家分享的是有关oracle如何实现压缩表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的...
    99+
    2022-10-19
  • MySQL5.7新特性——在线收缩undo表空间
    1. MySQL 5.5时代的undo log    在MySQL5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会...
    99+
    2022-10-18
  • Oracle表的压缩是怎样的
    本篇文章为大家展示了Oracle表的压缩是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 随着数据库的增长,我们可以考虑使用or...
    99+
    2022-10-19
  • Android仿QQ好友列表实现列表收缩与展开
    ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。 好友QQ列表,可以展开...
    99+
    2022-06-06
    列表 Android
  • sqlserver收缩数据库、收缩数据文件的操作
    一些实际工作中的总结 1、实际工作中收缩数据文件的情况比收缩库的情况多,不建议直接收缩数据库 2、收缩很容易出现等待,收缩会话对应sys.sysprocesses的字段waitresource值类似为15...
    99+
    2022-10-18
  • Mysql脏页flush及收缩表空间原理解析
    mysql脏页 由于WAL机制,InnoDB在更新语句的时候,制作了写日志这一个磁盘操作,就是redo log,在内存写完redo log后,就返回给客户端, 即更新成功。 把内存里的数据写入磁盘的过程,术语就是fl...
    99+
    2022-05-24
    Mysql 脏页flush 收缩表空间
  • mysql共享表空间的扩容、收缩和迁移
    本篇内容介绍了“mysql共享表空间的扩容、收缩和迁移”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • mysql收缩共享表空间的方法是什么
    这篇文章主要讲解了“mysql收缩共享表空间的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql收缩共享表空间的方法是什么”吧! ...
    99+
    2022-10-19
  • Oracle缩表空间问题如何解决
    这篇文章主要介绍“Oracle缩表空间问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Oracle缩表空间问题如何解决”文章能帮助大家解决问题。备注:Oracle 11.2.0.4一. 需...
    99+
    2023-07-02
  • SQL收缩数据库
    数据库收缩:个人理解,数据库在平凡长期操作的过程中会数据的日志文件永远是按一定的比例在增加,数据文件在数据库删除大量的数据后不一定减小磁盘空间,反复操作会出现空间浪费,所以收缩数据库将会得以体现。假设把数据...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作