设为首页 加入收藏

TOP

Oracle move和shrink释放高水位空间(一)
2018-11-25 16:13:35 】 浏览:458
Tags:Oracle move shrink 释放 水位 空间

move 和shrink 的共同点


1、收缩段


2、消除部分行迁移


3、消除空间碎片


4、使数据更紧密


一、shrink


语法:


  alter table TABLE_NAME shrink space [compact|cascate]


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释放空闲数据块。


举例


  alter table TABLE_NAME shrink space compact;  只整理碎片 不回收空间, 
  alter table TABLE_NAME shrink space;                整理碎片并回收空间。
  alter table TABLE_NAME shrink space cascade;    整理碎片回收空间 并连同表的级联对象一起整理(比如索引)
  alter table pt_table modify  PARTITION P1 shrink space cascade;  分区表


shrink的优点


1.可在线执行


2.可使用参数cascade,同时收缩表上的索引


3.执行后不会导致索引失效


4.可避免alter table move执行过程中占用很多表空间(如果表10G大小,那alter table move差不多还得需要10G空间才能执行)。


二、move


1、move table的功能:


 ①:将一个table从当前的tablespace上移动到另一个tablespace上:


 ②:来改变table已有的block的存储参数,如:alter table t move storage (initial 30k next 50k);


 ③:move操作也可以用来解决table中的行迁移的问题。


2、使用move的一些注意事项:


 ①:table上的index需要rebuild:


  在前面我们讨论过,move操作后,数据的rowid发生了改变,我们知道,index是通过rowid来fetch数据行的,所以,table上的index是必须要rebuild的。


    alter index index_name rebuild online;


 ②:move时对table的锁定


  当我们对table进行move操作时,查询v$locked_objects视图可以发现,table上加了exclusive lock


 ③:关于move时空间使用的问题:


  当我们使用alter table move来降低table的HWM时,有一点是需要注意的,这时,当前的tablespace中需要有1倍于table的空闲空间以供使用。


三、move和hrink的区别是:


1、move后,表在表空间中的位置肯定会变,可能前移也可能后移,一般来说如果该表前面的表空间中有足够空间容纳该表,则前移,否则后移。


2、hrink后,表在表空间中的位置肯定不变,也就是表的段头位置不会发生变化。


3、Move会移动高水位,但不会释放申请的空间,是在高水位以下(below HWM)的操作。


4、shrink space 同样会移动高水位,但也会释放申请的空间,是在高水位上下(below and above HWM)都有的操作。


5、使用move时,会改变一些记录的ROWID,所以MOVE之后索引会变为无效,需要REBUILD。


6、使用shrink space时,索引会自动维护。如果在业务繁忙时做压缩,


  可以先shrink space compact,来压缩数据而不移动HWM,等到不繁忙的时候再shrink space来移动HWM。


7、shrink可以单独压缩索引,alter index xxx shrink space来压缩索引。另外、压缩表时指定Shrink space cascade会同时压缩索引,


四、实战实验:


[oracle@dbs ~]$ sqlplus '/as sysdba'
SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 10 14:44:59 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>


1、创建两张测试表:test_1 和 test_2


SQL> create table test_1 (name varchar2(10)) storage (initial 500m next 1m);
Table created.
SQL> create table test_2 (name varchar2(10)) storage (initial 500m next 1m);
SQL>  create index idx_test1 on test_1(name);
Index created.
SQL>  create index idx_test2 on test_2(name);
Index created.


2、插入数据,并收集统计信息:


SQL> insert into test_1 values('zhang');
SQL> insert into test_1 values('zhang');
SQL> insert into test_2 values('zhang');
SQL> insert into test_2 values('zhang');
SQL> exec dbms_stats.gather_table_stats(ownname =>'ADMIN',tabname =>'TEST_1',cascade=>TRUE);
PL/SQL procedure successfully completed.
SQL> exec dbms_stats.gather_table_stats(ownname =>'ADMIN',tabname =>'TEST_2

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL 5.7基础之innodb存储引擎总.. 下一篇Oracle优化之单表分页优化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目