从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: Invalid segment or tablespace type。
如果经常在表上执行DML操作,会造成数据库块中数据分布稀疏,浪费大量空间。同时也会影响全表扫描的性能,因为全表扫描需要访问更多的数据块。从oracle10g开始,表可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。
segment shrink分为两个阶段:
1、数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影响比较小。
2、HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。
shrink space语句两个阶段都执行。
shrink space compact只执行第一个阶段。
如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙的时候再执行shrink space降低HWM释放空闲数据块。
shrink必须开启行迁移功能。
alter table table_name enable row movement ;
注意:alter table XXX enable row movement语句会造成引用表XXX的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。
============================================================================================
utlrp.sql and utlprp.sql
The utlrp.sql and utlprp.sql scripts are provided by Oracle to recompile all invalid objects in the database. They are typically run after major database changes such as upgrades or patches. They are located in the $ORACLE_HOME/rdbms/admin directory and provide a wrapper on the UTL_RECOMP package. The utlrp.sql script simply calls the utlprp.sql script with a command line parameter of "0". The utlprp.sql accepts a single integer parameter that indicates the level of parallelism as follows:
0 - The level of parallelism is derived based on the CPU_COUNT parameter.
1 - The recompilation is run serially, one object at a time.
N - The recompilation is run in parallel with "N" number of threads.
Both scripts must be run as the SYS user, or another user with SYSDBA, to work correctly.
============================================================================================
语法:
alter table <table_name> shrink space [ <null> | compact | cascade ];
alter table <table_name> shrink space compcat;
收缩表,相当于把块中数据打结实了,但会保持 high water mark;
alter table <tablespace_name> shrink space;
收缩表,降低 high water mark;
alter table <tablespace_name> shrink space cascade;
收缩表,降低 high water mark,并且相关索引也要收缩一下下。
alter index idxname shrink space;
回缩索引
1:普通表
Sql脚本,改脚本会生成相应的语句
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;
2:分区表的处理
进行shrink space时 发生ORA-10631错误.shrink space有一些限制.
在表上建有函数索引(包括全文索引)会失败。
Sql脚本,改脚本会生成相应的语句
select 'alter table '||table_name||' enable row movement;'||chr(10)||'alter table '||table_name||' shrink space;'||chr(10) from user_tables where ;
select 'alter index '||index_name||' shrink space;'||chr(10) from user_indexes where uniqueness='NONUNIQUE' ;
select 'alter table '||segment_name||' modify subpartition '||partition_name||' shrink space;'||chr(10) from user_segments where segment_type='TABLE SUBPARTITION' ';
示例
在oracle中可以使用alter table table_name shrink space收缩表,使用shrink有两个前提条件:
1、表必须启用row movement
2、表段所在表空间的段空间管理(segment space management)必须为auto
实验如下:
--建立一个segment space management auto表空间
SQL> create tablespace ts_auto datafile 'd:\ts_auto.dbf' size 100m extent management local segment space management auto;
--建议测试表
SQL> create table tb_auto tablespace ts_auto as select * from dba_objects;
--查看shrink前的块数量
SQL> select blocks from dba_segments where segment_name='TB_AUTO';
BLOCKS
----------
768
--delete数据后,空间占用没有变化
SQL> delete from tb_auto;
已删除49823行。
SQL> commit;
提交完成。
SQL> select blocks from dba_segments where segment_name='TB_AUTO';
BLOCKS
----------
768
--直接收缩,提示必须启动row movement选项
SQL> alter table tb_auto shrink space;
alter table tb_auto shrink space
*
第 1 行出现错误:
ORA-10636: ROW MOVEMENT is not enabled
SQL> alter table tb_auto enable row movement;
表已更改。
--收缩成功,空间已经释放
SQL> alter table tb_auto shrink space;
表已更改。
SQL> select blocks from dba_segments where segment_name='TB_AUTO';
BLOCKS
----------
8
--shrink不能在segment space management manaual的表空间的段上执行
SQL> create tablespace ts_manual datafile 'd:\ts_mannel.dbf' size 100m extent
management local segment space management manual;
表空间已创建。
SQL> select tablespace_name,segment_space_management from dba_tablespaces;
TABLESPACE_NAME SEGMEN
------------------------------ ------
SYSTEM MANUAL
UNDOTBS1 MANUAL
SYSAUX AUTO
TEMP MANUAL
USERS AUTO
EXAMPLE AUTO
TS_AUTO AUTO
TS_MANUAL MANUAL
已选择8行。
SQL> create table tb_manual tablespace ts_manual as select * from dba_objects;
表已创建。
SQL> alter table tb_manual shrink space
2 ;
alter table tb_manual shrink space
*
第 1 行出现错误:
ORA-10635: Invalid segment or tablespace type
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wh62592855/archive/2009/11/25/4873493.aspx
分享到:
相关推荐
解决Oracle 碎片整理 问题。比较Oracle中的alter table t move和alter table t shrink space。Oracle 10g Shrink Table 详解。
oracle数据表碎片整理 alter table <table_name> shrink space [ <null> | compact | cascade ];
ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
1.领域:matlab,Shrink小波变换算法 2.内容:基于Shrink小波变换的数据去噪可以设置硬阈值和软阈值+代码操作视频 3.用处:用于Shrink小波变换算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项:...
PDF Shrink是一个PDF文件体积压缩器,生成的文件大小适合作为电子邮件附件或在手机屏幕上阅读。PDF Shrink还可以进行文件压缩以减少生PDF文件的大小。
WinMP3Shrink 音乐压缩软件
这个程序是为了实现图片(包括彩色图和灰度图)的放缩功能,能满足任意指定放缩倍数或任意目标尺寸,原理是依据双线性插值。
这是一个基于Matlab平台实现的图像放缩的代码,可以实现任意倍数,任意指定尺寸的放缩要求。原理是基于最近点近似。
环境:OS:Red Hat Enterprise Linux AS release 4 (Nahant)DB:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production 一台Oracle10gR2数据库报出如下错误:ORA-1653: unable to extend table ...
近期来,FreeList的重要作用逐渐为Oracle DBA所认识,网上也出现一些相关的讨论。本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的原理,FreeList算法等。而与FreeList密切...
0.13um-shrink工艺的嵌入式闪存的耐久性特性研究_V2.0.zip
前端开源库-shrink-ray-current收缩光线流,node.js压缩中间件,支持brotli和zopfli
DVD影片备份工具(DVD Shrink) 3.20 绿色汉化版
可将PDF压缩。一般办公网络传输 压缩50%-80%
0.13um-shrink工艺的嵌入式闪存的耐久性特性研究_V2.0 字数.zip
这个工具很好的压缩了数据库日志文件的大小。 操作简单,输入服务器名,帐号密码,数据库名就OK。
PDF 专用压缩软件 PDF shrink
var shrink = require ( 'js-shrink' ) ; var out_code = shrink ( in_code , { // posssible options: all : false , // shrink everything (enables all of the below options, in case they aren't enabled by ...
高中英语单词天天记shrink素材
因此oracle提供了shrink space碎片整理功能。对于索引,可以采取rebuild online的方式进行碎片整理,一般来说,经常进行DML操作的对象DBA要定期进行维护,同时注意要及时更新统计信息!一:准备测试数据,使用HR用户...