oracle数据块详解
总结为一下几点:
•
•
•
•
Oracle数据块的大小设置意见:
1、
2、
数据块结构
1、基本组成
块结构说明如下:
块头:存放一些基本信息,如物理位置,块所属的段类型(数据段、索引段、回滚段等)
表目录:如果块中存储的数据为表数据,则表目录中保存这个表的相关信息
行目录:如果块中存储的数据为表数据,则行目录中保存数据行的相关信息。
块头、表目录和行目录组成块的头部信息(overhead),这部分不存数据库中实际的数据,而是用来记录该块的逻辑结构,而且这部分占用的空间不是固定的,大约在84-107字节之间。
行记录:真正存放数据的区域,这部分空间已被使用。
空闲空间:未使用的区域,用于新行的插入或者已经存在行的更新。(这里有个概念行迁移:就是当update操作时,块中空闲的空间不够保存修改的数据,那么记录就将保存到另一个拥有足够空间的块中,而只在原块上保留一条指向新块的rowid,这就是行迁移row migration)
3、空闲空间的管理
1)Oracle使用位图(bitmap)来管理和跟踪数据块,这种块的空间管理方式叫“自动管理”。自动管理有下面的好处:
◆易于使用
◆更好地利用空间
◆可以对空间进行实时调整
2)块中自由空间的手动管理(手动管理比较复杂)
用户可以通过PCTFREE, PCTUSED来调整块中空间的使用,这种管理方式叫手动管理。相对于自动管理,手动管理方式比较麻烦,不容易掌握,容易造成块中空间的浪费。
PCTFREE参数用于指定块中必须保留的最小空闲空间百分例。之所以要预留这样的空间,是因为UPDATE时,需要这些空间。如果UPDATE时,没有空余空间,Oracle就会分配一个新的块,这会产生行迁移(Row Migrating)。
PCTUSED也是用于设置一个百分比,当块中已使用的空间的比例小于这个百分比的时候,这个块才被标识为有效状态。只有有效的块才被允许插入数据。
三、基本实验
1)下面我们先来分析一下块。
下面我们来看看这个数据块
dump说明
创建表空间和测试表:
create tablespace testblock datafile
'/opt/app/oracle/oradata/wolf/testblock01.dbf' size 100M;
create table testblock(
id number,
name varchar(4)
) tablespace testblock;
插入3条数据然后提交:
SQL> insert into testblock values(1,'a');
SQL> insert into testblock values(2,'b');
SQL> insert into testblock values(3,'c');
SQL> commit;
SQL> select * from testblock;
---------- --------
SQL>
commit
SQL> desc V$datafile;
SQL> select FILE#,name from v$datafile;
----------
NAME
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/wolf/system01.dbf
/opt/app/oracle/oradata/wolf/undotbs01.dbf
/opt/app/oracle/oradata/wolf/sysaux01.dbf
----------
NAME
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/wolf/users01.dbf
/opt/app/oracle/oradata/wolf/testblock01.dbf
SQL> select rowid,dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid)
blockno from testblock;
ROWID
------------------ ---------- ----------
AAAMixAAFAAAAAMAAA
AAAMixAAFAAAAAMAAB
AAAMixAAFAAAAAMAAC
SQL> alter system dump datafile 5 block 12;
SQL> show parameter dump;
查找dumping文件位置
[root@test ~]# cd /opt/app/oracle/admin/wolf
[root@test wolf]# ls
adump
[root@test wolf]# cd udump/
[root@test udump]# ls
wolf_ora_18566.trc
wolf_ora_18605.trc
wolf_ora_18608.trc
wolf_ora_19087.trc
wolf_ora_19114.trc
[root@test udump]# ls -l
total 272
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall 196171 Jul
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
-rw-r----- 1 oracle
oinstall
[root@test udump]# date
Sat Jul 14 05:38:57 EDT 2012
[root@test udump]# cat wolf_ora_4954.trc | more
/opt/app/oracle/admin/wolf/udump/wolf_ora_4954.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /opt/app/oracle/product/10g
System
name:
Node
name:
Release:
Version:
Machine:
Instance name: wolf
Redo thread mounted by this instance: 1
Oracle process number: 15
Unix process pid: 4954, image: oracle@test (TNS V1-V3)
*** 2012-07-14 05:36:52.410
*** SERVICE NAME:(SYS$USERS) 2012-07-14 05:36:52.410
*** SESSION ID:(159.3) 2012-07-14 05:36:52.410
Start dump data blocks tsn: 6 file#: 5 minblk 12 maxblk 12
buffer tsn: 6 rdba: 0x0140000c (5/12)
scn: 0x0000.0007e543 seq: 0x05 flg: 0x02 tail: 0xe5430605
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0CEF4200 to 0x0CEF6200
CEF4200 0000A206
0140000C 0007E543 02050000
CEF4210 00000000
00000001 0000C8B1 0007E52C
CEF4220 00000000
00320002 01400009 00230007
CEF4230 000000DD
0080077F 003400CC 00002003
CEF4240 0007E543
00000000 00000000 00000000
CEF4250 00000000
00000000 00000000 00000000
CEF4260 00000000
00030100 0018FFFF 1F651F80
CEF4270 00001F65
1F900003 1F801F88 00000000
CEF4280 00000000
00000000 00000000 00000000
CEF61E0 00000000
0202012C 630104C1 0202012C
CEF61F0 620103C1
0202012C 610102C1 E5430605
Block header
dump:
0x01
0x02
data_block_dump,data header at 0xcef4264
===============
tsiz: 0x1f98
hsiz: 0x18
pbl: 0x0cef4264
bdba: 0x0140000c
flag=--------
ntab=1
nrow=3
frre=-1
fsbo=0x18
fseo=0x1f80
avsp=0x1f65
tosp=0x1f65
0xe:pti[0]
0x12:pri[0]
0x14:pri[1]
0x16:pri[2]
block_row_dump:
tab 0, row 0, @0x1f90
tl:
8 fb: --H-FL-- lb: 0x1
col
col
tab 0, row 1, @0x1f88
tl:
8 fb: --H-FL-- lb: 0x1
col
col
tab 0, row 2, @0x1f80
tl:
8 fb: --H-FL-- lb: 0x1
col
col
end_of_block_dump
End dump data blocks tsn: 6 file#: 5 minblk 12 maxblk 12
一些参数需要自己去了解