oracle数据块的集合构成,oracle数据库的逻辑构成(表空间,schema,user,段,区,块)...

本篇着重从数据库的逻辑构成方面来说明oracle的体系结构,以及逻辑构成中所涉及的相关名词的概念和相互间的关系。

1       名词概念

数据库

数据库是由表空间组成的,我们可以创建数据库并为其指定各种表空间.

Schema

database objectscontainer, 是数据库对象(如tables,views,stored procedures等)的逻辑集合。对于一个大型的企业应用,最好针对不同的目的,使用不同的schema,比如,把HR相关的tables放在HR schema,账号相关的tables放在Accountingschema. 为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在EM方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema。一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。Oracle数据库中不能直接新建一个schema,要想创建一个schema,只能通过创建一个用户来解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schema作为该用户的缺省schema。一个用户有一个缺省的schema,其schema名就是用户名。当然一个用户还可以使用其他的schema,需要其它schema属主的授权。当我们访问一个表时,没有指明该表属于哪个schema,系统会自动给我们的表加上缺省的schema名,比如,访问scott用户的employee表,select * from emp,完整的写法是 select * from scott.emp。一个数据库对象的完整名称是 schemaname.objectname,而不是user.objectname.

User

a user is a namedefined in the database that canconnectto and access objects.

Schema 和user都是用于DBA管理数据库安全的。

表空间

逻辑上用来放objects,物理上对应磁盘上的数据文件或裸设备。每个表空间可以容纳许多表、索引、簇等,表空间。本质上是一个或者多个数据文件的集合。当表空间被使用完时,可以通过增加数据文件数量或者扩大已经存在的数据文件来扩展表空间。

数据文件:具体存储数据的物理文件,是一个物理概念。一个数据文件只属于一个表空间,一个表空间可以包含多个数据文件,

一个数据库由多个表空间组成,一个表空间只属于一个数据库。

2       名词之间的关系

关于上述名词概念,有一个比较形象的解释:

Database可以看做一个大仓库,仓库分了很多的房间,就是schema,table是schema房间中的一张床,床上可以放很多物品,就像table里放置很多行和列一样。数据库中存储数据的基本单元是table。User是每个schema的主人,user和schema一一对应,每个user没有特别指定时只能使用自己房间(schema)的东西。如果一个user想使用其他房间(schema)的东西,得看那个房间(schema)的主人有没有给你这个权限。或者仓库老大(DBA)有没有给你这个权限。如果你是仓库的主人(DBA),你就有完全的操作权,如,扔掉不用的东西,也可以放置一些有用的东西到某个房间,还可以给User分配权限,也就是他倒某一个房间可以做什么,是只能看(Read-Only),还是可以像主人一样有控制权(R/W),取决于这个user所对应的Role。

2.1      表空间和schema

Schema是数据库对象的逻辑归属和分类,表空间是数据库对象的物理和实际存放位置。

因此,schema和表空间之间没有关系。一个schema里的objects可以存储在不同的表空间里,一个表空间里也可以存储不同schema的objects。

2.2      User和schema

User 主要是用来连接和访问数据库,schema是数据库对象的逻辑归类划分。Schema可以看做是user的别名,user其实也可以承担对对象的逻辑归类。所以用户的默认schema是和user同名的。Schema的创建只能通过创建user来完成,当数据库创建一个用户后,这时还没有schema存在。只有当这个用户创建了属于自己的第一个对象时,oracle为这个用户创建一个schema,来容纳这个对象以及以后创建的对象。

2.3      表空间、数据文件、schema对象

这个图说明的比较清晰明了:

f43705c9e27d122407793a1c349eb316.png

3       Oracle一个数据库的结构

实例->用户->表(用户属于数据库实例,表属于某个用户)

这个结构的创建过程如下:

--创建表空间

Create tablespcespace1

Logging

Datafile ‘D:\Oraclexe\app\datafile1.dbf’

Size 32m

Autoextend on

Next 32mmaxsieze 2048m

Extentmanagement local;

--创建用户并指定表空间

Create USERsisi(用户名) identity by 123456(密码)

Defaulttablespace space1(表空间名)

Temporarytablespace temp(表空间名)

Quato (限额);

--为用户赋予权限

Grant connect,resource to sisi;

Grant createsession to sisi;

--登录用户

Sql>conn sisi/123456

--建立表

Create tableA(name varchar(100) primary key);

3.1      oracle表空间结构

在oracle数据库中,所有数据从逻辑结构上看都存放在表空间,表空间下还有段、区、块等逻辑结构,物理结构上就是由OS file组成。如下图所示:

93432b31643d596ff7d36444328195fd.png

3.1.1        段(segment)

段,oracle数据库中的分配单位,对象如表、索引等都是以段为单位分配。当创建一个表时将创建一个表段,创建一个索引时就创建一个索引段。每一个消耗存储空间的对象最终都被存储到一个单一的段中。段与数据库对象一一对应。段是从数据库存储角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。段不直接和数据文件发生关系,一个段可以属于多个数据文件,段可以指定扩展到哪个数据文件上面。

有回滚段、临时段、聚簇段、索引段等。

一个段可以有多个区。

3.1.2        区(extent)

区,是数据文件中一个连续的分配空间,由块组成,是为数据一次性预留的一个较大的存储空间,直到哪个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区,一直到段的最大区间数(max extent)或没有可用的磁盘空间可申请。Oracle建议把数据分布在尽量少的区间上,减少oracle的管理与磁头移动。

3.1.3             块(block)

块,Oracle最基本的存储单位,是OS数据块的整数倍。块的大小在数据库创建时已经固定下来,一般是2kb、4kb、8kb。数据库中每个块的大小都是相同的,而且所有的块都有相同的格式,由【块头+表目录+行目录+空闲空间+数据空间】组成。

块头,包含着块类型(表块还是索引块)、磁盘上块的位置等信息

表目录,如果有的话,包含此块中存储各行的表的信息(如果一个块中存有多个表中的数据)。

行目录,数据行的描述信息,是一个指针数组,指示了每一行在数据块中的物理位置。

块头,表目录,行目录,统称为块开销,用来统计和管理块。

已经存有数据的就是数据空间,暂时没有的就是空闲空间。

3.2      系统默认创建的基本表空间

系统中默认创建的几个表空间:

SYSTEM   主要存放数据字典和内部系统表 基表

SYSAUX

USERS

UNDOTBS1

EXAMPLE

TEMP

其中,系统必须表空间是SYSTEM,SYSAUX,TEMP,UNDO

3.3      表空间分类

永久表空间存放永久性数据,如表,索引等

临时表空间保存数据排序,分组时产生的临时数据,会在下次系统启动时全被释放

UNDO表空间         保存数据修改前的镜像

UNDO表空间作用:

1) 回滚段的作用

数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。实现数据的回滚。在系统恢复时,回滚段可以用来回滚没有被commit的数据,保证系统的一致性。

回滚段在什么情况下都是大量的写,少量读,因此建议把回滚段单独出来放在一个单独设备,坚持磁盘IO争用。

2) 回滚段工作方式

回滚段表空间可以划分成多个回滚段

一个回滚段可以保存多个会话的数据

回滚段是一个圆形的数据模型

假设回滚段由4个区间组成,使用顺序就是区间1->区间2->区间3->区间4->区间1。循环使用,当区间4到区间1时,区间1的会话还没有结束,区间4用完后就不使用区间1,系统必须分配区间5,来继续为其它会话服务。

3) 一个Update的例子

A. 用户提交一个update语句

B. Server process 检查内存缓存,如果没有该数据库的缓存,从磁盘读入

如果没有内存的有效空间,DBWR被启动将为写入磁盘的脏缓存写入磁盘

如果有有效内存空间,则读入

C. 在缓冲内更新数据

申请一个回滚段入口,将旧数据写入回滚段

加锁更新数据

同时将修改记录在redo logbuffer中

4       参考资料

oracle中的数据库、用户、方案、表空间、表对象之间的关系

http://blog.csdn.net/blognkliming/article/details/7613189

http://www.cnblogs.com/cici-new/archive/2012/12/25/2831740.html

ORACLE 中SCHEMA的概念以及数据库,表空间,数据文件等的区别

http://langgufu.iteye.com/blog/1469055

Tablespaces, Datafiles, and Control Files

http://www.zw1840.com/oracle/translation/concepts/html/03.Tablespaces,%20Datafiles,%20and%20Control%20Files.htm

oracle 体系结构

http://blog.csdn.net/wanghai__/article/details/4683983

ORACLE表空间管理维护

http://www.cnblogs.com/kerrycode/p/3418694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值