Chinaunix首页 | 论坛 | 博客
  • 博客访问: 380556
  • 博文数量: 113
  • 博客积分: 3035
  • 博客等级: 中校
  • 技术积分: 1430
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-01 16:32
文章分类
文章存档

2011年(42)

2010年(70)

2009年(1)

我的朋友

分类: Oracle

2010-01-19 14:28:22

分区表XYSTOW
增加2011年分区
create tablespace USER_DATA_2011 DATAFILE 'E:\ORADATA\ORCL\USERDATA2011_01.DBF' SIZE 100M autoextend

on;
/
ALTER TABLE xystow SPLIT PARTITION PT_XYSTOW_2010 AT TO_DATE('2011-01-01 00:00:00', 'YYYY-MM-DD

HH24:MI:SS') INTO (partition PT_XYSTOW_2010 tablespace PT_XYSTOW_2010, partition PT_XYSTOW_2011 PT_XYSTOW_2011) ;
发现文件E:\ORADATA\ORCL\USERDATA2011_01.DBF 自动扩展到了481M。
alter table xystow enable row movement
alter  index xystow_key rebuild
alter table xystow SHRINK SPACE CASCADe
回收表空间成功后查看表空间的使用率,已经接近0,执行
alter database datafile 'E:\ORADATA\ORCL\USERDATA2011_01.DBF' resize 100m;试图回收多余的空间
但是报错:ORA-03297: file contains used data beyond requested RESIZE value
查 select file_id, block_id first_block, block_id+blocks-1
last_block, segment_name
  from dba_extents
 where tablespace_name = 'USER_DATA_2011'
 union all
select file_id, block_id, block_id+blocks-1, 'free'
  from dba_free_space
 where tablespace_name = 'USER_DATA_2011'
 order by file_id, first_block
FILE_ID    FIRST_BLOCK    LAST_BLOCK    SEGMENT_NAME
1    24    9    62480    free
2    24    62481    62488    XYSTOW
3    24    62489    62592    free
可以看到xystow占用了62488的block,所以最后的free空间可以回收,前面的free空间就无法回收了。
SQL> show parameter db_block_size
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192

计算62488*8k/1024=488.1875
说明最大块占用了488.1875的空间,这部分空间不能通过降低HWM来回收。
执行 ALTER TABLE XYSTOW MOVE PARTITION PT_XYSTOW_2011 之后再查询,发现
FILE_ID    FIRST_BLOCK    LAST_BLOCK    SEGMENT_NAME
1    24    9    62472    free
2    24    62473    62480    XYSTOW
3    24    62481    62592    free
xystow块往前移了7个块
move table后要重建索引。
ps:补充说明shrink space的原理
实际上就是将数据往前移动。就是delete与insert操作,数据的内容不变,但是rowid变了。
在shrink之前要enable row movement
另外shrink space还可以加几个参数。

alter table shrink space compcat;
收缩表,但会保持 high water mark;

alter table shrink space;
收缩表,降低 high water mark;

alter table shrink space cascade;
收缩表,降低 high water mark,并且相关索引也要收缩一下下。

几个的比较:

MOVE   
SHRINK   
这两个用于回收水位以下的块
-------------------------------------------
DEALLOCATE UNUSERD 
用户回收高水位以上的块

MOVE 不能用于在线
SHRINK 
用于在线 



阅读(1430) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~