您的位置:首页 > 其它

测试alter table shrink space compact cascade及学习user_tables相关列的含义

2012-01-12 17:23 405 查看
--测试alter table
shrink space
compact cascade及学习user_tables相关列的含义

SQL> alter table test_shrink enable row movement;--alter table shrink space须开启行移动

Table altered.

SQL> select table_name,blocks,empty_blocks,num_rows,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss'),row_movement from user_tables where table_name='TEST_SHRINK';--查测试表相关信息

TABLE_NAME BLOCKS EMPTY_BLOCKS NUM_ROWS TO_CHAR(LAST_ANALYZ ROW_MOVE

------------------------------ ---------- ------------ ---------- ------------------- -------- --blocks是真正使用的块数 num_rows 表中行的记录数

TEST_SHRINK ENABLED

SQL> select segment_name,blocks from user_segments where segment_type='TABLE' and segment_name='TEST_SHRINK';--查询测试表segment

SEGMENT_NAME BLOCKS

--------------------------------------------------------------------------------- ----------

TEST_SHRINK 12288

SQL> exec dbms_stats.gather_table_stats(ownname=>NULL,tabname=>'TEST_SHRINK',cascade=>true);--分析下测试表

PL/SQL procedure successfully completed.

SQL> select table_name,blocks,empty_blocks,num_rows,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss'),row_movement from user_tables where table_name='TEST_SHRINK';--再次查看测试表相关信息

TABLE_NAME BLOCKS EMPTY_BLOCKS NUM_ROWS TO_CHAR(LAST_ANALYZ ROW_MOVE

------------------------------ ---------- ------------ ---------- ------------------- --------

TEST_SHRINK 12040 0 862741 2010-08-28 14:17:40 ENABLED

SQL> select segment_name,blocks from user_segments where segment_type='TABLE' and segment_name='TEST_SHRINK';

SEGMENT_NAME BLOCKS

--------------------------------------------------------------------------------- ----------

TEST_SHRINK 12288

SQL> delete from test_shrink where rownum<=200000;--删除20w记录从测试表

200000 rows deleted.

SQL> commit;

Commit complete.

SQL> select segment_name,blocks from user_segments where segment_type='TABLE' and segment_name='TEST_SHRINK';--测试表segment,发现删除segment没有变化哟

SEGMENT_NAME BLOCKS

--------------------------------------------------------------------------------- ----------

TEST_SHRINK 12288

SQL> alter table test_shrink shrink space;--没变化是吧,用alter shrink试下看看测试表segment有变化吗

Table altered.

SQL> select segment_name,blocks from user_segments where segment_type='TABLE' and segment_name='TEST_SHRINK';---这下测试表(blocks表示分配给测试表segment的block个数)segment变了吧,从原来的12288块到8952块,少

了近4000块

SEGMENT_NAME BLOCKS

--------------------------------------------------------------------------------- ----------

TEST_SHRINK 8952

SQL> exec dbms_stats.gather_table_stats(ownname=>NULL,tabname=>'TEST_SHRINK',cascade=>true);

PL/SQL procedure successfully completed.

SQL> select table_name,blocks,empty_blocks,num_rows,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss'),row_movement from user_tables ---user_tables中的blocks总是小于user_segments的blockswhere

table_name='TEST_SHRINK';--

TABLE_NAME BLOCKS EMPTY_BLOCKS NUM_ROWS TO_CHAR(LAST_ANALYZ ROW_MOVE

------------------------------ ---------- ------------ ---------- ------------------- --------

TEST_SHRINK 8807 0 659108 2010-08-28 14:35:01 ENABLED

SQL>

小结:



小结:

1,alter table shrink space compact cascade;对大表或大索引操作会产生大量日志

2,alter table shrink space;--加上compact选项仅重新整理segment 空间,并压缩表的记录在以后进行release空间.但数据库并不调整hwm及释放空间.为了释放空间.你必须再发布alter table shrink space

--compact用于把一个长操作分割为两个较短的操作

--须开启行移动

--cascade会级联对其依赖对象(比如上面的索引)进行压紧操作

3,它的一些限制条件:

在集群表,long列的表不能采用shrink 操作

在基于函数索引或位图联接索引不支持shrink操作

就是你指定了cascade选项,也不能shrink 索引组织表的映射表

压缩表不能用shrink操作

构建了on commit物化视图的主表,在shrink操作后,rowid实化视图必须重建

4,alter table shrink space;--仅可对automatic segment management tablespace方式的table,index_orginized table or overflow segment,index,partition,lob segment,mv,mv log

--压缩segment,调整hwm,并马上释放空间

5,user_tables某些列(请查对官方手册,若标有*标记,表示此列须收集统计信息才会被填充,比如num_rows,所以及时分析表很重要啊

blocks表示使用的块数 empty_blocks 表示从未使用的块数 avg_row_len 表示每个行的长度(以byte计)

nested 表示是否为nested table(值为y or n)

iot_type表示是否为index-orginized table(值为iot,iot_overflow,若不是iot,值为null)

temporary表示在当前会话是否仅仅看到对象上面的数据

global_stats表示(对于分区表),是收集了全表的统计信息(值为yes)还是根据分区表的基础表或子分区估计统计信息(值 为no)

duration 表示临时表中数据的保持时间(值sys$session表记录仅在会话期间保持),而值sys$transaction在commit后删除

skip_corrupt表示oracle在检查表或索引中标记为破坏状态的块,是否进行忽略处理呢(值为enabled or disabled),为了 enabled必须用dbms_repair.skip_corrupt_blocks标记坏块









---测试学习user_segment相关列含义及user_tables相关列含义,且二者字典的关联

SQL> select table_name,blocks,blocks*8/1024 mb,empty_blocks,num_rows,to_char(last_analyzed,'yyyy-mm-dd hh24:mi:ss'),row_movement from user_tables where table_name='TEST_SHRINK';

TABLE_NAME BLOCKS MB EMPTY_BLOCKS NUM_ROWS TO_CHAR(LAST_ANALYZ ROW_MOVE

------------------------------ ---------- ---------- ------------ ---------- ------------------- -------- ###表有68m左右

TEST_SHRINK 8807 68.8046875 0 659108 2010-08-28 14:35:01 ENABLED

SQL> select segment_name,bytes/1024/1024 mb from user_segments where segment_name='TEST_SHRINK'; ##表有69m 左右(同上面68m 差不多)

SEGMENT_NAME MB

--------------------------------------------------------------------------------- ----------

TEST_SHRINK 69.9375

SQL> select segment_name,segment_type,initial_extent,next_extent,pct_increase,min_extents,max_extents from user_segments where segment_name='TEST_SHRINK';---请注意initial_extent列,为65536bytes,也就是一个8

block的extent,请继续对应查看user_extents字典

SQL> select segment_name,segment_type,initial_extent,next_extent,pct_increase,min_extents,max_extents,extents from user_segments where segment_name='TEST_SHRINK';##有80个extent

SEGMENT_NAME SEGMENT_TYPE INITIAL_EXTENT NEXT_EXTENT PCT_INCREASE MIN_EXTENTS MAX_EXTENTS EXTENTS

--------------------------------------------------------------------------------- ------------------ -------------- ----------- ------------ ----------- ----------- ----------

TEST_SHRINK TABLE 65536 1 2147483645 80

SQL>

SQL> select count(*) from user_extents where segment_name='TEST_SHRINK';--这不,对应上了,就是分配了80个extent为测试表segment

COUNT(*)

----------

80

SQL> select segment_name,extent_id,bytes,blocks from user_extents where segment_name='TEST_SHRINK';##oracle在分配extent时会根据不同算法可能每个extent的大小不一样,也就是每个extent包含的blocks个数不同

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 0 65536 8

TEST_SHRINK 1 65536 8

TEST_SHRINK 2 65536 8

TEST_SHRINK 3 65536 8

TEST_SHRINK 4 65536 8

TEST_SHRINK 5 65536 8

TEST_SHRINK 6 65536 8

TEST_SHRINK 7 65536 8

TEST_SHRINK 8 65536 8

TEST_SHRINK 9 65536 8

TEST_SHRINK 10 65536 8

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 11 65536 8

TEST_SHRINK 12 65536 8

TEST_SHRINK 13 65536 8

TEST_SHRINK 14 65536 8

TEST_SHRINK 15 65536 8

TEST_SHRINK 16 1048576 128

TEST_SHRINK 17 1048576 128

TEST_SHRINK 18 1048576 128

TEST_SHRINK 19 1048576 128

TEST_SHRINK 20 1048576 128

TEST_SHRINK 21 1048576 128

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 22 1048576 128

TEST_SHRINK 23 1048576 128

TEST_SHRINK 24 1048576 128

TEST_SHRINK 25 1048576 128

TEST_SHRINK 26 1048576 128

TEST_SHRINK 27 1048576 128

TEST_SHRINK 28 1048576 128

TEST_SHRINK 29 1048576 128

TEST_SHRINK 30 1048576 128

TEST_SHRINK 31 1048576 128

TEST_SHRINK 32 1048576 128

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 33 1048576 128

TEST_SHRINK 34 1048576 128

TEST_SHRINK 35 1048576 128

TEST_SHRINK 36 1048576 128

TEST_SHRINK 37 1048576 128

TEST_SHRINK 38 1048576 128

TEST_SHRINK 39 1048576 128

TEST_SHRINK 40 1048576 128

TEST_SHRINK 41 1048576 128

TEST_SHRINK 42 1048576 128

TEST_SHRINK 43 1048576 128

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 44 1048576 128

TEST_SHRINK 45 1048576 128

TEST_SHRINK 46 1048576 128

TEST_SHRINK 47 1048576 128

TEST_SHRINK 48 1048576 128

TEST_SHRINK 49 1048576 128

TEST_SHRINK 50 1048576 128

TEST_SHRINK 51 1048576 128

TEST_SHRINK 52 1048576 128

TEST_SHRINK 53 1048576 128

TEST_SHRINK 54 1048576 128

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 55 1048576 128

TEST_SHRINK 56 1048576 128

TEST_SHRINK 57 1048576 128

TEST_SHRINK 58 1048576 128

TEST_SHRINK 59 1048576 128

TEST_SHRINK 60 1048576 128

TEST_SHRINK 61 1048576 128

TEST_SHRINK 62 1048576 128

TEST_SHRINK 63 1048576 128

TEST_SHRINK 64 1048576 128

TEST_SHRINK 65 1048576 128

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 66 1048576 128

TEST_SHRINK 67 1048576 128

TEST_SHRINK 68 1048576 128

TEST_SHRINK 69 1048576 128

TEST_SHRINK 70 1048576 128

TEST_SHRINK 71 1048576 128

TEST_SHRINK 72 1048576 128

TEST_SHRINK 73 1048576 128

TEST_SHRINK 74 1048576 128

TEST_SHRINK 75 1048576 128

TEST_SHRINK 76 1048576 128

SEGMENT_NAME EXTENT_ID BYTES BLOCKS

--------------------------------------------------------------------------------- ---------- ---------- ----------

TEST_SHRINK 77 1048576 128

TEST_SHRINK 78 1048576 128

TEST_SHRINK 79 6225920 760

80 rows selected.

SQL> select 8*8*1024*1024 from dual;

8*8*1024*1024

-------------

67108864

SQL> select 8*8*1024 from dual;

8*8*1024

----------

65536
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐