首页 > 数据库 >[Oracle] 收缩表,释放空间

[Oracle] 收缩表,释放空间

时间:2023-05-05 12:23:13浏览次数:48  
标签:释放 name 收缩 压缩 shrink 索引 Oracle table alter

收缩段消除空间碎片的方法有两种:

方法1:使用 Move 命令

alter table table_name move

注意:
1) move 操作会锁表。(如果是很小的表,可以在线做。如果是大表一定要注意,会长时间锁表,只能查询,影响正常业务运行)
2) move 操作会使索引失效,一定要 rebuild。(因为move操作会改变一些记录的ROWID,所以MOVE之后索引会变为无效,需要REBUILD)

方法2:使用 Shrink Space 命令

alter table table_name shrink space [<null>|cpmpact|cascade]

前提条件

1) 必须启用行记录转移(enable row movement)
2) 仅仅适用于堆表,且位于自动段空间管理的表空间(堆表包括:标准表,分区表,物化视图容器,物化视图日志表)

优点:

提高缓存利用率,提高OLTP的性能
减少磁盘I/O,提高访问速度,节省磁盘空间
段收缩是在线的,索引在段收缩期间维护,不要求额外的磁盘空间加参数
cascade:缩小表及其索引,并移动高水位线,释放空间
compact:仅仅是缩小表和索引,并不移动高水位线,不释放空间

如果在业务繁忙时做压缩,
可以使用 alter table shrink space(compact 来对表格进行碎片整理,而不调整高水位线,之后再次调用 alter table table_name shrink space 来释放空间),
或者使用 alter table table_name shrink space(cascade 来同时对索引都进行收缩,这等同于同时执行 alter index idxname shrink space)。

参数 compact 和 cascade 详解

1) campact 参数。如果使用了该参数,oracle会清除段中的碎片并压缩表中的行。

数据库不会理解调整HWM也不会立即释放这些空间。你必须另外再执行一次alter table ....shrink space语句来完成该操作。
这个语句在你在用两个短的操作而不是一个长的操作来完成压缩表所占的空间的情况下是有用的。
对于索引或者索引组织的表使用ALTER [INDEX | TABLE] ... SHRINK SPACE COMPACT和使用ALTER [INDEX | TABLE ... COALESCE是等效的 shrink语句可以级联压缩。相对于 coalesce操作压缩尺度更大,也更能提高性能。如果你不想释放无用的空间,你可以使用coalesce语句。

2) cascade参数。如果使用了该参数,oracle在该表的独立的对象上(包括索引组织表的索引)执行同样的压缩操作。

shrink 命令注意事项
(1)不能和其他alter table语句合并到一起,不能将该语句用于簇、簇表和任何有long类型列的表。
(2)段压缩不支持有函数索引、域索引和bitmap join index的表
(3)该语句不会压缩映射表盒索引组织表,即使你使用cascade字句
(4)不能在压缩表上使用该语句
(5)不能压缩on commit的物化视图的主表。压缩操作之后基于rowid的物化视图必须被重建。

关于启用行记录转移

alter table table_name enable row movement;

练习操作

/* 查看数据表大小 */
select UT.table_name, x.TABLE_SIZE
  from user_tab_comments ut,
       (select Segment_Name, Sum(bytes) / 1024 / 1024 / 1024 as "TABLE_SIZE"
          From User_Extents
         Group By Segment_Name) x
 where ut.table_type = 'TABLE'
   and ut.table_name = x.Segment_Name(+)
 order by x.TABLE_SIZE desc;
/* 释放空间 */
truncate table table_name_001;
alter table table_name_001 enable row movement;
alter table table_name_001 shrink space;

参考资料

https://blog.csdn.net/weixin_30819373/article/details/116324228
https://blog.csdn.net/nangy2514/article/details/107628862
https://www.cnblogs.com/klb561/p/10995016.html

标签:释放,name,收缩,压缩,shrink,索引,Oracle,table,alter
From: https://www.cnblogs.com/jinzesudawei/p/17373770.html

相关文章

  • Oracle使用imp导入dmp文件
    dmp文件导入到Oracle数据库一般有impdp和imp,如果impdp不好用时,就需要使用到imp来进行数据导入。(1).创建用户这一步完全根据个人需要是否创建新的用户createuser[用户名]identifiedby[密码];(2).创建表空间在创建表空间前可以使用如下命令查看以往表空......
  • centos7安装oracle11g11.2.0.4.0
    1,下载oracle11g11.2.0.4.0安装包,解压2,配置安装环境1,下载配置环境文件-------------------------------------------------------------------------------------------------------------------------------------cd/etc/yum.repos.dwgethttp://public-yum.oracle.com/pub......
  • Oracle (0xFFFFFC18): 连接请求超时
    报错信息:2023-05-0402:37:30.314+08:00[INF]Oracle.ManagedDataAccess.Client.OracleException(0xFFFFFC18):连接请求超时在OracleInternal.ConnectionPool.PoolManager`3.CreateNewPR(Int32reqCount,BooleanbForPoolPopulation,ConnectionStringcsWithDiffOrNe......
  • Oracle 动态数组使用-2
    动态数组语法:type<类型名>istableof类型indexbybinary_integer;<变量名>类型名示例:declaretypejo_arr_typeistableofpljson;--jo_arr_type为表(数组)类型jo_arrjo_arr_type;--jo_arr为数组类型变量名typecur_ref_typeisrefcursor;--声明......
  • Linux部署Oracle 12c
    需求描述如何从Oracle官网上下载Oracle数据库之前的版本,例如Oracle12c?目前官网上进去只找到了21和18,那其他的版本呢?如何找到并下载?解决方法1在OracleSoftwareDeliveryCloud里搜索oracledatabase12c注:链接地址为:/*https://edelivery.oracle.com/osdc/faces/SoftwareDel......
  • oracle修改用户密码的方法
    Oracle用户名及默认密码 修改oracle用户的密码有以下方法:普通用户 (1)通过alteruser语法来进行修改,这也是最常见的方式:(2)第二种方式,是通过password命令来修改:从安全性角度来说,推荐大家通过第二种方式来修改用户密码,这样可防止明文密码泄露。sys用户......
  • ORACLE用户基础汇总
    一用户访问问题1.登录用户账号时用户锁定SQL>connectORACLE_OCM/oracleERROR:ORA-28000:帐户已被锁定查看用户资源配置:selecta.username,b.profile,b.resource_name,b.limitfromdba_usersa,dba_profilesbwherea.username='ORACLE_OCM'anda.profile=b.profil......
  • Oracle表空间迁移
    1.检查数据文件状态STATUS为AVAILABLEselectFILE_ID,FILE_NAME,TABLESPACE_NAME,STATUSfromdba_data_files;2.关闭数据库shutdownimmediate3.cp数据文件cp/data/oradata/sms/tbs_mobile_10_001.dbf/data1/oradata/tbs_mobile_10_001.dbfcp/data/oradata/sm......
  • linux释放swap分区内存
    参考文档:https://blog.csdn.net/chenghuikai/article/details/77476830第一步:先执行sync命令#sync第二步:(如果仅仅是清理swap的话,这一步可以不执行)#echo3>/proc/sys/vm/drop_caches说明:**echo1:释放页面缓存echo2:释放目录文件和inodesecho3:释放所有缓存(页面缓存,目录......
  • Windows 11 安装 Oracle 11g
    参考教程主要参考了超级详细的Oracle安装图文详解!手把手教会您从下载到安装!,教程很详细,安装包也有网盘可以下载。前要条件先到控制中心》程序与功能检查安装.NETFramework3.5没有,没有就要勾选安装。一般系统默认是没有装的。本地安装后登录按照教程安装成功后,因为是安装......