--t表有一条数据
hr@ORCL> select * from t;
ID NAME
---------- ----------
1 AAAAA
--找t段的段头块
hr@ORCL> select header_file,header_block from dba_segments where segment_name='T' and owner='HR';
HEADER_FILE HEADER_BLOCK
----------- ------------
4 387
--另开一个session,dump段头块
sys@ORCL> alter session set tracefile_identifier='sys_dump_t_01';
Session altered.
sys@ORCL> alter system dump datafile 4 block 387;
System altered.
dump的部分trc内容摘入
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 8
last map 0x00000000 #maps: 0 offset: 2716
Highwater:: 0x01000189 ext#: 0 blk#: 8 ext size: 8 --Highwater就是高水位,0x01000189这个是HWM的地址
#blocks in seg. hdr's freelists: 0
#blocks below: 5
mapblk 0x00000000 offset: 0
Unlocked
--------------------------------------------------------
Low HighWater Mark :
Highwater:: 0x01000189 ext#: 0 blk#: 8 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 5
mapblk 0x00000000 offset: 0
Level 1 BMB for High HWM block: 0x01000181
Level 1 BMB for Low HWM block: 0x01000181
--------------------------------------------------------
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x01000182
Last Level 1 BMB: 0x01000181
Last Level II BMB: 0x01000182
Last Level III BMB: 0x00000000
Map Header:: next 0x00000000 #extents: 1 obj#: 52713 flag: 0x10000000
Inc # 0
Extent Map
-----------------------------------------------------------------
0x01000181 length: 8
Auxillary Map
--------------------------------------------------------
Extent 0 : L1 dba: 0x01000181 Data dba: 0x01000184
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x01000182
End dump data blocks tsn: 4 file#: 4 minblk 387 maxblk 387
--对t表做一次全表扫
hr@ORCL> set autot traceonly
hr@ORCL> select * from t;
Execution Plan
----------------------------------------------------------
Plan hash value: 1601196873
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 20 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| T | 1 | 20 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
7 consistent gets --全表扫读了6个块
0 physical reads
0 redo size
469 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
这6个块是如何算出来的呢?
hr@ORCL> select file_id,block_id,blocks from dba_extents where segment_name='T';
FILE_ID BLOCK_ID BLOCKS
---------- ---------- ----------
4 385 8
① expdp/impdp
② 10G及以后的版本可以采用shrink,需要注意的是,表所在表空间须为自动段空间管理
alter table tab_name enable row movement;
alter table tab_name shrink space;
③ 使用move,不过在Move期间,会影响到DML语句,如UPDATE,也需要考虑空间问题
总之move会锁表 而且是TM 另外还会影响index,所以,之后记得rebuild index
alter table move tab_name; 在当前表空间中move
alter table move tab_name tablespace tbs_name; 将其move到其他表空间
④ CTAS 然后rename,rebuild index
⑤ 在线重定义