ITPub博客

首页 > 数据库 > Oracle > 数据库的逻辑结构

数据库的逻辑结构

原创 Oracle 作者:coredumped 时间:2014-11-24 09:44:56 0 删除 编辑
数据库的逻辑结构概念

Block(块)最基本的存储单元

Extent(范围)一次分配的连续的块

Segment(段)属于同一对象的范围组成一个段

Tablespace(表空间)数据文件的组织行为

 

 

 

查看表emp的存储结构

sys@TEST> select tablespace_name,segment_name,extent_id,blocks from dba_extents where segment_name='EMP';

TABLESPACE SEGMENT_NAME          EXTENT_ID     BLOCKS

---------- -------------------- ---------- ----------

USERNEW    EMP                           0          8

 

USERS 表空间中有一个emp 表,emp 表是一个段。Emp 表由一个0 号范围组成。该范围中有8个数据块。

这个字典完美的显示了数据库逻辑体系的四个层次。这四个层次都是逻辑的。

 

块是建筑数据库的基石。是数据库的最小i/o 单位。

块的结构如下:


 

控制块存储的参数,在建表的时候指明,也可以后来修改

 

 

每个块为8k,段头我们不能存放数据,空闲列表指向第一个可用的数据块,再连接到下一个可用数据块。

高水位以上是崭新的数据块,一次数据都没有存放。


当超过PCT_USED就会从ferrlist中踢出 会造成空间的浪费。如直插入了一条数据,但是这个块不能在插入数据了。


pctfree留下的空间供update 使用

 行迁移:  当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移。一个行迁移意味着整

              行数据将会移动,仅仅保留的是一个转移地址。因此整行数据都被移动,原始的数据块上仅仅保留的是指向新块的一个地址信息。

              产生:update

行链接:  当一行数据太大而不能在一个单数据块容纳时,行链接由此产生。举例来说,当你使用了4kb的Oracle 数据块大小,而你需要插入一行数据是8k,

              Oracle则需要使用3个数据块分成片来存储。因此,引起行链接的情形通常是,表上行记录的大小超出了数据库Oracle块的大小。

              产生:insert

              表上使用了LONG 或 LONG RAW数据类型的时候容易产生行链接。其次表上多于255列时Oracle会将这些过宽的表分片而产生行链接

lob表必须有行链


insert 操作

1.获取freelist

2.找到可用的数据块

3.插入数据到pctfree为止

4.从freelist中挪走

5.找下一个可用块


表空区方式有两种:

本地管理local(默认)

create tablespace ..... size 2m extent management local

segment space management auto;


字典管理dictionary(手工管理)


create tablespace ..... size 2m extent management dictionary

segment space management manual;



system表空间默认为手工管理



local 本地extent 管理分为两种:

一次性分配连续的快


select segment_name , extent_id, file_id, blocks from dba_extents where segment_name='T1'

select blocks, empty_blocks,num_freelist_blocks from 

user_tables where table_name='T1';


自动管理

连续分配16次 8个块以后,会认为表很大一次分配了128个块


手工管理

alter table t1 allcate extent; //打开手工分配


alter table t1 allocate extent(datafile '/u01/oradata/orcl/system01.dbf' size 3m);


alter table t1 deallocate unused; //收回没有用的空间


create tablespace uni datafile '/u01/oradata/orcl/system02.dbf' size 10m uniform size 1m; //指定固定的大小


段的管理方式又分为两种:

自动(auto) 

手动(manual)


手工管理的时候才回有pct_userd和free_list

create table e3 tablespace system pctfree 20 pctused 30 storage(freelists 2) as select * from emp where 0=9;

查看

select table_name,pct_free,pct_used,freelists from user_tables;

TABLE_NAME                       PCT_FREE   PCT_USED  FREELISTS

------------------------------ ---------- ---------- ----------

DEPT                                   10

EMP                                    10

BONUS                                10

SALGRADE                          10

E3                                         20                             30          2

T1                                         10

可以看出,自动管理空闲块是通过位图块来管理的,手动管理空闲块是通过freelists来管理的。

为什么只有表e3 的显示和其它表不一样,因为他们的表空间不同,e3 在system 表空间,手工

管理空闲的块,其它表为users 表空间,10.2 以后的版本默认的表空间都为自动管理空闲块。

自动管理空闲块是通过位图块来管理的,本质的不同,没有空闲列表

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30024909/viewspace-1344059/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Mysql基础-DDl语句
下一篇: 控制文件管理
请登录后发表评论 登录
全部评论

注册时间:2014-11-16

  • 博文量
    25
  • 访问量
    57962