今天是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