oracle表空管理方式(LMT)、ASSM段管理方式、一级位图块、二级位图块、三级位图块。(一)

2014-11-24 09:14:16 · 作者: · 浏览: 2

今天是2013-12-16,今天和明天是我学习oracle生涯中一个特殊的日子。今天晚上进行了一下表空间管理方式的学习,在此记录一下笔记。

对于oracle数据库最小i/0单位是数据块,最想分配空间单位是区,对于表空间的管理其实是对区的管理,在8i之前采用数据字典管理表空间 ,通过uet$和fet$进行管理。可是从8i开始引入了本地管理表空间方式(LMT),以此缓解了系统性能问题(如碎片产生等)。

对于oracle段管理方式,在9i之前采用的是mssm手动段空间管理技术,采用了是在数据段头加入free list进行管理,可是往往出现性能问题(如 buffer busy wai),以此到9i开始引入了assm自动段管理方式。

首先了解段管理表空间方式assm;

在11g中存在延迟段,且在第一次分配区间的时候,在11.2.0.4版本中1-2数据块为数据文件头部信息,3-7为区间位图信息,8-10为段位图信息。

创建测试表空间:


SQL> create tablespace test datafile '+DATAGROUP1/rhys/datafile/test.dbf' size 20M autoextend off extent management local uniform size 156K segment space management auto;

Tablespace created.

创建用户:


SQL> create user amy identified by root default tablespace test temporary tablespace temp quota 10M on test password expire;

User created.

SQL> grant create session,resource to amy;

Grant succeeded.

SQL> conn amy/root
ERROR:
ORA-28001: the password has expired


Changing password for amy
New password:
Retype new password:
Password changed
Connected.

创建测试表:
SQL> create table t (
2 a number,
3 b varchar2(20));

Table created.
SQL> insert into t values(1,'a');

1 row created.

SQL> commit;

查看区间分配情况:(sys用户)

SQL> select owner,segment_name,segment_type,file_id,extent_id,block_id from dba_extents where segment_name='T';

OWNER SEGMENT_NAME SEGMENT_TYPE FILE_ID EXTENT_ID BLOCK_ID
------------------------------ --------------------------------------------------------------------------------- ------------------ ---------- ---------- ----------
AMY T TABLE 5 0 8

SQL> ALTER TABLE AMY.T ALLOCATE EXTENT;

Table altered.

SQL> select owner,segment_name,segment_type,file_id,extent_id,block_id,BLOCKS from dba_extents where segment_name='T';

OWNER SEGMENT_NAME SEGMENT_TYPE FILE_ID EXTENT_ID BLOCK_ID BLOCKS
------------------------------ ------------------------------ ------------------ ---------- ---------- ---------- ----------
AMY T TABLE 5 0 8 20
AMY T TABLE 5 1 28 20

SQL> alter system dump datafile 5 block 9;

System altered.

SQL> select * from v$diag_info;

INST_ID NAME VALUE
---------- ------------------------------ ----------------------------------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /opt/app/oracle
1 ADR Home /opt/app/oracle/diag/rdbms/rhys/RHYS
1 Diag Trace /opt/app/oracle/diag/rdbms/rhys/RHYS/trace
1 Diag Alert /opt/app/oracle/diag/rdbms/rhys/RHYS/alert
1 Diag Incident /opt/app/oracle/diag/rdbms/rhys/RHYS/incident
1 Diag Cdump /opt/app/oracle/diag/rdbms/rhys/RHYS/cdump
1 Health Monitor /opt/app/oracle/diag/rdbms/rhys/RHYS/hm
1 Default Trace File /opt/app/oracle/diag/rdbms/rhys/RHYS/trace/RHYS_ora_3386.trc
1 Active Problem Count 0
1 Active Incident Count 0

11 rows selected.

查看trace文件:

可以看到这是第一个位图块,没有任何数据。

Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 1 parent dba: 0x0140000a poffset: 1
unformatted: 0 total: 4 first useful block: 0
owning instance : 1
instance ownership changed at 12/16/2013 20:38:38
Last successful Search 12/16/2013 20:38:38
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 4

Extent Map Block Offset: 4294967295
First free datablock : 0
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Dealloc scn: 925704.0
Flag: 0x00000001 (-/-/-/-/-/HWM)
Inc #: 0 Objd: 87521
HWM Flag: HWM Set
Highwater:: 0x0140001c ext#: 0 blk#: 20 ext size: 20
#blocks in seg. hdr's freelists: 0
#blocks below: 16
mapblk